Browse Source

search working

Signed-off-by: William Casarin <jb55@jb55.com>
profiles-everywhere
William Casarin 3 years ago
parent
commit
7ef9bc531e
  1. 7
      damus/ContentView.swift
  2. 5
      damus/Models/SearchHomeModel.swift
  3. 29
      damus/Views/ProfileView.swift
  4. 3
      damus/Views/SearchHomeView.swift
  5. 27
      damus/Views/SearchResultsView.swift

7
damus/ContentView.swift

@ -332,11 +332,10 @@ struct ContentView: View {
add_relay(pool, "wss://relay.damus.io") add_relay(pool, "wss://relay.damus.io")
add_relay(pool, "wss://nostr-pub.wellorder.net") add_relay(pool, "wss://nostr-pub.wellorder.net")
add_relay(pool, "wss://nostr.onsats.org") //add_relay(pool, "wss://nostr.bitcoiner.social")
add_relay(pool, "wss://nostr.bitcoiner.social")
add_relay(pool, "ws://monad.jb55.com:8080") add_relay(pool, "ws://monad.jb55.com:8080")
add_relay(pool, "wss://nostr-relay.freeberty.net") //add_relay(pool, "wss://nostr-relay.freeberty.net")
add_relay(pool, "wss://nostr-relay.untethr.me") //add_relay(pool, "wss://nostr-relay.untethr.me")
pool.register_handler(sub_id: sub_id, handler: home.handle_event) pool.register_handler(sub_id: sub_id, handler: home.handle_event)

5
damus/Models/SearchHomeModel.swift

@ -13,7 +13,7 @@ class SearchHomeModel: ObservableObject {
@Published var events: [NostrEvent] = [] @Published var events: [NostrEvent] = []
let pool: RelayPool let pool: RelayPool
let sub_id = UUID().description let sub_id = UUID().description
let limit: UInt32 = 1000 let limit: UInt32 = 250
init(pool: RelayPool) { init(pool: RelayPool) {
self.pool = pool self.pool = pool
@ -44,9 +44,6 @@ class SearchHomeModel: ObservableObject {
guard sub_id == self.sub_id else { guard sub_id == self.sub_id else {
return return
} }
guard self.events.count <= limit else {
return
}
if ev.kind == NostrKind.text.rawValue { if ev.kind == NostrKind.text.rawValue {
let _ = insert_uniq_sorted_event(events: &events, new_ev: ev) { let _ = insert_uniq_sorted_event(events: &events, new_ev: ev) {
$0.created_at > $1.created_at $0.created_at > $1.created_at

29
damus/Views/ProfileView.swift

@ -84,12 +84,12 @@ struct ProfileView: View {
Text(data?.about ?? "") Text(data?.about ?? "")
if let contact = profile.contacts { Divider()
Divider()
let contacts = contact.referenced_pubkeys.map { $0.ref_id } HStack {
let following_model = FollowingModel(damus_state: damus_state, contacts: contacts) if let contact = profile.contacts {
HStack { let contacts = contact.referenced_pubkeys.map { $0.ref_id }
let following_model = FollowingModel(damus_state: damus_state, contacts: contacts)
NavigationLink(destination: FollowingView(damus_state: damus_state, following: following_model, whos: profile.pubkey)) { NavigationLink(destination: FollowingView(damus_state: damus_state, following: following_model, whos: profile.pubkey)) {
HStack { HStack {
Text("\(profile.following)") Text("\(profile.following)")
@ -98,18 +98,17 @@ struct ProfileView: View {
} }
} }
.buttonStyle(PlainButtonStyle()) .buttonStyle(PlainButtonStyle())
}
let fview = FollowersView(damus_state: damus_state, whos: profile.pubkey) let fview = FollowersView(damus_state: damus_state, whos: profile.pubkey)
.environmentObject(followers) .environmentObject(followers)
NavigationLink(destination: fview) { NavigationLink(destination: fview) {
HStack { HStack {
Text("\(followers.contacts.count)") Text("\(followers.contacts.count)")
Text("Followers") Text("Followers")
.foregroundColor(.gray) .foregroundColor(.gray)
}
} }
.buttonStyle(PlainButtonStyle())
} }
.buttonStyle(PlainButtonStyle())
} }
} }
} }

3
damus/Views/SearchHomeView.swift

@ -53,6 +53,9 @@ struct SearchHomeView: View {
MainContent MainContent
} }
.onChange(of: search) { s in
print("search change 1")
}
.onAppear { .onAppear {
model.subscribe() model.subscribe()
} }

27
damus/Views/SearchResultsView.swift

@ -17,11 +17,12 @@ struct SearchResultsView: View {
} }
var MainContent: some View { var MainContent: some View {
VStack { ScrollView {
ForEach(results, id: \.0) { prof in LazyVStack {
ProfileSearchResult(pk: prof.0, res: prof.1) ForEach(results, id: \.0) { prof in
ProfileSearchResult(pk: prof.0, res: prof.1)
}
} }
Spacer()
} }
} }
@ -32,9 +33,11 @@ struct SearchResultsView: View {
let prof = els.element.value.profile let prof = els.element.value.profile
let lowname = prof.name.map { $0.lowercased() } let lowname = prof.name.map { $0.lowercased() }
let lowdisp = prof.display_name.map { $0.lowercased() } let lowdisp = prof.display_name.map { $0.lowercased() }
let ok = new == pk || String(new.dropFirst()) == pk let ok = new.count == 1 ?
((lowname?.starts(with: new) ?? false) ||
(lowdisp?.starts(with: new) ?? false)) : (pk.starts(with: new) || String(new.dropFirst()) == pk
|| lowname?.contains(new) ?? false || lowname?.contains(new) ?? false
|| lowdisp?.contains(new) ?? false || lowdisp?.contains(new) ?? false)
if ok { if ok {
acc.append((pk, prof)) acc.append((pk, prof))
} }
@ -45,13 +48,19 @@ struct SearchResultsView: View {
var body: some View { var body: some View {
MainContent MainContent
.frame(maxHeight: .infinity) .frame(maxHeight: .infinity)
.onChange(of: search) { new in search_changed(new) } .onAppear {
search_changed(search)
}
.onChange(of: search) { new in
search_changed(new)
}
} }
} }
/*
struct SearchResultsView_Previews: PreviewProvider { struct SearchResultsView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
let search = Binding<String>.init(get: { "jb55" }, set: { _ in }) SearchResultsView(damus_state: test_damus_state(), s)
SearchResultsView(damus_state: test_damus_state(), search: search)
} }
} }
*/

Loading…
Cancel
Save