Add Friends filter to DMs

Changelog-Added: Add friends filter to DMs
This commit is contained in:
William Casarin
2023-04-21 16:55:49 -07:00
parent ec75769a0f
commit 0bd40c0018
4 changed files with 39 additions and 22 deletions

View File

@@ -182,7 +182,7 @@ struct ContentView: View {
NotificationsView(state: damus, notifications: home.notifications)
case .dms:
DirectMessagesView(damus_state: damus_state!, model: damus_state!.dms)
DirectMessagesView(damus_state: damus_state!, model: damus_state!.dms, settings: damus_state!.settings)
case .none:
EmptyView()

View File

@@ -8,13 +8,18 @@
import SwiftUI
struct FriendsButton: View {
@Binding var enabled: Bool
@Binding var filter: FriendFilter
var body: some View {
Button(action: {
self.enabled.toggle()
switch self.filter {
case .all:
self.filter = .friends
case .friends:
self.filter = .all
}
}) {
if enabled {
if filter == .friends {
LINEAR_GRADIENT
.mask(Image(systemName: "person.2.fill")
.resizable()
@@ -31,9 +36,9 @@ struct FriendsButton: View {
}
struct FriendsButton_Previews: PreviewProvider {
@State static var enabled: Bool = false
@State static var enabled: FriendFilter = .all
static var previews: some View {
FriendsButton(enabled: $enabled)
FriendsButton(filter: $enabled)
}
}

View File

@@ -17,6 +17,7 @@ struct DirectMessagesView: View {
@State var dm_type: DMType = .friend
@ObservedObject var model: DirectMessagesModel
@ObservedObject var settings: UserSettingsStore
func MainContent(requests: Bool) -> some View {
ScrollView {
@@ -29,12 +30,9 @@ struct DirectMessagesView: View {
EmptyTimelineView()
} else {
let dms = requests ? model.message_requests : model.friend_dms
ForEach(dms, id: \.pubkey) { tup in
MaybeEvent(tup)
ForEach(dms, id: \.pubkey) { dm in
MaybeEvent(dm)
.padding(.top, 10)
Divider()
.padding([.top], 10)
}
}
}
@@ -52,11 +50,15 @@ struct DirectMessagesView: View {
func MaybeEvent(_ model: DirectMessageModel) -> some View {
Group {
if let ev = model.events.last {
let ok = damus_state.settings.friend_filter.filter(contacts: damus_state.contacts, pubkey: model.pubkey)
if ok, let ev = model.events.last {
EventView(damus: damus_state, event: ev, pubkey: model.pubkey, options: options)
.onTapGesture {
self.model.open_dm_by_model(model)
}
Divider()
.padding([.top], 10)
} else {
EmptyView()
}
@@ -84,10 +86,28 @@ struct DirectMessagesView: View {
}
.tabViewStyle(.page(indexDisplayMode: .never))
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
if would_filter_non_friends_from_dms(contacts: damus_state.contacts, dms: self.model.dms) {
FriendsButton(filter: $settings.friend_filter)
}
}
}
.navigationTitle(NSLocalizedString("DMs", comment: "Navigation title for view of DMs, where DM is an English abbreviation for Direct Message."))
}
}
func would_filter_non_friends_from_dms(contacts: Contacts, dms: [DirectMessageModel]) -> Bool {
for dm in dms {
if !FriendFilter.friends.filter(contacts: contacts, pubkey: dm.pubkey) {
return true
}
}
return false
}
struct DirectMessagesView_Previews: PreviewProvider {
static var previews: some View {
let ev = NostrEvent(content: "encrypted stuff",
@@ -95,6 +115,6 @@ struct DirectMessagesView_Previews: PreviewProvider {
kind: 4,
tags: [])
let ds = test_damus_state()
DirectMessagesView(damus_state: ds, model: ds.dms)
DirectMessagesView(damus_state: ds, model: ds.dms, settings: ds.settings)
}
}

View File

@@ -60,14 +60,6 @@ class NotificationFilter: ObservableObject, Equatable {
}
}
var fine_filter_binding: Binding<Bool> {
Binding(get: {
return self.fine_filter == .friends
}, set: { v in
self.fine_filter = v ? .friends : .all
})
}
func filter(contacts: Contacts, items: [NotificationItem]) -> [NotificationItem] {
return items.reduce(into: []) { acc, item in
@@ -162,7 +154,7 @@ struct NotificationsView: View {
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
if would_filter_non_friends_from_notifications(contacts: state.contacts, state: self.filter_state.state, items: self.notifications.notifications) {
FriendsButton(enabled: self.filter_state.fine_filter_binding)
FriendsButton(filter: $filter_state.fine_filter)
}
}
}