diff --git a/adapter/misskey.go b/adapter/misskey.go index a10aa50..49e2f9d 100644 --- a/adapter/misskey.go +++ b/adapter/misskey.go @@ -99,8 +99,8 @@ func (self *MisskeyAdapter) poll() { return } default: - notesService = self.mk.Notes() - timelineService = notesService.Timeline() + notesService = self.mk.Notes() + timelineService = notesService.Timeline() // TODO: we have to actually decode and pass our filter criteria // probe for new notes @@ -232,8 +232,8 @@ func (self *MisskeyAdapter) toMessage(n mkm.Note, bustCache bool) *Message { return nil } -func (self *MisskeyAdapter) toAuthor(usr mkm.User) *Author { - fmt.Println("converting author: " + usr.ID) +func (self *MisskeyAdapter) toAuthor(usr mkm.User, bustCache bool) *Author { + host := mkcore.StringValue(usr.Host) authorId := "" if host != "" { @@ -242,28 +242,42 @@ func (self *MisskeyAdapter) toAuthor(usr mkm.User) *Author { authorId = fmt.Sprintf("@%s", usr.Username) } + self.mtx.RLock() + timestamp, exists := self.cache[authorId] + self.mtx.RUnlock() + var updated *int64 = nil if usr.UpdatedAt != nil { updatedTmp := usr.UpdatedAt.UnixMilli() updated = &updatedTmp } - author := Author{ - Datagram: Datagram{ - Id: authorId, - Uri: mkcore.StringValue(usr.URL), - Protocol: "misskey", - Adapter: self.nickname, - Type: "author", - Created: usr.CreatedAt.UnixMilli(), - Updated: updated, - }, - Name: usr.Name, - ProfilePic: usr.AvatarURL, - ProfileData: usr.Description, - } + if bustCache || !exists || (updated != nil && timestamp.Before(time.UnixMilli(*updated))) || timestamp.Before(*usr.CreatedAt) { + fmt.Println("converting author: " + usr.ID) + if usr.UpdatedAt != nil { + self.cache[authorId] = *usr.UpdatedAt + } else { + self.cache[authorId] = *usr.CreatedAt + } - return &author + author := Author{ + Datagram: Datagram{ + Id: authorId, + Uri: mkcore.StringValue(usr.URL), + Protocol: "misskey", + Adapter: self.nickname, + Type: "author", + Created: usr.CreatedAt.UnixMilli(), + Updated: updated, + }, + Name: usr.Name, + ProfilePic: usr.AvatarURL, + ProfileData: usr.Description, + } + + return &author + } + return nil } func (self *MisskeyAdapter) Fetch(etype string, ids []string) error { @@ -331,7 +345,7 @@ func (self *MisskeyAdapter) Fetch(etype string, ids []string) error { if err != nil { return err } else { - a := self.toAuthor(data) + a := self.toAuthor(data, false) if a != nil { self.data <- a }