damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit 06eb9d4a0e20132b04eb619db95eb42fe627288c
parent 3b76fcb743f1e9bb4049228a302b4254bccc9921
Author: Daniel D’Aquino <daniel@daquino.me>
Date:   Tue, 17 Oct 2023 01:36:14 +0000

dm: Do not show DMs from muted users

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 <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mdamus/Views/DirectMessagesView.swift | 16+++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)

diff --git 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)