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:
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
}
}