profile: don't auto-load followers
This is a bandwidth-intensive operation Changelog-Changed: Don't auto-load follower count
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user