mute: adding filtering support for MuteItem events
This patch depends on: Receiving New Mute List Type
- Changes NewMutesNotify, NewUnmutesNotify & MuteNotify to use MuteItem instead of Pubkey
- Changes is_muted in Contacts.swift to take in a MuteItem instead of a Pubkey
- A lot of changes here were just modifying callers of that to accept the new parameter type
Related: https://github.com/damus-io/damus/issues/1718
Related: https://github.com/damus-io/damus/issues/856
Lighting Address: fishcharlie@strike.me
Signed-off-by: Charlie Fish <contact@charlie.fish>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
committed by
William Casarin
parent
2861ee2c12
commit
61a9e44898
@@ -13,7 +13,7 @@ class Contacts {
|
||||
private var friend_of_friends: Set<Pubkey> = Set()
|
||||
/// Tracks which friends are friends of a given pubkey.
|
||||
private var pubkey_to_our_friends = [Pubkey : Set<Pubkey>]()
|
||||
private var muted: Set<Pubkey> = Set()
|
||||
private var muted: Set<MuteItem> = Set()
|
||||
|
||||
let our_pubkey: Pubkey
|
||||
var event: NostrEvent?
|
||||
@@ -23,20 +23,20 @@ class Contacts {
|
||||
self.our_pubkey = our_pubkey
|
||||
}
|
||||
|
||||
func is_muted(_ pk: Pubkey) -> Bool {
|
||||
return muted.contains(pk)
|
||||
func is_muted(_ item: MuteItem) -> Bool {
|
||||
return muted.contains(item)
|
||||
}
|
||||
|
||||
|
||||
func set_mutelist(_ ev: NostrEvent) {
|
||||
let oldlist = self.mutelist
|
||||
self.mutelist = ev
|
||||
|
||||
let old = oldlist.map({ ev in Set(ev.referenced_pubkeys) }) ?? Set<Pubkey>()
|
||||
let new = Set(ev.referenced_pubkeys)
|
||||
let old: Set<MuteItem> = oldlist?.mute_list ?? Set<MuteItem>()
|
||||
let new: Set<MuteItem> = ev.mute_list ?? Set<MuteItem>()
|
||||
let diff = old.symmetricDifference(new)
|
||||
|
||||
var new_mutes = Set<Pubkey>()
|
||||
var new_unmutes = Set<Pubkey>()
|
||||
var new_mutes = Set<MuteItem>()
|
||||
var new_unmutes = Set<MuteItem>()
|
||||
|
||||
for d in diff {
|
||||
if new.contains(d) {
|
||||
@@ -47,7 +47,7 @@ class Contacts {
|
||||
}
|
||||
|
||||
// TODO: set local mutelist here
|
||||
self.muted = Set(ev.referenced_pubkeys)
|
||||
self.muted = ev.mute_list ?? Set<MuteItem>()
|
||||
|
||||
if new_mutes.count > 0 {
|
||||
notify(.new_mutes(new_mutes))
|
||||
|
||||
@@ -278,11 +278,11 @@ class HomeModel {
|
||||
|
||||
func filter_events() {
|
||||
events.filter { ev in
|
||||
!damus_state.contacts.is_muted(ev.pubkey)
|
||||
!damus_state.contacts.is_muted(.user(ev.pubkey, nil))
|
||||
}
|
||||
|
||||
self.dms.dms = dms.dms.filter { ev in
|
||||
!damus_state.contacts.is_muted(ev.pubkey)
|
||||
!damus_state.contacts.is_muted(.user(ev.pubkey, nil))
|
||||
}
|
||||
|
||||
notifications.filter { ev in
|
||||
@@ -290,7 +290,8 @@ class HomeModel {
|
||||
return false
|
||||
}
|
||||
|
||||
return !damus_state.contacts.is_muted(ev.pubkey) && !damus_state.muted_threads.isMutedThread(ev, keypair: damus_state.keypair)
|
||||
let event_muted = damus_state.contacts.mutelist?.mute_list?.event_muted_reason(ev) != nil
|
||||
return !event_muted
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1093,11 +1094,8 @@ func should_show_event(event: NostrEvent, damus_state: DamusState) -> Bool {
|
||||
}
|
||||
|
||||
func should_show_event(keypair: Keypair, hellthreads: MutedThreadsManager, contacts: Contacts, ev: NostrEvent) -> Bool {
|
||||
if contacts.is_muted(ev.pubkey) {
|
||||
return false
|
||||
}
|
||||
|
||||
if hellthreads.isMutedThread(ev, keypair: keypair) {
|
||||
let event_muted = contacts.mutelist?.mute_list?.event_muted_reason(ev) != nil
|
||||
if event_muted {
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
@@ -36,16 +36,11 @@ func should_display_notification(state: HeadlessDamusState, event ev: NostrEvent
|
||||
return false
|
||||
}
|
||||
|
||||
// Don't show notifications from muted threads.
|
||||
if state.muted_threads.isMutedThread(ev, keypair: state.keypair) {
|
||||
// Don't show notifications that match mute list.
|
||||
if state.contacts.mutelist?.mute_list?.event_muted_reason(ev) != nil {
|
||||
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
|
||||
guard ev.age < EVENT_MAX_AGE_FOR_NOTIFICATION else {
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user