Revert "mute: adding filtering support for MuteItem events"
This reverts commit 61a9e44898.
This commit is contained in:
@@ -71,7 +71,7 @@ struct ContentView: View {
|
|||||||
@State var active_sheet: Sheets? = nil
|
@State var active_sheet: Sheets? = nil
|
||||||
@State var damus_state: DamusState!
|
@State var damus_state: DamusState!
|
||||||
@SceneStorage("ContentView.selected_timeline") var selected_timeline: Timeline = .home
|
@SceneStorage("ContentView.selected_timeline") var selected_timeline: Timeline = .home
|
||||||
@State var muting: MuteItem? = nil
|
@State var muting: Pubkey? = nil
|
||||||
@State var confirm_mute: Bool = false
|
@State var confirm_mute: Bool = false
|
||||||
@State var hide_bar: Bool = false
|
@State var hide_bar: Bool = false
|
||||||
@State var user_muted_confirm: Bool = false
|
@State var user_muted_confirm: Bool = false
|
||||||
@@ -366,8 +366,8 @@ struct ContentView: View {
|
|||||||
.onReceive(handle_notify(.report)) { target in
|
.onReceive(handle_notify(.report)) { target in
|
||||||
self.active_sheet = .report(target)
|
self.active_sheet = .report(target)
|
||||||
}
|
}
|
||||||
.onReceive(handle_notify(.mute)) { mute_item in
|
.onReceive(handle_notify(.mute)) { pubkey in
|
||||||
self.muting = mute_item
|
self.muting = pubkey
|
||||||
self.confirm_mute = true
|
self.confirm_mute = true
|
||||||
}
|
}
|
||||||
.onReceive(handle_notify(.attached_wallet)) { nwc in
|
.onReceive(handle_notify(.attached_wallet)) { nwc in
|
||||||
@@ -526,7 +526,7 @@ struct ContentView: View {
|
|||||||
user_muted_confirm = false
|
user_muted_confirm = false
|
||||||
}
|
}
|
||||||
}, message: {
|
}, message: {
|
||||||
if case let .user(pubkey, _) = self.muting {
|
if let pubkey = self.muting {
|
||||||
let profile_txn = damus_state!.profiles.lookup(id: pubkey)
|
let profile_txn = damus_state!.profiles.lookup(id: pubkey)
|
||||||
let profile = profile_txn?.unsafeUnownedValue
|
let profile = profile_txn?.unsafeUnownedValue
|
||||||
let name = Profile.displayName(profile: profile, pubkey: pubkey).username.truncate(maxLength: 50)
|
let name = Profile.displayName(profile: profile, pubkey: pubkey).username.truncate(maxLength: 50)
|
||||||
@@ -544,13 +544,13 @@ struct ContentView: View {
|
|||||||
Button(NSLocalizedString("Yes, Overwrite", comment: "Text of button that confirms to overwrite the existing mutelist.")) {
|
Button(NSLocalizedString("Yes, Overwrite", comment: "Text of button that confirms to overwrite the existing mutelist.")) {
|
||||||
guard let ds = damus_state,
|
guard let ds = damus_state,
|
||||||
let keypair = ds.keypair.to_full(),
|
let keypair = ds.keypair.to_full(),
|
||||||
let muting,
|
let pubkey = muting,
|
||||||
let mutelist = create_or_update_mutelist(keypair: keypair, mprev: nil, to_add: muting)
|
let mutelist = create_or_update_mutelist(keypair: keypair, mprev: nil, to_add: .user(pubkey, nil))
|
||||||
else {
|
else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ds.contacts.set_mutelist(mutelist)
|
damus_state?.contacts.set_mutelist(mutelist)
|
||||||
ds.postbox.send(mutelist)
|
ds.postbox.send(mutelist)
|
||||||
|
|
||||||
confirm_overwrite_mutelist = false
|
confirm_overwrite_mutelist = false
|
||||||
@@ -573,21 +573,21 @@ struct ContentView: View {
|
|||||||
confirm_overwrite_mutelist = true
|
confirm_overwrite_mutelist = true
|
||||||
} else {
|
} else {
|
||||||
guard let keypair = ds.keypair.to_full(),
|
guard let keypair = ds.keypair.to_full(),
|
||||||
let muting
|
let pubkey = muting
|
||||||
else {
|
else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let ev = create_or_update_mutelist(keypair: keypair, mprev: ds.contacts.mutelist, to_add: muting) else {
|
guard let ev = create_or_update_mutelist(keypair: keypair, mprev: ds.contacts.mutelist, to_add: .user(pubkey, nil)) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ds.contacts.set_mutelist(ev)
|
damus_state?.contacts.set_mutelist(ev)
|
||||||
ds.postbox.send(ev)
|
ds.postbox.send(ev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, message: {
|
}, message: {
|
||||||
if case let .user(pubkey, _) = muting {
|
if let pubkey = muting {
|
||||||
let profile_txn = damus_state?.profiles.lookup(id: pubkey)
|
let profile_txn = damus_state?.profiles.lookup(id: pubkey)
|
||||||
let profile = profile_txn?.unsafeUnownedValue
|
let profile = profile_txn?.unsafeUnownedValue
|
||||||
let name = Profile.displayName(profile: profile, pubkey: pubkey).username.truncate(maxLength: 50)
|
let name = Profile.displayName(profile: profile, pubkey: pubkey).username.truncate(maxLength: 50)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class Contacts {
|
|||||||
private var friend_of_friends: Set<Pubkey> = Set()
|
private var friend_of_friends: Set<Pubkey> = Set()
|
||||||
/// Tracks which friends are friends of a given pubkey.
|
/// Tracks which friends are friends of a given pubkey.
|
||||||
private var pubkey_to_our_friends = [Pubkey : Set<Pubkey>]()
|
private var pubkey_to_our_friends = [Pubkey : Set<Pubkey>]()
|
||||||
private var muted: Set<MuteItem> = Set()
|
private var muted: Set<Pubkey> = Set()
|
||||||
|
|
||||||
let our_pubkey: Pubkey
|
let our_pubkey: Pubkey
|
||||||
var event: NostrEvent?
|
var event: NostrEvent?
|
||||||
@@ -23,20 +23,20 @@ class Contacts {
|
|||||||
self.our_pubkey = our_pubkey
|
self.our_pubkey = our_pubkey
|
||||||
}
|
}
|
||||||
|
|
||||||
func is_muted(_ item: MuteItem) -> Bool {
|
func is_muted(_ pk: Pubkey) -> Bool {
|
||||||
return muted.contains(item)
|
return muted.contains(pk)
|
||||||
}
|
}
|
||||||
|
|
||||||
func set_mutelist(_ ev: NostrEvent) {
|
func set_mutelist(_ ev: NostrEvent) {
|
||||||
let oldlist = self.mutelist
|
let oldlist = self.mutelist
|
||||||
self.mutelist = ev
|
self.mutelist = ev
|
||||||
|
|
||||||
let old: Set<MuteItem> = oldlist?.mute_list ?? Set<MuteItem>()
|
let old = oldlist.map({ ev in Set(ev.referenced_pubkeys) }) ?? Set<Pubkey>()
|
||||||
let new: Set<MuteItem> = ev.mute_list ?? Set<MuteItem>()
|
let new = Set(ev.referenced_pubkeys)
|
||||||
let diff = old.symmetricDifference(new)
|
let diff = old.symmetricDifference(new)
|
||||||
|
|
||||||
var new_mutes = Set<MuteItem>()
|
var new_mutes = Set<Pubkey>()
|
||||||
var new_unmutes = Set<MuteItem>()
|
var new_unmutes = Set<Pubkey>()
|
||||||
|
|
||||||
for d in diff {
|
for d in diff {
|
||||||
if new.contains(d) {
|
if new.contains(d) {
|
||||||
@@ -47,7 +47,7 @@ class Contacts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: set local mutelist here
|
// TODO: set local mutelist here
|
||||||
self.muted = ev.mute_list ?? Set<MuteItem>()
|
self.muted = Set(ev.referenced_pubkeys)
|
||||||
|
|
||||||
if new_mutes.count > 0 {
|
if new_mutes.count > 0 {
|
||||||
notify(.new_mutes(new_mutes))
|
notify(.new_mutes(new_mutes))
|
||||||
|
|||||||
@@ -278,11 +278,11 @@ class HomeModel {
|
|||||||
|
|
||||||
func filter_events() {
|
func filter_events() {
|
||||||
events.filter { ev in
|
events.filter { ev in
|
||||||
!damus_state.contacts.is_muted(.user(ev.pubkey, nil))
|
!damus_state.contacts.is_muted(ev.pubkey)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.dms.dms = dms.dms.filter { ev in
|
self.dms.dms = dms.dms.filter { ev in
|
||||||
!damus_state.contacts.is_muted(.user(ev.pubkey, nil))
|
!damus_state.contacts.is_muted(ev.pubkey)
|
||||||
}
|
}
|
||||||
|
|
||||||
notifications.filter { ev in
|
notifications.filter { ev in
|
||||||
@@ -290,8 +290,7 @@ class HomeModel {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
let event_muted = damus_state.contacts.mutelist?.mute_list?.event_muted_reason(ev) != nil
|
return !damus_state.contacts.is_muted(ev.pubkey) && !damus_state.muted_threads.isMutedThread(ev, keypair: damus_state.keypair)
|
||||||
return !event_muted
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1094,8 +1093,11 @@ func should_show_event(event: NostrEvent, damus_state: DamusState) -> Bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func should_show_event(keypair: Keypair, hellthreads: MutedThreadsManager, contacts: Contacts, ev: NostrEvent) -> Bool {
|
func should_show_event(keypair: Keypair, hellthreads: MutedThreadsManager, contacts: Contacts, ev: NostrEvent) -> Bool {
|
||||||
let event_muted = contacts.mutelist?.mute_list?.event_muted_reason(ev) != nil
|
if contacts.is_muted(ev.pubkey) {
|
||||||
if event_muted {
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if hellthreads.isMutedThread(ev, keypair: keypair) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,11 +36,16 @@ func should_display_notification(state: HeadlessDamusState, event ev: NostrEvent
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't show notifications that match mute list.
|
// Don't show notifications from muted threads.
|
||||||
if state.contacts.mutelist?.mute_list?.event_muted_reason(ev) != nil {
|
if state.muted_threads.isMutedThread(ev, keypair: state.keypair) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't show notifications from muted users
|
||||||
|
if state.contacts.is_muted(ev.pubkey) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Don't show notifications for old events
|
// Don't show notifications for old events
|
||||||
guard ev.age < EVENT_MAX_AGE_FOR_NOTIFICATION else {
|
guard ev.age < EVENT_MAX_AGE_FOR_NOTIFICATION else {
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct MuteNotify: Notify {
|
struct MuteNotify: Notify {
|
||||||
typealias Payload = MuteItem
|
typealias Payload = Pubkey
|
||||||
var payload: MuteItem
|
var payload: Payload
|
||||||
}
|
}
|
||||||
|
|
||||||
extension NotifyHandler {
|
extension NotifyHandler {
|
||||||
@@ -19,7 +19,7 @@ extension NotifyHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension Notifications {
|
extension Notifications {
|
||||||
static func mute(_ target: MuteItem) -> Notifications<MuteNotify> {
|
static func mute(_ target: Pubkey) -> Notifications<MuteNotify> {
|
||||||
.init(.init(payload: target))
|
.init(.init(payload: target))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct NewMutesNotify: Notify {
|
struct NewMutesNotify: Notify {
|
||||||
typealias Payload = Set<MuteItem>
|
typealias Payload = Set<Pubkey>
|
||||||
var payload: Payload
|
var payload: Payload
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ extension NotifyHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension Notifications {
|
extension Notifications {
|
||||||
static func new_mutes(_ pubkeys: Set<MuteItem>) -> Notifications<NewMutesNotify> {
|
static func new_mutes(_ pubkeys: Set<Pubkey>) -> Notifications<NewMutesNotify> {
|
||||||
.init(.init(payload: pubkeys))
|
.init(.init(payload: pubkeys))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct NewUnmutesNotify: Notify {
|
struct NewUnmutesNotify: Notify {
|
||||||
typealias Payload = Set<MuteItem>
|
typealias Payload = Set<Pubkey>
|
||||||
var payload: Payload
|
var payload: Payload
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ extension NotifyHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension Notifications {
|
extension Notifications {
|
||||||
static func new_unmutes(_ pubkeys: Set<MuteItem>) -> Notifications<NewUnmutesNotify> {
|
static func new_unmutes(_ pubkeys: Set<Pubkey>) -> Notifications<NewUnmutesNotify> {
|
||||||
.init(.init(payload: pubkeys))
|
.init(.init(payload: pubkeys))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ struct DirectMessagesView: View {
|
|||||||
|
|
||||||
func filter_dms(dms: [DirectMessageModel]) -> [DirectMessageModel] {
|
func filter_dms(dms: [DirectMessageModel]) -> [DirectMessageModel] {
|
||||||
return dms.filter({ dm in
|
return dms.filter({ dm in
|
||||||
return damus_state.settings.friend_filter.filter(contacts: damus_state.contacts, pubkey: dm.pubkey) && !damus_state.contacts.is_muted(.user(dm.pubkey, nil))
|
return damus_state.settings.friend_filter.filter(contacts: damus_state.contacts, pubkey: dm.pubkey) && !damus_state.contacts.is_muted(dm.pubkey)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ struct MenuItems: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Button(role: .destructive) {
|
Button(role: .destructive) {
|
||||||
notify(.mute(.user(target_pubkey, nil)))
|
notify(.mute(target_pubkey))
|
||||||
} label: {
|
} label: {
|
||||||
Label(NSLocalizedString("Mute user", comment: "Context menu option for muting users."), image: "mute")
|
Label(NSLocalizedString("Mute user", comment: "Context menu option for muting users."), image: "mute")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,13 +49,12 @@ struct EventMutingContainerView<Content: View>: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onReceive(handle_notify(.new_mutes)) { mutes in
|
.onReceive(handle_notify(.new_mutes)) { mutes in
|
||||||
let new_muted_event_reason = mutes.event_muted_reason(event)
|
if mutes.contains(event.pubkey) {
|
||||||
if new_muted_event_reason != nil {
|
|
||||||
shown = false
|
shown = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onReceive(handle_notify(.new_unmutes)) { unmutes in
|
.onReceive(handle_notify(.new_unmutes)) { unmutes in
|
||||||
if unmutes.event_muted_reason(event) != nil {
|
if unmutes.contains(event.pubkey) {
|
||||||
shown = true
|
shown = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ struct ProfileView: View {
|
|||||||
notify(.report(.user(profile.pubkey)))
|
notify(.report(.user(profile.pubkey)))
|
||||||
}
|
}
|
||||||
|
|
||||||
if damus_state.contacts.is_muted(.user(profile.pubkey, nil)) {
|
if damus_state.contacts.is_muted(profile.pubkey) {
|
||||||
Button(NSLocalizedString("Unmute", comment: "Button to unmute a profile.")) {
|
Button(NSLocalizedString("Unmute", comment: "Button to unmute a profile.")) {
|
||||||
guard
|
guard
|
||||||
let keypair = damus_state.keypair.to_full(),
|
let keypair = damus_state.keypair.to_full(),
|
||||||
@@ -197,7 +197,7 @@ struct ProfileView: View {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Button(NSLocalizedString("Mute", comment: "Button to mute a profile."), role: .destructive) {
|
Button(NSLocalizedString("Mute", comment: "Button to mute a profile."), role: .destructive) {
|
||||||
notify(.mute(.user(profile.pubkey, nil)))
|
notify(.mute(profile.pubkey))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user