diff --git a/CoreDataStack/Entity/Toot.swift b/CoreDataStack/Entity/Toot.swift index fdb6cb5ff..7bc3f2261 100644 --- a/CoreDataStack/Entity/Toot.swift +++ b/CoreDataStack/Entity/Toot.swift @@ -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 } diff --git a/Mastodon/Service/APIService/CoreData/APIService+CoreData+Toot.swift b/Mastodon/Service/APIService/CoreData/APIService+CoreData+Toot.swift index 3e2f8d3a3..d4385d115 100644 --- a/Mastodon/Service/APIService/CoreData/APIService+CoreData+Toot.swift +++ b/Mastodon/Service/APIService/CoreData/APIService+CoreData+Toot.swift @@ -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)