Load zaps instantly on events

Refactor our event cache a bit and add zap caching

Changelog-Changed: Load zaps instantly on events
This commit is contained in:
William Casarin
2023-04-28 17:22:53 -07:00
parent c2325a5e39
commit be08083b88
6 changed files with 67 additions and 29 deletions

View File

@@ -31,6 +31,14 @@ struct DamusState {
let replies: ReplyCounter
let muted_threads: MutedThreadsManager
@discardableResult
func add_zap(zap: Zap) -> Bool {
// store generic zap mapping
self.zaps.add_zap(zap: zap)
// associate with events as well
return self.events.store_zap(zap: zap)
}
var pubkey: String {
return keypair.pubkey
}

View File

@@ -128,7 +128,7 @@ class HomeModel: ObservableObject {
return
}
damus_state.zaps.add_zap(zap: zap)
damus_state.add_zap(zap: zap)
guard zap.target.pubkey == our_keypair.pubkey else {
return
@@ -726,7 +726,7 @@ func guard_valid_event(events: EventCache, ev: NostrEvent, callback: @escaping (
let result = validate_event(ev: ev)
DispatchQueue.main.async {
events.validation[ev.id] = result
events.store_event_validation(evid: ev.id, validated: result)
guard result == .ok else {
return
}

View File

@@ -10,7 +10,6 @@ import Foundation
class ZapsModel: ObservableObject {
let state: DamusState
let target: ZapTarget
var zaps: [Zap]
let zaps_subid = UUID().description
let profiles_subid = UUID().description
@@ -18,7 +17,10 @@ class ZapsModel: ObservableObject {
init(state: DamusState, target: ZapTarget) {
self.state = state
self.target = target
self.zaps = []
}
var zaps: [Zap] {
return state.events.lookup_zaps(target: target)
}
func subscribe() {
@@ -51,7 +53,7 @@ class ZapsModel: ObservableObject {
case .notice:
break
case .eose:
let events = self.zaps.map { $0.request.ev }
let events = state.events.lookup_zaps(target: target).map { $0.request_ev }
load_profiles(profiles_subid: profiles_subid, relay_id: relay_id, load: .from_events(events), damus_state: state)
case .event(_, let ev):
guard ev.kind == 9735 else {
@@ -59,7 +61,7 @@ class ZapsModel: ObservableObject {
}
if let zap = state.zaps.zaps[ev.id] {
if insert_uniq_sorted_zap_by_amount(zaps: &zaps, new_zap: zap) {
if state.events.store_zap(zap: zap) {
objectWillChange.send()
}
} else {
@@ -71,9 +73,7 @@ class ZapsModel: ObservableObject {
return
}
state.zaps.add_zap(zap: zap)
if insert_uniq_sorted_zap_by_amount(zaps: &zaps, new_zap: zap) {
if self.state.add_zap(zap: zap) {
objectWillChange.send()
}
}