mirror of
git://jb55.com/damus
synced 2024-10-06 11:43:21 +00:00
Show other people's zaps
Changelog-Fixed: Fix a bug where zaps on other people's posts weren't showing
This commit is contained in:
parent
98c7bf5afc
commit
49cf56f4c2
@ -31,6 +31,17 @@ class ActionBarModel: ObservableObject {
|
||||
self.our_zap = our_zap
|
||||
}
|
||||
|
||||
func update(damus: DamusState, evid: String) {
|
||||
self.likes = damus.likes.counts[evid] ?? 0
|
||||
self.boosts = damus.boosts.counts[evid] ?? 0
|
||||
self.zaps = damus.zaps.event_counts[evid] ?? 0
|
||||
self.zap_total = damus.zaps.event_totals[evid] ?? 0
|
||||
self.our_like = damus.likes.our_events[evid]
|
||||
self.our_boost = damus.boosts.our_events[evid]
|
||||
self.our_zap = damus.zaps.our_zaps[evid]?.first
|
||||
self.objectWillChange.send()
|
||||
}
|
||||
|
||||
var is_empty: Bool {
|
||||
return likes == 0 && boosts == 0 && zaps == 0
|
||||
}
|
||||
|
@ -142,12 +142,12 @@ class HomeModel: ObservableObject {
|
||||
return
|
||||
}
|
||||
|
||||
if let local_zapper = damus_state.profiles.lookup_zapper(pubkey: damus_state.pubkey) {
|
||||
if let local_zapper = damus_state.profiles.lookup_zapper(pubkey: ptag) {
|
||||
handle_zap_event_with_zapper(ev, our_pubkey: damus_state.pubkey, zapper: local_zapper)
|
||||
return
|
||||
}
|
||||
|
||||
guard let profile = damus_state.profiles.lookup(id: damus_state.pubkey) else {
|
||||
guard let profile = damus_state.profiles.lookup(id: ptag) else {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -98,6 +98,9 @@ extension Notification.Name {
|
||||
static var deleted_account: Notification.Name {
|
||||
return Notification.Name("deleted_account")
|
||||
}
|
||||
static var new_zap: Notification.Name {
|
||||
return Notification.Name("new_zap")
|
||||
}
|
||||
}
|
||||
|
||||
func handle_notify(_ name: Notification.Name) -> NotificationCenter.Publisher {
|
||||
|
@ -60,6 +60,8 @@ class Zaps {
|
||||
event_counts[id] = event_counts[id]! + 1
|
||||
event_totals[id] = event_totals[id]! + zap.invoice.amount
|
||||
|
||||
notify(.new_zap, zap)
|
||||
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -28,13 +28,14 @@ struct EventActionBar: View {
|
||||
@State var sheet: ActionBarSheet? = nil
|
||||
@State var confirm_boost: Bool = false
|
||||
@State var show_share_sheet: Bool = false
|
||||
@StateObject var bar: ActionBarModel
|
||||
|
||||
init(damus_state: DamusState, event: NostrEvent, bar: ActionBarModel, test_lnurl: String? = nil) {
|
||||
@ObservedObject var bar: ActionBarModel
|
||||
|
||||
init(damus_state: DamusState, event: NostrEvent, bar: ActionBarModel? = nil, test_lnurl: String? = nil) {
|
||||
self.damus_state = damus_state
|
||||
self.event = event
|
||||
self.test_lnurl = test_lnurl
|
||||
_bar = StateObject.init(wrappedValue: bar)
|
||||
_bar = ObservedObject(wrappedValue: bar ?? make_actionbar_model(ev: event.id, damus: damus_state))
|
||||
}
|
||||
|
||||
var lnurl: String? {
|
||||
@ -110,6 +111,16 @@ struct EventActionBar: View {
|
||||
} message: {
|
||||
Text("Are you sure you want to repost this?", comment: "Alert message to ask if user wants to repost a post.")
|
||||
}
|
||||
.onReceive(handle_notify(.new_zap)) { n in
|
||||
let zap = n.object as! Zap
|
||||
guard case .note(let note_target) = zap.target else {
|
||||
return
|
||||
}
|
||||
guard note_target.note_id == self.event.id else {
|
||||
return
|
||||
}
|
||||
self.bar.update(damus: self.damus_state, evid: self.event.id)
|
||||
}
|
||||
.onReceive(handle_notify(.liked)) { n in
|
||||
let liked = n.object as! Counted
|
||||
if liked.id != event.id {
|
||||
|
@ -11,8 +11,17 @@ struct EventDetailBar: View {
|
||||
let state: DamusState
|
||||
let target: String
|
||||
let target_pk: String
|
||||
|
||||
@ObservedObject var bar: ActionBarModel
|
||||
|
||||
init (state: DamusState, target: String, target_pk: String) {
|
||||
self.state = state
|
||||
self.target = target
|
||||
self.target_pk = target_pk
|
||||
self._bar = ObservedObject(wrappedValue: make_actionbar_model(ev: target, damus: state))
|
||||
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
HStack {
|
||||
if bar.boosts > 0 {
|
||||
@ -42,6 +51,6 @@ struct EventDetailBar: View {
|
||||
|
||||
struct EventDetailBar_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
EventDetailBar(state: test_damus_state(), target: "", target_pk: "", bar: ActionBarModel.empty())
|
||||
EventDetailBar(state: test_damus_state(), target: "", target_pk: "")
|
||||
}
|
||||
}
|
||||
|
@ -116,7 +116,7 @@ struct ChatView: View {
|
||||
size: .normal)
|
||||
|
||||
if is_active || next_ev == nil || next_ev!.pubkey != event.pubkey {
|
||||
let bar = make_actionbar_model(ev: event, damus: damus_state)
|
||||
let bar = make_actionbar_model(ev: event.id, damus: damus_state)
|
||||
EventActionBar(damus_state: damus_state, event: event, bar: bar)
|
||||
}
|
||||
|
||||
|
@ -152,16 +152,14 @@ func format_date(_ created_at: Int64) -> String {
|
||||
return dateFormatter.string(from: date)
|
||||
}
|
||||
|
||||
|
||||
|
||||
func make_actionbar_model(ev: NostrEvent, damus: DamusState) -> ActionBarModel {
|
||||
let likes = damus.likes.counts[ev.id]
|
||||
let boosts = damus.boosts.counts[ev.id]
|
||||
let zaps = damus.zaps.event_counts[ev.id]
|
||||
let zap_total = damus.zaps.event_totals[ev.id]
|
||||
let our_like = damus.likes.our_events[ev.id]
|
||||
let our_boost = damus.boosts.our_events[ev.id]
|
||||
let our_zap = damus.zaps.our_zaps[ev.id]
|
||||
func make_actionbar_model(ev: String, damus: DamusState) -> ActionBarModel {
|
||||
let likes = damus.likes.counts[ev]
|
||||
let boosts = damus.boosts.counts[ev]
|
||||
let zaps = damus.zaps.event_counts[ev]
|
||||
let zap_total = damus.zaps.event_totals[ev]
|
||||
let our_like = damus.likes.our_events[ev]
|
||||
let our_boost = damus.boosts.our_events[ev]
|
||||
let our_zap = damus.zaps.our_zaps[ev]
|
||||
|
||||
return ActionBarModel(likes: likes ?? 0,
|
||||
boosts: boosts ?? 0,
|
||||
|
@ -53,8 +53,7 @@ struct BuilderEventView: View {
|
||||
NostrFilter(ids: [self.event_id], limit: 1),
|
||||
NostrFilter(
|
||||
kinds: [NostrKind.zap.rawValue],
|
||||
referenced_ids: [self.event_id],
|
||||
limit: 500
|
||||
referenced_ids: [self.event_id]
|
||||
)
|
||||
])
|
||||
}
|
||||
|
@ -15,6 +15,14 @@ struct SelectedEventView: View {
|
||||
event.pubkey
|
||||
}
|
||||
|
||||
@StateObject var bar: ActionBarModel
|
||||
|
||||
init(damus: DamusState, event: NostrEvent) {
|
||||
self.damus = damus
|
||||
self.event = event
|
||||
self._bar = StateObject(wrappedValue: make_actionbar_model(ev: event.id, damus: damus))
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
HStack(alignment: .top) {
|
||||
let profile = damus.profiles.lookup(id: pubkey)
|
||||
@ -35,19 +43,27 @@ struct SelectedEventView: View {
|
||||
Divider()
|
||||
.padding([.bottom], 4)
|
||||
|
||||
let bar = make_actionbar_model(ev: event, damus: damus)
|
||||
|
||||
if !bar.is_empty {
|
||||
EventDetailBar(state: damus, target: event.id, target_pk: event.pubkey, bar: bar)
|
||||
EventDetailBar(state: damus, target: event.id, target_pk: event.pubkey)
|
||||
Divider()
|
||||
}
|
||||
|
||||
EventActionBar(damus_state: damus, event: event, bar: bar)
|
||||
EventActionBar(damus_state: damus, event: event)
|
||||
.padding([.top], 4)
|
||||
|
||||
Divider()
|
||||
.padding([.top], 4)
|
||||
}
|
||||
.onReceive(handle_notify(.new_zap)) { n in
|
||||
let zap = n.object as! Zap
|
||||
guard case .note(let note_target) = zap.target else {
|
||||
return
|
||||
}
|
||||
guard note_target.note_id == self.event.id else {
|
||||
return
|
||||
}
|
||||
self.bar.update(damus: self.damus, evid: self.event.id)
|
||||
}
|
||||
.padding([.leading], 2)
|
||||
.event_context_menu(event, keypair: damus.keypair, target_pubkey: event.pubkey)
|
||||
}
|
||||
|
@ -48,9 +48,7 @@ struct TextEvent: View {
|
||||
if has_action_bar {
|
||||
Rectangle().frame(height: 2).opacity(0)
|
||||
|
||||
let bar = make_actionbar_model(ev: event, damus: damus)
|
||||
|
||||
EventActionBar(damus_state: damus, event: event, bar: bar)
|
||||
EventActionBar(damus_state: damus, event: event)
|
||||
.padding([.top], 4)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user