Add thread muting

Changelog-Added: Add thread muting
Closes: #893
This commit is contained in:
2023-04-08 14:44:50 -04:00
committed by William Casarin
parent d5ecc9bce4
commit 1ac9620242
15 changed files with 163 additions and 31 deletions

View File

@@ -19,7 +19,7 @@ struct DMChatView: View {
VStack(alignment: .leading) {
ForEach(Array(zip(dms.events, dms.events.indices)), id: \.0.id) { (ev, ind) in
DMView(event: dms.events[ind], damus_state: damus_state)
.contextMenu{MenuItems(event: ev, keypair: damus_state.keypair, target_pubkey: ev.pubkey, bookmarks: damus_state.bookmarks)}
.contextMenu{MenuItems(event: ev, keypair: damus_state.keypair, target_pubkey: ev.pubkey, bookmarks: damus_state.bookmarks, muted_threads: damus_state.muted_threads)}
}
EndBlock(height: 80)
}

View File

@@ -93,9 +93,9 @@ extension View {
}
}
func event_context_menu(_ event: NostrEvent, keypair: Keypair, target_pubkey: String, bookmarks: BookmarksManager) -> some View {
func event_context_menu(_ event: NostrEvent, keypair: Keypair, target_pubkey: String, bookmarks: BookmarksManager, muted_threads: MutedThreadsManager) -> some View {
return self.contextMenu {
EventMenuContext(event: event, keypair: keypair, target_pubkey: target_pubkey, bookmarks: bookmarks)
EventMenuContext(event: event, keypair: keypair, target_pubkey: target_pubkey, bookmarks: bookmarks, muted_threads: muted_threads)
}
}

View File

@@ -23,7 +23,7 @@ struct EmbeddedEventView: View {
Spacer()
EventMenuContext(event: event, keypair: damus_state.keypair, target_pubkey: event.pubkey, bookmarks: damus_state.bookmarks)
EventMenuContext(event: event, keypair: damus_state.keypair, target_pubkey: event.pubkey, bookmarks: damus_state.bookmarks, muted_threads: damus_state.muted_threads)
.padding([.bottom], 4)
}

View File

@@ -12,6 +12,7 @@ struct EventMenuContext: View {
let keypair: Keypair
let target_pubkey: String
let bookmarks: BookmarksManager
let muted_threads: MutedThreadsManager
@Environment(\.colorScheme) var colorScheme
@@ -19,7 +20,7 @@ struct EventMenuContext: View {
HStack {
Menu {
MenuItems(event: event, keypair: keypair, target_pubkey: target_pubkey, bookmarks: bookmarks)
MenuItems(event: event, keypair: keypair, target_pubkey: target_pubkey, bookmarks: bookmarks, muted_threads: muted_threads)
} label: {
Label("", systemImage: "ellipsis")
@@ -36,14 +37,20 @@ struct MenuItems: View {
let keypair: Keypair
let target_pubkey: String
let bookmarks: BookmarksManager
let muted_threads: MutedThreadsManager
@State private var isBookmarked: Bool = false
@State private var isMutedThread: Bool = false
init(event: NostrEvent, keypair: Keypair, target_pubkey: String, bookmarks: BookmarksManager) {
init(event: NostrEvent, keypair: Keypair, target_pubkey: String, bookmarks: BookmarksManager, muted_threads: MutedThreadsManager) {
let bookmarked = bookmarks.isBookmarked(event)
self._isBookmarked = State(initialValue: bookmarked)
let muted_thread = muted_threads.isMutedThread(event)
self._isMutedThread = State(initialValue: muted_thread)
self.bookmarks = bookmarks
self.muted_threads = muted_threads
self.event = event
self.keypair = keypair
self.target_pubkey = target_pubkey
@@ -86,6 +93,19 @@ struct MenuItems: View {
Label(isBookmarked ? removeBookmarkString : addBookmarkString, systemImage: imageName)
}
if event.known_kind != .dm {
Button {
self.muted_threads.updateMutedThread(event)
let muted = self.muted_threads.isMutedThread(event)
isMutedThread = muted
} label: {
let imageName = isMutedThread ? "speaker" : "speaker.slash"
let unmuteThreadString = NSLocalizedString("Unmute conversation", comment: "Context menu option for unmuting a conversation.")
let muteThreadString = NSLocalizedString("Mute conversation", comment: "Context menu option for muting a conversation.")
Label(isMutedThread ? unmuteThreadString : muteThreadString, systemImage: imageName)
}
}
Button {
NotificationCenter.default.post(name: .broadcast_event, object: event)
} label: {
@@ -104,7 +124,7 @@ struct MenuItems: View {
Button(role: .destructive) {
notify(.mute, target_pubkey)
} label: {
Label(NSLocalizedString("Mute", comment: "Context menu option for muting users."), systemImage: "exclamationmark.octagon")
Label(NSLocalizedString("Mute User", comment: "Context menu option for muting users."), systemImage: "exclamationmark.octagon")
}
}
}

View File

@@ -35,7 +35,7 @@ struct SelectedEventView: View {
Spacer()
EventMenuContext(event: event, keypair: damus.keypair, target_pubkey: event.pubkey, bookmarks: damus.bookmarks)
EventMenuContext(event: event, keypair: damus.keypair, target_pubkey: event.pubkey, bookmarks: damus.bookmarks, muted_threads: damus.muted_threads)
.padding([.bottom], 4)
}

View File

@@ -109,7 +109,7 @@ struct TextEvent: View {
}
var ContextButton: some View {
EventMenuContext(event: event, keypair: damus.keypair, target_pubkey: event.pubkey, bookmarks: damus.bookmarks)
EventMenuContext(event: event, keypair: damus.keypair, target_pubkey: event.pubkey, bookmarks: damus.bookmarks, muted_threads: damus.muted_threads)
.padding([.bottom], 4)
}

View File

@@ -103,13 +103,13 @@ struct NotificationsView: View {
}
.coordinateSpace(name: "scroll")
.onReceive(handle_notify(.scroll_to_top)) { notif in
let _ = notifications.flush()
let _ = notifications.flush(state)
self.notifications.should_queue = false
scroll_to_event(scroller: scroller, id: "startblock", delay: 0.0, animate: true, anchor: .top)
}
}
.onAppear {
let _ = notifications.flush()
let _ = notifications.flush(state)
}
}
}

View File

@@ -50,6 +50,10 @@ struct SearchHomeView: View {
damus: damus_state,
show_friend_icon: true,
filter: {
if damus_state.muted_threads.isMutedThread($0) {
return false
}
if damus_state.settings.show_only_preferred_languages == false {
return true
}