mirror of
git://jb55.com/damus
synced 2024-10-06 19:53:22 +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
|
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 {
|
var is_empty: Bool {
|
||||||
return likes == 0 && boosts == 0 && zaps == 0
|
return likes == 0 && boosts == 0 && zaps == 0
|
||||||
}
|
}
|
||||||
|
@ -142,12 +142,12 @@ class HomeModel: ObservableObject {
|
|||||||
return
|
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)
|
handle_zap_event_with_zapper(ev, our_pubkey: damus_state.pubkey, zapper: local_zapper)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let profile = damus_state.profiles.lookup(id: damus_state.pubkey) else {
|
guard let profile = damus_state.profiles.lookup(id: ptag) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,6 +98,9 @@ extension Notification.Name {
|
|||||||
static var deleted_account: Notification.Name {
|
static var deleted_account: Notification.Name {
|
||||||
return Notification.Name("deleted_account")
|
return Notification.Name("deleted_account")
|
||||||
}
|
}
|
||||||
|
static var new_zap: Notification.Name {
|
||||||
|
return Notification.Name("new_zap")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handle_notify(_ name: Notification.Name) -> NotificationCenter.Publisher {
|
func handle_notify(_ name: Notification.Name) -> NotificationCenter.Publisher {
|
||||||
|
@ -60,6 +60,8 @@ class Zaps {
|
|||||||
event_counts[id] = event_counts[id]! + 1
|
event_counts[id] = event_counts[id]! + 1
|
||||||
event_totals[id] = event_totals[id]! + zap.invoice.amount
|
event_totals[id] = event_totals[id]! + zap.invoice.amount
|
||||||
|
|
||||||
|
notify(.new_zap, zap)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,13 +28,14 @@ struct EventActionBar: View {
|
|||||||
@State var sheet: ActionBarSheet? = nil
|
@State var sheet: ActionBarSheet? = nil
|
||||||
@State var confirm_boost: Bool = false
|
@State var confirm_boost: Bool = false
|
||||||
@State var show_share_sheet: 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.damus_state = damus_state
|
||||||
self.event = event
|
self.event = event
|
||||||
self.test_lnurl = test_lnurl
|
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? {
|
var lnurl: String? {
|
||||||
@ -110,6 +111,16 @@ struct EventActionBar: View {
|
|||||||
} message: {
|
} message: {
|
||||||
Text("Are you sure you want to repost this?", comment: "Alert message to ask if user wants to repost a post.")
|
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
|
.onReceive(handle_notify(.liked)) { n in
|
||||||
let liked = n.object as! Counted
|
let liked = n.object as! Counted
|
||||||
if liked.id != event.id {
|
if liked.id != event.id {
|
||||||
|
@ -11,8 +11,17 @@ struct EventDetailBar: View {
|
|||||||
let state: DamusState
|
let state: DamusState
|
||||||
let target: String
|
let target: String
|
||||||
let target_pk: String
|
let target_pk: String
|
||||||
|
|
||||||
@ObservedObject var bar: ActionBarModel
|
@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 {
|
var body: some View {
|
||||||
HStack {
|
HStack {
|
||||||
if bar.boosts > 0 {
|
if bar.boosts > 0 {
|
||||||
@ -42,6 +51,6 @@ struct EventDetailBar: View {
|
|||||||
|
|
||||||
struct EventDetailBar_Previews: PreviewProvider {
|
struct EventDetailBar_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
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)
|
size: .normal)
|
||||||
|
|
||||||
if is_active || next_ev == nil || next_ev!.pubkey != event.pubkey {
|
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)
|
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)
|
return dateFormatter.string(from: date)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make_actionbar_model(ev: String, damus: DamusState) -> ActionBarModel {
|
||||||
|
let likes = damus.likes.counts[ev]
|
||||||
func make_actionbar_model(ev: NostrEvent, damus: DamusState) -> ActionBarModel {
|
let boosts = damus.boosts.counts[ev]
|
||||||
let likes = damus.likes.counts[ev.id]
|
let zaps = damus.zaps.event_counts[ev]
|
||||||
let boosts = damus.boosts.counts[ev.id]
|
let zap_total = damus.zaps.event_totals[ev]
|
||||||
let zaps = damus.zaps.event_counts[ev.id]
|
let our_like = damus.likes.our_events[ev]
|
||||||
let zap_total = damus.zaps.event_totals[ev.id]
|
let our_boost = damus.boosts.our_events[ev]
|
||||||
let our_like = damus.likes.our_events[ev.id]
|
let our_zap = damus.zaps.our_zaps[ev]
|
||||||
let our_boost = damus.boosts.our_events[ev.id]
|
|
||||||
let our_zap = damus.zaps.our_zaps[ev.id]
|
|
||||||
|
|
||||||
return ActionBarModel(likes: likes ?? 0,
|
return ActionBarModel(likes: likes ?? 0,
|
||||||
boosts: boosts ?? 0,
|
boosts: boosts ?? 0,
|
||||||
|
@ -53,8 +53,7 @@ struct BuilderEventView: View {
|
|||||||
NostrFilter(ids: [self.event_id], limit: 1),
|
NostrFilter(ids: [self.event_id], limit: 1),
|
||||||
NostrFilter(
|
NostrFilter(
|
||||||
kinds: [NostrKind.zap.rawValue],
|
kinds: [NostrKind.zap.rawValue],
|
||||||
referenced_ids: [self.event_id],
|
referenced_ids: [self.event_id]
|
||||||
limit: 500
|
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,14 @@ struct SelectedEventView: View {
|
|||||||
event.pubkey
|
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 {
|
var body: some View {
|
||||||
HStack(alignment: .top) {
|
HStack(alignment: .top) {
|
||||||
let profile = damus.profiles.lookup(id: pubkey)
|
let profile = damus.profiles.lookup(id: pubkey)
|
||||||
@ -35,19 +43,27 @@ struct SelectedEventView: View {
|
|||||||
Divider()
|
Divider()
|
||||||
.padding([.bottom], 4)
|
.padding([.bottom], 4)
|
||||||
|
|
||||||
let bar = make_actionbar_model(ev: event, damus: damus)
|
|
||||||
|
|
||||||
if !bar.is_empty {
|
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()
|
Divider()
|
||||||
}
|
}
|
||||||
|
|
||||||
EventActionBar(damus_state: damus, event: event, bar: bar)
|
EventActionBar(damus_state: damus, event: event)
|
||||||
.padding([.top], 4)
|
.padding([.top], 4)
|
||||||
|
|
||||||
Divider()
|
Divider()
|
||||||
.padding([.top], 4)
|
.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)
|
.padding([.leading], 2)
|
||||||
.event_context_menu(event, keypair: damus.keypair, target_pubkey: event.pubkey)
|
.event_context_menu(event, keypair: damus.keypair, target_pubkey: event.pubkey)
|
||||||
}
|
}
|
||||||
|
@ -48,9 +48,7 @@ struct TextEvent: View {
|
|||||||
if has_action_bar {
|
if has_action_bar {
|
||||||
Rectangle().frame(height: 2).opacity(0)
|
Rectangle().frame(height: 2).opacity(0)
|
||||||
|
|
||||||
let bar = make_actionbar_model(ev: event, damus: damus)
|
EventActionBar(damus_state: damus, event: event)
|
||||||
|
|
||||||
EventActionBar(damus_state: damus, event: event, bar: bar)
|
|
||||||
.padding([.top], 4)
|
.padding([.top], 4)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user