Browse Source

profile: don't auto-load followers

This is a bandwidth-intensive operation

Changelog-Changed: Don't auto-load follower count
post-button-style
William Casarin 2 years ago
parent
commit
acb2049641
  1. 13
      damus/Models/FollowersModel.swift
  2. 2
      damus/Views/FollowingView.swift
  3. 25
      damus/Views/ProfileView.swift

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

2
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)
}
}

25
damus/Views/ProfileView.swift

@ -201,19 +201,32 @@ struct ProfileView: View {
}
let fview = FollowersView(damus_state: damus_state, whos: profile.pubkey)
.environmentObject(followers)
if followers.contacts != nil {
NavigationLink(destination: fview) {
FollowersCount
}
.buttonStyle(PlainButtonStyle())
} else {
FollowersCount
.onTapGesture {
UIImpactFeedbackGenerator(style: .light).impactOccurred()
followers.contacts = []
followers.subscribe()
}
}
}
}
}
var FollowersCount: some View {
HStack {
Text("\(followers.contacts.count)")
Text("\(followers.count_display)")
.font(.subheadline.weight(.medium))
Text("Followers")
.font(.subheadline)
.foregroundColor(.gray)
}
}
.buttonStyle(PlainButtonStyle())
}
}
}
var body: some View {
VStack(alignment: .leading) {
@ -237,7 +250,7 @@ struct ProfileView: View {
}
.onDisappear {
profile.unsubscribe()
//followers.unsubscribe()
followers.unsubscribe()
// our profilemodel needs a bit more help
}
}

Loading…
Cancel
Save