Show zap comments in threads and show top zap
Changelog-Added: Top zaps Changelog-Added: Show zap comments in threads
This commit is contained in:
@@ -62,7 +62,7 @@ class ZapsDataModel: ObservableObject {
|
||||
}
|
||||
|
||||
func confirm_nwc(reqid: String) {
|
||||
guard let zap = zaps.first(where: { z in z.request.id == reqid }),
|
||||
guard let zap = zaps.first(where: { z in z.request.ev.id == reqid }),
|
||||
case .pending(let pzap) = zap
|
||||
else {
|
||||
return
|
||||
@@ -83,16 +83,16 @@ class ZapsDataModel: ObservableObject {
|
||||
}
|
||||
|
||||
func from(_ pubkey: String) -> [Zapping] {
|
||||
return self.zaps.filter { z in z.request.pubkey == pubkey }
|
||||
return self.zaps.filter { z in z.request.ev.pubkey == pubkey }
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
func remove(reqid: String) -> Bool {
|
||||
guard zaps.first(where: { z in z.request.id == reqid }) != nil else {
|
||||
guard zaps.first(where: { z in z.request.ev.id == reqid }) != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
self.zaps = zaps.filter { z in z.request.id != reqid }
|
||||
self.zaps = zaps.filter { z in z.request.ev.id != reqid }
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -175,6 +175,9 @@ class EventCache {
|
||||
@discardableResult
|
||||
func store_zap(zap: Zapping) -> Bool {
|
||||
let data = get_cache_data(zap.target.id).zaps_model
|
||||
if let ev = zap.event {
|
||||
insert(ev)
|
||||
}
|
||||
return insert_uniq_sorted_zap_by_amount(zaps: &data.zaps, new_zap: zap)
|
||||
}
|
||||
|
||||
@@ -182,7 +185,7 @@ class EventCache {
|
||||
switch zap.target {
|
||||
case .note(let note_target):
|
||||
let zaps = get_cache_data(note_target.note_id).zaps_model
|
||||
zaps.remove(reqid: zap.request.id)
|
||||
zaps.remove(reqid: zap.request.ev.id)
|
||||
case .profile:
|
||||
// these aren't stored anywhere yet
|
||||
break
|
||||
|
||||
@@ -11,10 +11,10 @@ func insert_uniq_sorted_zap(zaps: inout [Zapping], new_zap: Zapping, cmp: (Zappi
|
||||
var i: Int = 0
|
||||
|
||||
for zap in zaps {
|
||||
if new_zap.request.id == zap.request.id {
|
||||
if new_zap.request.ev.id == zap.request.ev.id {
|
||||
// replace pending
|
||||
if !new_zap.is_pending && zap.is_pending {
|
||||
print("nwc: replacing pending with real zap \(new_zap.request.id)")
|
||||
print("nwc: replacing pending with real zap \(new_zap.request.ev.id)")
|
||||
zaps[i] = new_zap
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -41,7 +41,16 @@ public enum ZapTarget: Equatable {
|
||||
|
||||
struct ZapRequest {
|
||||
let ev: NostrEvent
|
||||
let marked_hidden: Bool
|
||||
|
||||
var is_in_thread: Bool {
|
||||
return !self.ev.content.isEmpty && !marked_hidden
|
||||
}
|
||||
|
||||
init(ev: NostrEvent) {
|
||||
self.ev = ev
|
||||
self.marked_hidden = ev.tags.first(where: { t in t.count > 0 && t[0] == "hidden" }) != nil
|
||||
}
|
||||
}
|
||||
|
||||
enum ExtPendingZapStateType {
|
||||
@@ -129,7 +138,7 @@ struct ZapRequestId: Equatable {
|
||||
let reqid: String
|
||||
|
||||
init(from_zap: Zapping) {
|
||||
self.reqid = from_zap.request.id
|
||||
self.reqid = from_zap.request.ev.id
|
||||
}
|
||||
|
||||
init(from_makezap: MakeZapRequest) {
|
||||
@@ -198,12 +207,12 @@ enum Zapping {
|
||||
}
|
||||
}
|
||||
|
||||
var request: NostrEvent {
|
||||
var request: ZapRequest {
|
||||
switch self {
|
||||
case .zap(let zap):
|
||||
return zap.request_ev
|
||||
return zap.request
|
||||
case .pending(let pzap):
|
||||
return pzap.request.ev
|
||||
return pzap.request
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,6 +236,15 @@ enum Zapping {
|
||||
}
|
||||
}
|
||||
|
||||
var is_in_thread: Bool {
|
||||
switch self {
|
||||
case .zap(let zap):
|
||||
return zap.request.is_in_thread
|
||||
case .pending(let pzap):
|
||||
return pzap.request.is_in_thread
|
||||
}
|
||||
}
|
||||
|
||||
var is_anon: Bool {
|
||||
switch self {
|
||||
case .zap(let zap):
|
||||
@@ -242,12 +260,12 @@ struct Zap {
|
||||
public let invoice: ZapInvoice
|
||||
public let zapper: String /// zap authorizer
|
||||
public let target: ZapTarget
|
||||
public let request: ZapRequest
|
||||
public let raw_request: ZapRequest
|
||||
public let is_anon: Bool
|
||||
public let private_request: NostrEvent?
|
||||
public let private_request: ZapRequest?
|
||||
|
||||
var request_ev: NostrEvent {
|
||||
return private_request ?? self.request.ev
|
||||
var request: ZapRequest {
|
||||
return private_request ?? self.raw_request
|
||||
}
|
||||
|
||||
public static func from_zap_event(zap_ev: NostrEvent, zapper: String, our_privkey: String?) -> Zap? {
|
||||
@@ -295,8 +313,9 @@ struct Zap {
|
||||
}
|
||||
|
||||
let is_anon = private_request == nil && event_is_anonymous(ev: zap_req)
|
||||
let preq = private_request.map { pr in ZapRequest(ev: pr) }
|
||||
|
||||
return Zap(event: zap_ev, invoice: zap_invoice, zapper: zapper, target: target, request: ZapRequest(ev: zap_req), is_anon: is_anon, private_request: private_request)
|
||||
return Zap(event: zap_ev, invoice: zap_invoice, zapper: zapper, target: target, raw_request: ZapRequest(ev: zap_req), is_anon: is_anon, private_request: preq)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ class Zaps {
|
||||
let our_pubkey: String
|
||||
var our_zaps: [String: [Zapping]]
|
||||
|
||||
var event_counts: [String: Int]
|
||||
var event_totals: [String: Int64]
|
||||
private(set) var event_counts: [String: Int]
|
||||
private(set) var event_totals: [String: Int64]
|
||||
|
||||
init(our_pubkey: String) {
|
||||
self.zaps = [:]
|
||||
@@ -27,13 +27,13 @@ class Zaps {
|
||||
var res: Zapping? = nil
|
||||
for kv in our_zaps {
|
||||
let ours = kv.value
|
||||
guard let zap = ours.first(where: { z in z.request.id == reqid }) else {
|
||||
guard let zap = ours.first(where: { z in z.request.ev.id == reqid }) else {
|
||||
continue
|
||||
}
|
||||
|
||||
res = zap
|
||||
|
||||
our_zaps[kv.key] = ours.filter { z in z.request.id != reqid }
|
||||
our_zaps[kv.key] = ours.filter { z in z.request.ev.id != reqid }
|
||||
|
||||
if let count = event_counts[zap.target.id] {
|
||||
event_counts[zap.target.id] = count - 1
|
||||
@@ -51,13 +51,16 @@ class Zaps {
|
||||
}
|
||||
|
||||
func add_zap(zap: Zapping) {
|
||||
if zaps[zap.request.id] != nil {
|
||||
if zaps[zap.request.ev.id] != nil {
|
||||
return
|
||||
}
|
||||
self.zaps[zap.request.id] = zap
|
||||
self.zaps[zap.request.ev.id] = zap
|
||||
if let zap_id = zap.event?.id {
|
||||
self.zaps[zap_id] = zap
|
||||
}
|
||||
|
||||
// record our zaps for an event
|
||||
if zap.request.pubkey == our_pubkey {
|
||||
if zap.request.ev.pubkey == our_pubkey {
|
||||
switch zap.target {
|
||||
case .note(let note_target):
|
||||
if our_zaps[note_target.note_id] == nil {
|
||||
@@ -71,7 +74,7 @@ class Zaps {
|
||||
}
|
||||
|
||||
// don't count tips to self. lame.
|
||||
guard zap.request.pubkey != zap.target.pubkey else {
|
||||
guard zap.request.ev.pubkey != zap.target.pubkey else {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user