From 68dd47130ef865eb5365bbf1012839741c135b45 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 16 Mar 2024 12:11:32 +0000 Subject: [PATCH] eventsmodel: remove inheritence in Reactions/Reposts model Simplify with new EventsModel constructors. This is slightly less typesafe but its not a big deal, I hate inheritence more. Signed-off-by: William Casarin --- damus.xcodeproj/project.pbxproj | 12 ------------ damus/Models/EventsModel.swift | 8 ++++++++ damus/Models/ReactionsModel.swift | 16 ---------------- damus/Models/RepostsModel.swift | 15 --------------- damus/Util/Router.swift | 4 ++-- damus/Views/ActionBar/EventDetailBar.swift | 4 ++-- damus/Views/ReactionsView.swift | 6 +++--- damus/Views/RepostsView.swift | 4 ++-- 8 files changed, 17 insertions(+), 52 deletions(-) delete mode 100644 damus/Models/ReactionsModel.swift delete mode 100644 damus/Models/RepostsModel.swift diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index de4189af..af93ba92 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -25,7 +25,6 @@ 3A8CC6CC2A2CFEF900940F5F /* StringUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8CC6CB2A2CFEF900940F5F /* StringUtil.swift */; }; 3A90B1812A4EA3AF00000D94 /* UserSearchCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A90B1802A4EA3AF00000D94 /* UserSearchCache.swift */; }; 3A90B1832A4EA3C600000D94 /* UserSearchCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A90B1822A4EA3C600000D94 /* UserSearchCacheTests.swift */; }; - 3AA247FD297E3CFF0090C62D /* RepostsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA247FC297E3CFF0090C62D /* RepostsModel.swift */; }; 3AA247FF297E3D900090C62D /* RepostsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA247FE297E3D900090C62D /* RepostsView.swift */; }; 3AA24802297E3DC20090C62D /* RepostView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA24801297E3DC20090C62D /* RepostView.swift */; }; 3AA59D1D2999B0400061C48E /* DraftsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA59D1C2999B0400061C48E /* DraftsModel.swift */; }; @@ -61,7 +60,6 @@ 4C1253662A76D0FF0004F4B8 /* OnlyZapsNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253652A76D0FF0004F4B8 /* OnlyZapsNotify.swift */; }; 4C1253682A76D2470004F4B8 /* MuteNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253672A76D2470004F4B8 /* MuteNotify.swift */; }; 4C12536A2A76D3850004F4B8 /* RelaysChangedNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253692A76D3850004F4B8 /* RelaysChangedNotify.swift */; }; - 4C12536C2A76D4B00004F4B8 /* RepostedNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C12536B2A76D4B00004F4B8 /* RepostedNotify.swift */; }; 4C15C7152A55DE7A00D0A0DB /* ReactionsSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C15C7142A55DE7A00D0A0DB /* ReactionsSettingsView.swift */; }; 4C190F202A535FC200027FD5 /* CustomizeZapModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C190F1F2A535FC200027FD5 /* CustomizeZapModel.swift */; }; 4C190F252A547D2000027FD5 /* LoadScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C190F242A547D2000027FD5 /* LoadScript.swift */; }; @@ -294,7 +292,6 @@ 4CB8838B296F6E1E00DC99E7 /* NIP05Badge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838A296F6E1E00DC99E7 /* NIP05Badge.swift */; }; 4CB8838D296F710400DC99E7 /* Reposted.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838C296F710400DC99E7 /* Reposted.swift */; }; 4CB8838F296F781C00DC99E7 /* ReactionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838E296F781C00DC99E7 /* ReactionsView.swift */; }; - 4CB88393296F798300DC99E7 /* ReactionsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB88392296F798300DC99E7 /* ReactionsModel.swift */; }; 4CB88396296F7F8B00DC99E7 /* ReactionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB88395296F7F8B00DC99E7 /* ReactionView.swift */; }; 4CB8839A297322D200DC99E7 /* DMTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB88399297322D200DC99E7 /* DMTests.swift */; }; 4CB883A62975F83C00DC99E7 /* LNUrlPayRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883A52975F83C00DC99E7 /* LNUrlPayRequest.swift */; }; @@ -770,7 +767,6 @@ 3A96D41A298DA94500388A2A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; 3A96D41B298DA94500388A2A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 3A96D41C298DA94500388A2A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = nl; path = nl.lproj/Localizable.stringsdict; sourceTree = ""; }; - 3AA247FC297E3CFF0090C62D /* RepostsModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RepostsModel.swift; sourceTree = ""; }; 3AA247FE297E3D900090C62D /* RepostsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostsView.swift; sourceTree = ""; }; 3AA24801297E3DC20090C62D /* RepostView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostView.swift; sourceTree = ""; }; 3AA59D1C2999B0400061C48E /* DraftsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraftsModel.swift; sourceTree = ""; }; @@ -844,7 +840,6 @@ 4C1253652A76D0FF0004F4B8 /* OnlyZapsNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnlyZapsNotify.swift; sourceTree = ""; }; 4C1253672A76D2470004F4B8 /* MuteNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuteNotify.swift; sourceTree = ""; }; 4C1253692A76D3850004F4B8 /* RelaysChangedNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaysChangedNotify.swift; sourceTree = ""; }; - 4C12536B2A76D4B00004F4B8 /* RepostedNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostedNotify.swift; sourceTree = ""; }; 4C15C7142A55DE7A00D0A0DB /* ReactionsSettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReactionsSettingsView.swift; sourceTree = ""; }; 4C190F1F2A535FC200027FD5 /* CustomizeZapModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomizeZapModel.swift; sourceTree = ""; }; 4C190F242A547D2000027FD5 /* LoadScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadScript.swift; sourceTree = ""; }; @@ -1212,7 +1207,6 @@ 4CB8838A296F6E1E00DC99E7 /* NIP05Badge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP05Badge.swift; sourceTree = ""; }; 4CB8838C296F710400DC99E7 /* Reposted.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Reposted.swift; sourceTree = ""; }; 4CB8838E296F781C00DC99E7 /* ReactionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionsView.swift; sourceTree = ""; }; - 4CB88392296F798300DC99E7 /* ReactionsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionsModel.swift; sourceTree = ""; }; 4CB88395296F7F8B00DC99E7 /* ReactionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionView.swift; sourceTree = ""; }; 4CB88399297322D200DC99E7 /* DMTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DMTests.swift; sourceTree = ""; }; 4CB883A52975F83C00DC99E7 /* LNUrlPayRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LNUrlPayRequest.swift; sourceTree = ""; }; @@ -1590,7 +1584,6 @@ BA3759882ABCCDE30018D73B /* Camera */, 4C190F1E2A535FC200027FD5 /* Zaps */, 4C54AA0829A55416003E4487 /* Notifications */, - 3AA247FC297E3CFF0090C62D /* RepostsModel.swift */, 4C0A3F8E280F640A000448DE /* ThreadModel.swift */, 4C0A3F92280F66F5000448DE /* ReplyMap.swift */, 4C3BEFD12819DB9B00B3DE84 /* ProfileModel.swift */, @@ -1620,7 +1613,6 @@ 4C216F372871EDE300040376 /* DirectMessageModel.swift */, BA693073295D649800ADDB87 /* UserSettingsStore.swift */, 4FE60CDC295E1C5E00105A1F /* Wallet.swift */, - 4CB88392296F798300DC99E7 /* ReactionsModel.swift */, 4CF0ABD32980996B00D66079 /* Report.swift */, 3AE45AF5297BB2E700C1D842 /* LibreTranslateServer.swift */, 3AAA95C9298DF87B00F3D526 /* TranslationService.swift */, @@ -2262,7 +2254,6 @@ 4C86F7C32A76C44C00EC0817 /* ZappingNotify.swift */, 4C1253672A76D2470004F4B8 /* MuteNotify.swift */, 4C1253692A76D3850004F4B8 /* RelaysChangedNotify.swift */, - 4C12536B2A76D4B00004F4B8 /* RepostedNotify.swift */, 4C4E137A2A76D5FB00BDD832 /* MuteThreadNotify.swift */, 4C4E137C2A76D63600BDD832 /* UnmuteThreadNotify.swift */, B57B4C612B312BD700A232C0 /* ReconnectRelaysNotify.swift */, @@ -3113,7 +3104,6 @@ 4C8D00C829DF791C0036AF10 /* CompatibleAttribute.swift in Sources */, 4C7D09742A0AEF9000943473 /* AlbyGradient.swift in Sources */, 4C687C272A6039500092C550 /* TestData.swift in Sources */, - 3AA247FD297E3CFF0090C62D /* RepostsModel.swift in Sources */, 50C3E08A2AA8E3F7006A4BC0 /* AVPlayer+Additions.swift in Sources */, 4C198DF229F88C6B004C165C /* BlurHashDecode.swift in Sources */, F75BA12F29A18EF500E10810 /* BookmarksView.swift in Sources */, @@ -3329,7 +3319,6 @@ 4C32B95E2A9AD44700DC3548 /* FlatBufferObject.swift in Sources */, D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */, 4C3EA64F28FF59F200C48A62 /* tal.c in Sources */, - 4CB88393296F798300DC99E7 /* ReactionsModel.swift in Sources */, 5C42E78C29DB76D90086AAC1 /* EmptyUserSearchView.swift in Sources */, 4CB88396296F7F8B00DC99E7 /* ReactionView.swift in Sources */, 50A16FFD2AA7525700DFEC1F /* DamusVideoPlayerViewModel.swift in Sources */, @@ -3421,7 +3410,6 @@ 4CFF8F6929CC9ED1008DB934 /* ImageContainerView.swift in Sources */, 7527271E2A93FF0100214108 /* Block.swift in Sources */, 4C54AA0729A540BA003E4487 /* NotificationsModel.swift in Sources */, - 4C12536C2A76D4B00004F4B8 /* RepostedNotify.swift in Sources */, 4CE4F0F229D4FCFA005914DB /* DebouncedOnChange.swift in Sources */, 4C32B9592A9AD44700DC3548 /* Table.swift in Sources */, 4C5D5C9D2A6B2CB40024563C /* AsciiCharacter.swift in Sources */, diff --git a/damus/Models/EventsModel.swift b/damus/Models/EventsModel.swift index 7ce906db..ae51fcac 100644 --- a/damus/Models/EventsModel.swift +++ b/damus/Models/EventsModel.swift @@ -23,6 +23,14 @@ class EventsModel: ObservableObject { self.kind = kind } + public static func reposts(state: DamusState, target: NoteId) -> EventsModel { + EventsModel(state: state, target: target, kind: .boost) + } + + public static func likes(state: DamusState, target: NoteId) -> EventsModel { + EventsModel(state: state, target: target, kind: .like) + } + private func get_filter() -> NostrFilter { var filter = NostrFilter(kinds: [kind]) filter.referenced_ids = [target] diff --git a/damus/Models/ReactionsModel.swift b/damus/Models/ReactionsModel.swift deleted file mode 100644 index 3f3bf723..00000000 --- a/damus/Models/ReactionsModel.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// LikesModel.swift -// damus -// -// Created by William Casarin on 2023-01-11. -// - -import Foundation - - -final class ReactionsModel: EventsModel { - - init(state: DamusState, target: NoteId) { - super.init(state: state, target: target, kind: .like) - } -} diff --git a/damus/Models/RepostsModel.swift b/damus/Models/RepostsModel.swift deleted file mode 100644 index 2369b900..00000000 --- a/damus/Models/RepostsModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// RepostsModel.swift -// damus -// -// Created by Terry Yiu on 1/22/23. -// - -import Foundation - -final class RepostsModel: EventsModel { - - init(state: DamusState, target: NoteId) { - super.init(state: state, target: target, kind: .boost) - } -} diff --git a/damus/Util/Router.swift b/damus/Util/Router.swift index 90f0b622..b2899e93 100644 --- a/damus/Util/Router.swift +++ b/damus/Util/Router.swift @@ -31,8 +31,8 @@ enum Route: Hashable { case SearchSettings(settings: UserSettingsStore) case DeveloperSettings(settings: UserSettingsStore) case Thread(thread: ThreadModel) - case Reposts(reposts: RepostsModel) - case Reactions(reactions: ReactionsModel) + case Reposts(reposts: EventsModel) + case Reactions(reactions: EventsModel) case Zaps(target: ZapTarget) case Search(search: SearchModel) case EULA diff --git a/damus/Views/ActionBar/EventDetailBar.swift b/damus/Views/ActionBar/EventDetailBar.swift index aca05e65..af688c1c 100644 --- a/damus/Views/ActionBar/EventDetailBar.swift +++ b/damus/Views/ActionBar/EventDetailBar.swift @@ -25,7 +25,7 @@ struct EventDetailBar: View { var body: some View { HStack { if bar.boosts > 0 { - NavigationLink(value: Route.Reposts(reposts: RepostsModel(state: state, target: target))) { + NavigationLink(value: Route.Reposts(reposts: .reposts(state: state, target: target))) { let nounString = pluralizedString(key: "reposts_count", count: bar.boosts) let noun = Text(nounString).foregroundColor(.gray) Text("\(Text(verbatim: bar.boosts.formatted()).font(.body.bold())) \(noun)", comment: "Sentence composed of 2 variables to describe how many reposts. In source English, the first variable is the number of reposts, and the second variable is 'Repost' or 'Reposts'.") @@ -34,7 +34,7 @@ struct EventDetailBar: View { } if bar.likes > 0 && !state.settings.onlyzaps_mode { - NavigationLink(value: Route.Reactions(reactions: ReactionsModel(state: state, target: target))) { + NavigationLink(value: Route.Reactions(reactions: .likes(state: state, target: target))) { let nounString = pluralizedString(key: "reactions_count", count: bar.likes) let noun = Text(nounString).foregroundColor(.gray) Text("\(Text(verbatim: bar.likes.formatted()).font(.body.bold())) \(noun)", comment: "Sentence composed of 2 variables to describe how many reactions there are on a post. In source English, the first variable is the number of reactions, and the second variable is 'Reaction' or 'Reactions'.") diff --git a/damus/Views/ReactionsView.swift b/damus/Views/ReactionsView.swift index 5d1e02f4..5be84455 100644 --- a/damus/Views/ReactionsView.swift +++ b/damus/Views/ReactionsView.swift @@ -9,8 +9,8 @@ import SwiftUI struct ReactionsView: View { let damus_state: DamusState - @StateObject var model: ReactionsModel - + @StateObject var model: EventsModel + @Environment(\.dismiss) var dismiss var body: some View { @@ -38,6 +38,6 @@ struct ReactionsView: View { struct ReactionsView_Previews: PreviewProvider { static var previews: some View { let state = test_damus_state - ReactionsView(damus_state: state, model: ReactionsModel(state: state, target: test_note.id)) + ReactionsView(damus_state: state, model: .likes(state: state, target: test_note.id)) } } diff --git a/damus/Views/RepostsView.swift b/damus/Views/RepostsView.swift index 210cd703..2aadecb2 100644 --- a/damus/Views/RepostsView.swift +++ b/damus/Views/RepostsView.swift @@ -9,7 +9,7 @@ import SwiftUI struct RepostsView: View { let damus_state: DamusState - @StateObject var model: RepostsModel + @StateObject var model: EventsModel var body: some View { ScrollView { @@ -33,6 +33,6 @@ struct RepostsView: View { struct RepostsView_Previews: PreviewProvider { static var previews: some View { let state = test_damus_state - RepostsView(damus_state: state, model: RepostsModel(state: state, target: test_note.id)) + RepostsView(damus_state: state, model: .reposts(state: state, target: test_note.id)) } }