From 06eb9d4a0e20132b04eb619db95eb42fe627288c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Tue, 17 Oct 2023 01:36:14 +0000 Subject: [PATCH] dm: Do not show DMs from muted users MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commits causes DMs from muted users to be filtered out. It also fixes an issue where the DM list would appear completely blank in certain scenarios. Testing ------- CONDITIONAL PASS Device: iPhone 14 Pro simulator iOS: 17.0 Damus: This commit Setup: - Three test accounts (A, B, and C). "A" will be the account running on the device under test. - Account "A" should start with no DMs 1. Send a direct message from "B" to "A", and reply from "A". 2. Go to DMs -> DMs tab. Conversation with "B" should appear. PASS 3. Mute user "B" (I did it via profiles page). 4. Go back to DMs view via back button. DMs from "B" should not appear. PASS 5. Since there are no DMs, the screen should display "Nothing to see here". PASS 5. Close Damus app via iOS app switcher and reopen Damus 6. Check DMs list. Should only show "Nothing to see here". PASS 7. Send a DM from account "C" to "A" and reply. 8. Go back to DMs -> DMs tab. Only the message from account "C" should appear. 9. Unmute user "B" 10. Go back to DMs. Messages from "B" and "C" should appear. PASS Notes: - There was one instance when the first DM from account "C" appeared in the "DMs" tab (Not "requests") momentarily. After a bit it went into requests as expected. - When unmuting user "B", I had to refresh the DM list by switching tabs, meaning that the view did not immediately update. Upon inspection, the two behaviors above are not caused by this change, so this is a conditional pass. Closes: https://github.com/damus-io/damus/issues/1350 Changelog-Fixed: Do not show DMs from muted users Signed-off-by: Daniel D’Aquino Reviewed-by: William Casarin Signed-off-by: William Casarin --- damus/Views/DirectMessagesView.swift | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/damus/Views/DirectMessagesView.swift b/damus/Views/DirectMessagesView.swift index 352cef710..2ff3da747 100644 --- a/damus/Views/DirectMessagesView.swift +++ b/damus/Views/DirectMessagesView.swift @@ -22,11 +22,12 @@ struct DirectMessagesView: View { func MainContent(requests: Bool) -> some View { ScrollView { LazyVStack(spacing: 0) { - if model.dms.isEmpty, !model.loading { + let dms = requests ? model.message_requests : model.friend_dms + let filtered_dms = filter_dms(dms: dms) + if filtered_dms.isEmpty, !model.loading { EmptyTimelineView() } else { - let dms = requests ? model.message_requests : model.friend_dms - ForEach(dms, id: \.pubkey) { dm in + ForEach(filtered_dms, id: \.pubkey) { dm in MaybeEvent(dm) .padding(.top, 10) } @@ -36,6 +37,12 @@ struct DirectMessagesView: View { } } + func filter_dms(dms: [DirectMessageModel]) -> [DirectMessageModel] { + return dms.filter({ dm in + return damus_state.settings.friend_filter.filter(contacts: damus_state.contacts, pubkey: dm.pubkey) && !damus_state.contacts.is_muted(dm.pubkey) + }) + } + var options: EventViewOptions { if self.damus_state.settings.translate_dms { return [.truncate_content, .no_action_bar] @@ -46,8 +53,7 @@ struct DirectMessagesView: View { func MaybeEvent(_ model: DirectMessageModel) -> some View { Group { - let ok = damus_state.settings.friend_filter.filter(contacts: damus_state.contacts, pubkey: model.pubkey) - if ok, let ev = model.events.last { + if let ev = model.events.last { EventView(damus: damus_state, event: ev, pubkey: model.pubkey, options: options) .onTapGesture { self.model.set_active_dm_model(model)