chore: update toot relationship in CoreData

This commit is contained in:
sunxiaojian 2021-02-18 14:32:29 +08:00
parent 99f2e4a854
commit 9670ad2924
2 changed files with 59 additions and 5 deletions

View File

@ -161,6 +161,42 @@ public extension Toot {
}
}
}
func update(reblogged: Bool, mastodonUser: MastodonUser) {
if reblogged {
if !(self.rebloggedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Toot.rebloggedBy)).addObjects(from: [mastodonUser])
}
} else {
if (self.rebloggedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Toot.rebloggedBy)).remove(mastodonUser)
}
}
}
func update(muted: Bool, mastodonUser: MastodonUser) {
if muted {
if !(self.mutedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Toot.mutedBy)).addObjects(from: [mastodonUser])
}
} else {
if (self.mutedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Toot.mutedBy)).remove(mastodonUser)
}
}
}
func update(bookmarked: Bool, mastodonUser: MastodonUser) {
if bookmarked {
if !(self.bookmarkedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Toot.bookmarkedBy)).addObjects(from: [mastodonUser])
}
} else {
if (self.bookmarkedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Toot.bookmarkedBy)).remove(mastodonUser)
}
}
}
func didUpdate(at networkDate: Date) {
self.updatedAt = networkDate
}

View File

@ -73,11 +73,11 @@ extension APIService.CoreData {
mentions: metions,
emojis: emojis,
tags: tags,
favouritedBy: (entity.favourited ?? false) ? mastodonUser : nil,
rebloggedBy: (entity.reblogged ?? false) ? mastodonUser : nil,
mutedBy: (entity.muted ?? false) ? mastodonUser : nil,
bookmarkedBy: (entity.bookmarked ?? false) ? mastodonUser : nil,
pinnedBy: (entity.pinned ?? false) ? mastodonUser : nil
favouritedBy: (entity.favourited ?? false) ? requestMastodonUser : nil,
rebloggedBy: (entity.reblogged ?? false) ? requestMastodonUser : nil,
mutedBy: (entity.muted ?? false) ? requestMastodonUser : nil,
bookmarkedBy: (entity.bookmarked ?? false) ? requestMastodonUser : nil,
pinnedBy: (entity.pinned ?? false) ? requestMastodonUser : nil
)
return (toot, true, isMastodonUserCreated)
}
@ -99,6 +99,24 @@ extension APIService.CoreData {
toot.update(reblogsCount:NSNumber(value: entity.reblogsCount))
}
if let mastodonUser = requestMastodonUser {
if let favourited = entity.favourited {
toot.update(liked: favourited, mastodonUser: mastodonUser)
}
if let reblogged = entity.reblogged {
toot.update(reblogged: reblogged, mastodonUser: mastodonUser)
}
if let muted = entity.muted {
toot.update(muted: muted, mastodonUser: mastodonUser)
}
if let bookmarked = entity.bookmarked {
toot.update(bookmarked: bookmarked, mastodonUser: mastodonUser)
}
}
// set updateAt
toot.didUpdate(at: networkDate)