Selaa lähdekoodia

link previews: update to support a list

Uses com.beeper.linkpreviews instead of com.beeper.linkpreview
Sumner Evans 3 vuotta sitten
vanhempi
sitoutus
711548c0ba
2 muutettua tiedostoa jossa 13 lisäystä ja 6 poistoa
  1. 4 2
      portal.go
  2. 9 4
      urlpreview.go

+ 4 - 2
portal.go

@@ -1510,7 +1510,9 @@ func (portal *Portal) convertTextMessage(intent *appservice.IntentAPI, source *U
 		}
 		expiresIn = contextInfo.GetExpiration()
 
-		extraAttrs["com.beeper.linkpreview"] = portal.convertURLPreviewToBeeper(intent, source, msg.GetExtendedTextMessage())
+		extraAttrs["com.beeper.linkpreviews"] = []*BeeperLinkPreview{
+			portal.convertURLPreviewToBeeper(intent, source, msg.GetExtendedTextMessage()),
+		}
 	}
 
 	return &ConvertedMessage{
@@ -2253,7 +2255,7 @@ func (portal *Portal) convertMatrixMessage(sender *User, evt *event.Event) (*waP
 		if content.MsgType == event.MsgEmote && !relaybotFormatted {
 			text = "/me " + text
 		}
-		if ctxInfo.StanzaId != nil || ctxInfo.MentionedJid != nil || ctxInfo.Expiration != nil || evt.Content.Raw["com.beeper.linkpreview"] != nil {
+		if ctxInfo.StanzaId != nil || ctxInfo.MentionedJid != nil || ctxInfo.Expiration != nil || evt.Content.Raw["com.beeper.linkpreviews"] != nil {
 			msg.ExtendedTextMessage = &waProto.ExtendedTextMessage{
 				Text:        &text,
 				ContextInfo: &ctxInfo,

+ 9 - 4
urlpreview.go

@@ -115,12 +115,17 @@ func (portal *Portal) convertURLPreviewToBeeper(intent *appservice.IntentAPI, so
 }
 
 func (portal *Portal) convertURLPreviewToWhatsApp(sender *User, evt *event.Event, dest *waProto.ExtendedTextMessage) {
-	rawPreview := gjson.GetBytes(evt.Content.VeryRaw, `com\.beeper\.linkpreview`)
-	if !rawPreview.Exists() || !rawPreview.IsObject() {
+	rawPreview := gjson.GetBytes(evt.Content.VeryRaw, `com\.beeper\.linkpreviews`)
+	if !rawPreview.Exists() || !rawPreview.IsArray() {
 		return
 	}
-	var preview BeeperLinkPreview
-	if err := json.Unmarshal([]byte(rawPreview.Raw), &preview); err != nil || len(preview.MatchedURL) == 0 {
+	var previews []BeeperLinkPreview
+	if err := json.Unmarshal([]byte(rawPreview.Raw), &previews); err != nil {
+		return
+	}
+	// WhatsApp only supports a single preview.
+	preview := previews[0]
+	if len(preview.MatchedURL) == 0 {
 		return
 	}