diff options
Diffstat (limited to 'internal/federation')
| -rw-r--r-- | internal/federation/dereferencing/account_test.go | 10 | ||||
| -rw-r--r-- | internal/federation/dereferencing/dereferencer.go | 2 | ||||
| -rw-r--r-- | internal/federation/dereferencing/emoji.go | 32 | ||||
| -rw-r--r-- | internal/federation/dereferencing/emoji_test.go | 2 | 
4 files changed, 37 insertions, 9 deletions
| diff --git a/internal/federation/dereferencing/account_test.go b/internal/federation/dereferencing/account_test.go index aec612ac8..ddd9456e8 100644 --- a/internal/federation/dereferencing/account_test.go +++ b/internal/federation/dereferencing/account_test.go @@ -224,6 +224,7 @@ func (suite *AccountTestSuite) TestDereferenceRemoteAccountWithPartial() {  				URI:             "http://fossbros-anonymous.io/emoji/01GD5HCC2YECT012TK8PAGX4D1",  				Shortcode:       "kip_van_den_bos",  				UpdatedAt:       testrig.TimeMustParse("2022-09-13T12:13:12+02:00"), +				ImageUpdatedAt:  testrig.TimeMustParse("2022-09-13T12:13:12+02:00"),  				ImageRemoteURL:  "http://fossbros-anonymous.io/emoji/kip.gif",  				Disabled:        testrig.FalseBool(),  				VisibleInPicker: testrig.FalseBool(), @@ -275,10 +276,12 @@ func (suite *AccountTestSuite) TestDereferenceRemoteAccountWithPartial2() {  			{  				URI:             knownEmoji.URI,  				Shortcode:       knownEmoji.Shortcode, -				UpdatedAt:       knownEmoji.CreatedAt, +				UpdatedAt:       knownEmoji.UpdatedAt, +				ImageUpdatedAt:  knownEmoji.ImageUpdatedAt,  				ImageRemoteURL:  knownEmoji.ImageRemoteURL,  				Disabled:        knownEmoji.Disabled,  				VisibleInPicker: knownEmoji.VisibleInPicker, +				Domain:          knownEmoji.Domain,  			},  		},  	} @@ -326,10 +329,12 @@ func (suite *AccountTestSuite) TestDereferenceRemoteAccountWithPartial3() {  			{  				URI:             knownEmoji.URI,  				Shortcode:       knownEmoji.Shortcode, -				UpdatedAt:       knownEmoji.CreatedAt, +				UpdatedAt:       knownEmoji.UpdatedAt, +				ImageUpdatedAt:  knownEmoji.ImageUpdatedAt,  				ImageRemoteURL:  knownEmoji.ImageRemoteURL,  				Disabled:        knownEmoji.Disabled,  				VisibleInPicker: knownEmoji.VisibleInPicker, +				Domain:          knownEmoji.Domain,  			},  		},  	} @@ -372,6 +377,7 @@ func (suite *AccountTestSuite) TestDereferenceRemoteAccountWithPartial3() {  				URI:             "http://fossbros-anonymous.io/emoji/01GD5HCC2YECT012TK8PAGX4D1",  				Shortcode:       "kip_van_den_bos",  				UpdatedAt:       testrig.TimeMustParse("2022-09-13T12:13:12+02:00"), +				ImageUpdatedAt:  testrig.TimeMustParse("2022-09-13T12:13:12+02:00"),  				ImageRemoteURL:  "http://fossbros-anonymous.io/emoji/kip.gif",  				Disabled:        testrig.FalseBool(),  				VisibleInPicker: testrig.FalseBool(), diff --git a/internal/federation/dereferencing/dereferencer.go b/internal/federation/dereferencing/dereferencer.go index 331df3215..a6cb9b15f 100644 --- a/internal/federation/dereferencing/dereferencer.go +++ b/internal/federation/dereferencing/dereferencer.go @@ -41,7 +41,7 @@ type Dereferencer interface {  	GetRemoteInstance(ctx context.Context, username string, remoteInstanceURI *url.URL) (*gtsmodel.Instance, error)  	GetRemoteMedia(ctx context.Context, requestingUsername string, accountID string, remoteURL string, ai *media.AdditionalMediaInfo) (*media.ProcessingMedia, error) -	GetRemoteEmoji(ctx context.Context, requestingUsername string, remoteURL string, shortcode string, id string, emojiURI string, ai *media.AdditionalEmojiInfo) (*media.ProcessingEmoji, error) +	GetRemoteEmoji(ctx context.Context, requestingUsername string, remoteURL string, shortcode string, id string, emojiURI string, ai *media.AdditionalEmojiInfo, refresh bool) (*media.ProcessingEmoji, error)  	DereferenceAnnounce(ctx context.Context, announce *gtsmodel.Status, requestingUsername string) error  	DereferenceThread(ctx context.Context, username string, statusIRI *url.URL, status *gtsmodel.Status, statusable ap.Statusable) diff --git a/internal/federation/dereferencing/emoji.go b/internal/federation/dereferencing/emoji.go index 622b131c9..3cdb1d52d 100644 --- a/internal/federation/dereferencing/emoji.go +++ b/internal/federation/dereferencing/emoji.go @@ -31,7 +31,7 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/media"  ) -func (d *deref) GetRemoteEmoji(ctx context.Context, requestingUsername string, remoteURL string, shortcode string, id string, emojiURI string, ai *media.AdditionalEmojiInfo) (*media.ProcessingEmoji, error) { +func (d *deref) GetRemoteEmoji(ctx context.Context, requestingUsername string, remoteURL string, shortcode string, id string, emojiURI string, ai *media.AdditionalEmojiInfo, refresh bool) (*media.ProcessingEmoji, error) {  	t, err := d.transportController.NewTransportForUsername(ctx, requestingUsername)  	if err != nil {  		return nil, fmt.Errorf("GetRemoteEmoji: error creating transport: %s", err) @@ -46,7 +46,7 @@ func (d *deref) GetRemoteEmoji(ctx context.Context, requestingUsername string, r  		return t.DereferenceMedia(innerCtx, derefURI)  	} -	processingMedia, err := d.mediaManager.ProcessEmoji(ctx, dataFunc, nil, shortcode, id, emojiURI, ai) +	processingMedia, err := d.mediaManager.ProcessEmoji(ctx, dataFunc, nil, shortcode, id, emojiURI, ai, refresh)  	if err != nil {  		return nil, fmt.Errorf("GetRemoteEmoji: error processing emoji: %s", err)  	} @@ -69,12 +69,34 @@ func (d *deref) populateEmojis(ctx context.Context, rawEmojis []*gtsmodel.Emoji,  		var err error  		// check if we've already got this emoji in the db -		if gotEmoji, err = d.db.GetEmojiByURI(ctx, e.URI); err != nil && err != db.ErrNoEntries { +		if gotEmoji, err = d.db.GetEmojiByShortcodeDomain(ctx, e.Shortcode, e.Domain); err != nil && err != db.ErrNoEntries {  			log.Errorf("populateEmojis: error checking database for emoji %s: %s", e.URI, err)  			continue  		} -		if gotEmoji == nil { +		if gotEmoji != nil { +			// we had the emoji in our database already; make sure the one we have is up to date +			if (e.UpdatedAt.After(gotEmoji.ImageUpdatedAt)) || (e.URI != gotEmoji.URI) || (e.ImageRemoteURL != gotEmoji.ImageRemoteURL) { +				emojiID := gotEmoji.ID // use existing ID +				processingEmoji, err := d.GetRemoteEmoji(ctx, requestingUsername, e.ImageRemoteURL, e.Shortcode, emojiID, e.URI, &media.AdditionalEmojiInfo{ +					Domain:               &e.Domain, +					ImageRemoteURL:       &e.ImageRemoteURL, +					ImageStaticRemoteURL: &e.ImageRemoteURL, +					Disabled:             gotEmoji.Disabled, +					VisibleInPicker:      gotEmoji.VisibleInPicker, +				}, true) + +				if err != nil { +					log.Errorf("populateEmojis: couldn't refresh remote emoji %s: %s", e.URI, err) +					continue +				} + +				if gotEmoji, err = processingEmoji.LoadEmoji(ctx); err != nil { +					log.Errorf("populateEmojis: couldn't load refreshed remote emoji %s: %s", e.URI, err) +					continue +				} +			} +		} else {  			// it's new! go get it!  			newEmojiID, err := id.NewRandomULID()  			if err != nil { @@ -88,7 +110,7 @@ func (d *deref) populateEmojis(ctx context.Context, rawEmojis []*gtsmodel.Emoji,  				ImageStaticRemoteURL: &e.ImageRemoteURL,  				Disabled:             e.Disabled,  				VisibleInPicker:      e.VisibleInPicker, -			}) +			}, false)  			if err != nil {  				log.Errorf("populateEmojis: couldn't get remote emoji %s: %s", e.URI, err) diff --git a/internal/federation/dereferencing/emoji_test.go b/internal/federation/dereferencing/emoji_test.go index b03d839ce..3093a1e7f 100644 --- a/internal/federation/dereferencing/emoji_test.go +++ b/internal/federation/dereferencing/emoji_test.go @@ -51,7 +51,7 @@ func (suite *EmojiTestSuite) TestDereferenceEmojiBlocking() {  		VisibleInPicker:      &emojiVisibleInPicker,  	} -	processingEmoji, err := suite.dereferencer.GetRemoteEmoji(ctx, fetchingAccount.Username, emojiImageRemoteURL, emojiShortcode, emojiID, emojiURI, ai) +	processingEmoji, err := suite.dereferencer.GetRemoteEmoji(ctx, fetchingAccount.Username, emojiImageRemoteURL, emojiShortcode, emojiID, emojiURI, ai, false)  	suite.NoError(err)  	// make a blocking call to load the emoji from the in-process media | 
