damus

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

commit acb204964171b611da86595d8cba79a9253a034a
parent 85ba7bbed0fceabfdd20ee55b88dd7593cb7d5f7
Author: William Casarin <jb55@jb55.com>
Date:   Fri, 23 Dec 2022 15:17:19 -0800

profile: don't auto-load followers

This is a bandwidth-intensive operation

Changelog-Changed: Don't auto-load follower count

Diffstat:
Mdamus/Models/FollowersModel.swift | 13++++++++++---
Mdamus/Views/FollowingView.swift | 2+-
Mdamus/Views/ProfileView.swift | 31++++++++++++++++++++++---------
3 files changed, 33 insertions(+), 13 deletions(-)

diff --git a/damus/Models/FollowersModel.swift b/damus/Models/FollowersModel.swift @@ -12,12 +12,19 @@ class FollowersModel: ObservableObject { let target: String var needs_sub: Bool = true - @Published var contacts: [String] = [] + @Published var contacts: [String]? = nil var has_contact: Set<String> = Set() let sub_id: String = UUID().description let profiles_id: String = UUID().description + var count_display: String { + guard let contacts = self.contacts else { + return "?" + } + return "\(contacts.count)"; + } + init(damus_state: DamusState, target: String) { self.damus_state = damus_state self.target = target @@ -49,13 +56,13 @@ class FollowersModel: ObservableObject { contacts: damus_state.contacts, pubkey: damus_state.pubkey, ev: ev ) - contacts.append(ev.pubkey) + contacts?.append(ev.pubkey) has_contact.insert(ev.pubkey) } func load_profiles(relay_id: String) { var filter = NostrFilter.filter_profiles - let authors = find_profiles_to_fetch_pk(profiles: damus_state.profiles, event_pubkeys: contacts) + let authors = find_profiles_to_fetch_pk(profiles: damus_state.profiles, event_pubkeys: contacts ?? []) if authors.isEmpty { return } diff --git a/damus/Views/FollowingView.swift b/damus/Views/FollowingView.swift @@ -47,7 +47,7 @@ struct FollowersView: View { let profile = damus_state.profiles.lookup(id: whos) ScrollView { LazyVStack(alignment: .leading) { - ForEach(followers.contacts, id: \.self) { pk in + ForEach(followers.contacts ?? [], id: \.self) { pk in FollowUserView(target: .pubkey(pk), damus_state: damus_state) } } diff --git a/damus/Views/ProfileView.swift b/damus/Views/ProfileView.swift @@ -201,20 +201,33 @@ struct ProfileView: View { } let fview = FollowersView(damus_state: damus_state, whos: profile.pubkey) .environmentObject(followers) - NavigationLink(destination: fview) { - HStack { - Text("\(followers.contacts.count)") - .font(.subheadline.weight(.medium)) - Text("Followers") - .font(.subheadline) - .foregroundColor(.gray) + if followers.contacts != nil { + NavigationLink(destination: fview) { + FollowersCount } + .buttonStyle(PlainButtonStyle()) + } else { + FollowersCount + .onTapGesture { + UIImpactFeedbackGenerator(style: .light).impactOccurred() + followers.contacts = [] + followers.subscribe() + } } - .buttonStyle(PlainButtonStyle()) } } } + var FollowersCount: some View { + HStack { + Text("\(followers.count_display)") + .font(.subheadline.weight(.medium)) + Text("Followers") + .font(.subheadline) + .foregroundColor(.gray) + } + } + var body: some View { VStack(alignment: .leading) { ScrollView { @@ -237,7 +250,7 @@ struct ProfileView: View { } .onDisappear { profile.unsubscribe() - //followers.unsubscribe() + followers.unsubscribe() // our profilemodel needs a bit more help } }