diff --git a/damus/Views/SearchView.swift b/damus/Views/SearchView.swift index eb55cd6a..3d5fddf5 100644 --- a/damus/Views/SearchView.swift +++ b/damus/Views/SearchView.swift @@ -11,7 +11,8 @@ struct SearchView: View { let appstate: DamusState @ObservedObject var search: SearchModel @Environment(\.dismiss) var dismiss - + @State var is_hashtag_muted: Bool = false + var content_filter: (NostrEvent) -> Bool { let filters = ContentFilters.defaults(damus_state: self.appstate) return ContentFilters(filters: filters).filter @@ -41,7 +42,68 @@ struct SearchView: View { } .onReceive(handle_notify(.new_mutes)) { notif in search.filter_muted() + + if let hashtag_string = search.search.hashtag?.first, + notif.contains(MuteItem.hashtag(Hashtag(hashtag: hashtag_string), nil)) { + is_hashtag_muted = true + } } + .onReceive(handle_notify(.new_unmutes)) { unmutes in + if let hashtag_string = search.search.hashtag?.first, + unmutes.contains(MuteItem.hashtag(Hashtag(hashtag: hashtag_string), nil)) { + is_hashtag_muted = false + } + } + .toolbar { + if let hashtag = search.search.hashtag?.first { + ToolbarItem(placement: .topBarTrailing) { + Menu { + if is_hashtag_muted { + Button { + guard + let full_keypair = appstate.keypair.to_full(), + let existing_mutelist = appstate.contacts.mutelist, + let mutelist = remove_from_mutelist(keypair: full_keypair, prev: existing_mutelist, to_remove: .hashtag(Hashtag(hashtag: hashtag), nil)) + else { + return + } + + appstate.contacts.set_mutelist(mutelist) + appstate.postbox.send(mutelist) + } label: { + Text("Unmute Hashtag", comment: "Label represnting a button that the user can tap to unmute a given hashtag so they start seeing it in their feed again.") + } + } else { + MuteDurationMenu { duration in + mute_hashtag(hashtag_string: hashtag, expiration_time: duration?.date_from_now) + } label: { + Text("Mute Hashtag", comment: "Label represnting a button that the user can tap to mute a given hashtag so they don't see it in their feed anymore.") + } + } + } label: { + Image(systemName: "ellipsis") + } + } + } + } + .onAppear { + if let hashtag_string = search.search.hashtag?.first { + is_hashtag_muted = (appstate.contacts.mutelist?.mute_list ?? []).contains(MuteItem.hashtag(Hashtag(hashtag: hashtag_string), nil)) + } + } + } + + func mute_hashtag(hashtag_string: String, expiration_time: Date?) { + guard + let full_keypair = appstate.keypair.to_full(), + let existing_mutelist = appstate.contacts.mutelist, + let mutelist = create_or_update_mutelist(keypair: full_keypair, mprev: existing_mutelist, to_add: .hashtag(Hashtag(hashtag: hashtag_string), expiration_time)) + else { + return + } + + appstate.contacts.set_mutelist(mutelist) + appstate.postbox.send(mutelist) } var described_search: DescribedSearch {