From b917b4e9d6cc877a41eb636e2e77f7f03cd2c5c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Tue, 7 May 2024 04:31:47 +0000 Subject: [PATCH] Apply mute rules to Timeline views by default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mute rules were not applied in all timeline views. This commit adds code to filter out muted events on timelines. It also provides an opt-out parameter if there is ever a need to a timeline without mute filters Testing -------- PASS Device: iPhone 13 Mini iOS: 17.4.1 Damus: This commit Coverage: 1. Add a muted keyword 2. Go to home view, check that events with that keyword are now not showing up Signed-off-by: Daniel D’Aquino Signed-off-by: William Casarin --- damus/Views/Timeline/InnerTimelineView.swift | 4 ++-- damus/Views/TimelineView.swift | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/damus/Views/Timeline/InnerTimelineView.swift b/damus/Views/Timeline/InnerTimelineView.swift index 4212f3dc..0e572f8f 100644 --- a/damus/Views/Timeline/InnerTimelineView.swift +++ b/damus/Views/Timeline/InnerTimelineView.swift @@ -13,10 +13,10 @@ struct InnerTimelineView: View { let state: DamusState let filter: (NostrEvent) -> Bool - init(events: EventHolder, damus: DamusState, filter: @escaping (NostrEvent) -> Bool) { + init(events: EventHolder, damus: DamusState, filter: @escaping (NostrEvent) -> Bool, apply_mute_rules: Bool = true) { self.events = events self.state = damus - self.filter = filter + self.filter = apply_mute_rules ? { filter($0) && !damus.mutelist_manager.is_event_muted($0) } : filter } var event_options: EventViewOptions { diff --git a/damus/Views/TimelineView.swift b/damus/Views/TimelineView.swift index 6a88e6fb..f08fcd87 100644 --- a/damus/Views/TimelineView.swift +++ b/damus/Views/TimelineView.swift @@ -16,13 +16,15 @@ struct TimelineView: View { let filter: (NostrEvent) -> Bool let content: Content? let debouncer: Debouncer + let apply_mute_rules: Bool - init(events: EventHolder, loading: Binding, damus: DamusState, show_friend_icon: Bool, filter: @escaping (NostrEvent) -> Bool, content: (() -> Content)? = nil) { + init(events: EventHolder, loading: Binding, damus: DamusState, show_friend_icon: Bool, filter: @escaping (NostrEvent) -> Bool, apply_mute_rules: Bool = true, content: (() -> Content)? = nil) { self.events = events self._loading = loading self.damus = damus self.show_friend_icon = show_friend_icon self.filter = filter + self.apply_mute_rules = apply_mute_rules self.debouncer = Debouncer(interval: 0.5) self.content = content?() } @@ -42,7 +44,7 @@ struct TimelineView: View { .id("startblock") .frame(height: 1) - InnerTimelineView(events: events, damus: damus, filter: loading ? { _ in true } : filter) + InnerTimelineView(events: events, damus: damus, filter: loading ? { _ in true } : filter, apply_mute_rules: self.apply_mute_rules) .redacted(reason: loading ? .placeholder : []) .shimmer(loading) .disabled(loading)