List zaps on posts

This commit is contained in:
William Casarin
2023-02-10 10:50:49 -08:00
parent 4b54278378
commit 715d4aa35d
6 changed files with 143 additions and 10 deletions

View File

@@ -117,13 +117,17 @@ class HomeModel: ObservableObject {
}
}
func handle_zap_event_with_zapper(_ ev: NostrEvent, zapper: String) {
func handle_zap_event_with_zapper(_ ev: NostrEvent, our_pubkey: String, zapper: String) {
guard let zap = Zap.from_zap_event(zap_ev: ev, zapper: zapper) else {
return
}
damus_state.zaps.add_zap(zap: zap)
guard zap.target.pubkey == our_pubkey else {
return
}
if !insert_uniq_sorted_event(events: &notifications, new_ev: ev, cmp: { $0.created_at > $1.created_at }) {
return
}
@@ -138,12 +142,8 @@ class HomeModel: ObservableObject {
return
}
guard ptag == damus_state.pubkey else {
return
}
if let local_zapper = damus_state.profiles.lookup_zapper(pubkey: damus_state.pubkey) {
handle_zap_event_with_zapper(ev, zapper: local_zapper)
handle_zap_event_with_zapper(ev, our_pubkey: damus_state.pubkey, zapper: local_zapper)
return
}
@@ -161,7 +161,8 @@ class HomeModel: ObservableObject {
}
DispatchQueue.main.async {
self.handle_zap_event_with_zapper(ev, zapper: zapper)
self.damus_state.profiles.zappers[ptag] = zapper
self.handle_zap_event_with_zapper(ev, our_pubkey: self.damus_state.pubkey, zapper: zapper)
}
}

View File

@@ -0,0 +1,69 @@
//
// ZapsModel.swift
// damus
//
// Created by William Casarin on 2023-02-10.
//
import Foundation
class ZapsModel: ObservableObject {
let profiles: Profiles
let pool: RelayPool
let target: ZapTarget
var zaps: [Zap]
let zaps_subid = UUID().description
init(profiles: Profiles, pool: RelayPool, target: ZapTarget) {
self.target = target
self.profiles = profiles
self.pool = pool
self.zaps = []
}
func subscribe() {
var filter = NostrFilter.filter_kinds([9735])
switch target {
case .profile(let profile_id):
filter.pubkeys = [profile_id]
case .note(let note_target):
filter.referenced_ids = [note_target.note_id]
}
pool.subscribe(sub_id: zaps_subid, filters: [filter], handler: handle_event)
}
func unsubscribe() {
pool.unsubscribe(sub_id: zaps_subid)
}
func handle_event(relay_id: String, conn_ev: NostrConnectionEvent) {
guard case .nostr_event(let resp) = conn_ev else {
return
}
guard resp.subid == zaps_subid else {
return
}
guard case .event(_, let ev) = resp else {
return
}
guard ev.kind == 9735 else {
return
}
guard let zapper = profiles.lookup_zapper(pubkey: target.pubkey) else {
return
}
guard let zap = Zap.from_zap_event(zap_ev: ev, zapper: zapper) else {
return
}
if insert_uniq_sorted_zap(zaps: &zaps, new_zap: zap) {
objectWillChange.send()
}
}
}