summaryrefslogtreecommitdiff
path: root/internal/ap
diff options
context:
space:
mode:
authorLibravatar Sam Lade <sam@sentynel.com>2023-02-20 15:27:41 +0000
committerLibravatar GitHub <noreply@github.com>2023-02-20 16:27:41 +0100
commitf559d4626118c103225134b4fa87a075702c7e41 (patch)
tree52d5150a6821039219eae1d4ff7ff37354e96b13 /internal/ap
parentUpdate README.md (#1533) (diff)
downloadgotosocial-f559d4626118c103225134b4fa87a075702c7e41.tar.xz
[bugfix] Fix failure to look up remote profiles with duplicate emojis in some cases (#1534)
* Tidy up emoji parsing on profile submission Don't bother reparsing for emoji unless one of the fields that can have emoji in it has changed. Deduplicate emoji between the display name and profile note - I'm not sure whether this was hurting anything, but better safe. * Deduplicate emoji when parsing remote accounts Some servers - Misskey at least - don't deduplicate emoji, so it's possible to get an account which has the same emoji used in both the display name and note and therefore includes that emoji twice in its metadata. When we start trying to put those into our database, we run into a uniqueness constraint and fall over. This change just deduplicates at the point of construction of an account.
Diffstat (limited to 'internal/ap')
-rw-r--r--internal/ap/extract.go4
1 files changed, 4 insertions, 0 deletions
diff --git a/internal/ap/extract.go b/internal/ap/extract.go
index f3ff6d3b2..5d8dbd49d 100644
--- a/internal/ap/extract.go
+++ b/internal/ap/extract.go
@@ -453,6 +453,7 @@ func ExtractHashtag(i Hashtaggable) (*gtsmodel.Tag, error) {
// ExtractEmojis returns a slice of emojis on the interface.
func ExtractEmojis(i WithTag) ([]*gtsmodel.Emoji, error) {
emojis := []*gtsmodel.Emoji{}
+ emojiMap := make(map[string]*gtsmodel.Emoji)
tagsProp := i.GetActivityStreamsTag()
if tagsProp == nil {
return emojis, nil
@@ -477,6 +478,9 @@ func ExtractEmojis(i WithTag) ([]*gtsmodel.Emoji, error) {
continue
}
+ emojiMap[emoji.URI] = emoji
+ }
+ for _, emoji := range emojiMap {
emojis = append(emojis, emoji)
}
return emojis, nil