mirror of
git://jb55.com/damus
synced 2024-10-01 09:20:47 +00:00
home: add quote repost counter and handler
This adds the initial support code for counting and handling quote reposts. Eventually we are going to replace all of the event counts by stats within nostrdb, but we do this in the meantime now. Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
parent
6111e244de
commit
8cdbc84093
@ -723,7 +723,8 @@ struct ContentView: View {
|
|||||||
nav: self.navigationCoordinator,
|
nav: self.navigationCoordinator,
|
||||||
music: MusicController(onChange: music_changed),
|
music: MusicController(onChange: music_changed),
|
||||||
video: VideoController(),
|
video: VideoController(),
|
||||||
ndb: ndb
|
ndb: ndb,
|
||||||
|
quote_reposts: .init(our_pubkey: pubkey)
|
||||||
)
|
)
|
||||||
|
|
||||||
home.damus_state = self.damus_state!
|
home.damus_state = self.damus_state!
|
||||||
|
@ -16,10 +16,12 @@ enum Zapped {
|
|||||||
class ActionBarModel: ObservableObject {
|
class ActionBarModel: ObservableObject {
|
||||||
@Published var our_like: NostrEvent?
|
@Published var our_like: NostrEvent?
|
||||||
@Published var our_boost: NostrEvent?
|
@Published var our_boost: NostrEvent?
|
||||||
|
@Published var our_quote_repost: NostrEvent?
|
||||||
@Published var our_reply: NostrEvent?
|
@Published var our_reply: NostrEvent?
|
||||||
@Published var our_zap: Zapping?
|
@Published var our_zap: Zapping?
|
||||||
@Published var likes: Int
|
@Published var likes: Int
|
||||||
@Published var boosts: Int
|
@Published var boosts: Int
|
||||||
|
@Published var quote_reposts: Int
|
||||||
@Published private(set) var zaps: Int
|
@Published private(set) var zaps: Int
|
||||||
@Published var zap_total: Int64
|
@Published var zap_total: Int64
|
||||||
@Published var replies: Int
|
@Published var replies: Int
|
||||||
@ -28,7 +30,7 @@ class ActionBarModel: ObservableObject {
|
|||||||
return ActionBarModel(likes: 0, boosts: 0, zaps: 0, zap_total: 0, replies: 0, our_like: nil, our_boost: nil, our_zap: nil, our_reply: nil)
|
return ActionBarModel(likes: 0, boosts: 0, zaps: 0, zap_total: 0, replies: 0, our_like: nil, our_boost: nil, our_zap: nil, our_reply: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(likes: Int = 0, boosts: Int = 0, zaps: Int = 0, zap_total: Int64 = 0, replies: Int = 0, our_like: NostrEvent? = nil, our_boost: NostrEvent? = nil, our_zap: Zapping? = nil, our_reply: NostrEvent? = nil) {
|
init(likes: Int = 0, boosts: Int = 0, zaps: Int = 0, zap_total: Int64 = 0, replies: Int = 0, our_like: NostrEvent? = nil, our_boost: NostrEvent? = nil, our_zap: Zapping? = nil, our_reply: NostrEvent? = nil, our_quote_repost: NostrEvent? = nil, quote_reposts: Int = 0) {
|
||||||
self.likes = likes
|
self.likes = likes
|
||||||
self.boosts = boosts
|
self.boosts = boosts
|
||||||
self.zaps = zaps
|
self.zaps = zaps
|
||||||
@ -38,6 +40,8 @@ class ActionBarModel: ObservableObject {
|
|||||||
self.our_boost = our_boost
|
self.our_boost = our_boost
|
||||||
self.our_zap = our_zap
|
self.our_zap = our_zap
|
||||||
self.our_reply = our_reply
|
self.our_reply = our_reply
|
||||||
|
self.our_quote_repost = our_quote_repost
|
||||||
|
self.quote_reposts = quote_reposts
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(damus: DamusState, evid: NoteId) {
|
func update(damus: DamusState, evid: NoteId) {
|
||||||
@ -45,11 +49,13 @@ class ActionBarModel: ObservableObject {
|
|||||||
self.boosts = damus.boosts.counts[evid] ?? 0
|
self.boosts = damus.boosts.counts[evid] ?? 0
|
||||||
self.zaps = damus.zaps.event_counts[evid] ?? 0
|
self.zaps = damus.zaps.event_counts[evid] ?? 0
|
||||||
self.replies = damus.replies.get_replies(evid)
|
self.replies = damus.replies.get_replies(evid)
|
||||||
|
self.quote_reposts = damus.quote_reposts.counts[evid] ?? 0
|
||||||
self.zap_total = damus.zaps.event_totals[evid] ?? 0
|
self.zap_total = damus.zaps.event_totals[evid] ?? 0
|
||||||
self.our_like = damus.likes.our_events[evid]
|
self.our_like = damus.likes.our_events[evid]
|
||||||
self.our_boost = damus.boosts.our_events[evid]
|
self.our_boost = damus.boosts.our_events[evid]
|
||||||
self.our_zap = damus.zaps.our_zaps[evid]?.first
|
self.our_zap = damus.zaps.our_zaps[evid]?.first
|
||||||
self.our_reply = damus.replies.our_reply(evid)
|
self.our_reply = damus.replies.our_reply(evid)
|
||||||
|
self.our_quote_repost = damus.quote_reposts.our_events[evid]
|
||||||
self.objectWillChange.send()
|
self.objectWillChange.send()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,4 +74,8 @@ class ActionBarModel: ObservableObject {
|
|||||||
var boosted: Bool {
|
var boosted: Bool {
|
||||||
return our_boost != nil
|
return our_boost != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var quoted: Bool {
|
||||||
|
return our_quote_repost != nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ class DamusState: HeadlessDamusState {
|
|||||||
let keypair: Keypair
|
let keypair: Keypair
|
||||||
let likes: EventCounter
|
let likes: EventCounter
|
||||||
let boosts: EventCounter
|
let boosts: EventCounter
|
||||||
|
let quote_reposts: EventCounter
|
||||||
let contacts: Contacts
|
let contacts: Contacts
|
||||||
let mutelist_manager: MutelistManager
|
let mutelist_manager: MutelistManager
|
||||||
let profiles: Profiles
|
let profiles: Profiles
|
||||||
@ -36,7 +37,7 @@ class DamusState: HeadlessDamusState {
|
|||||||
let ndb: Ndb
|
let ndb: Ndb
|
||||||
var purple: DamusPurple
|
var purple: DamusPurple
|
||||||
|
|
||||||
init(pool: RelayPool, keypair: Keypair, likes: EventCounter, boosts: EventCounter, contacts: Contacts, mutelist_manager: MutelistManager, profiles: Profiles, dms: DirectMessagesModel, previews: PreviewCache, zaps: Zaps, lnurls: LNUrls, settings: UserSettingsStore, relay_filters: RelayFilters, relay_model_cache: RelayModelCache, drafts: Drafts, events: EventCache, bookmarks: BookmarksManager, postbox: PostBox, bootstrap_relays: [String], replies: ReplyCounter, wallet: WalletModel, nav: NavigationCoordinator, music: MusicController?, video: VideoController, ndb: Ndb, purple: DamusPurple? = nil) {
|
init(pool: RelayPool, keypair: Keypair, likes: EventCounter, boosts: EventCounter, contacts: Contacts, mutelist_manager: MutelistManager, profiles: Profiles, dms: DirectMessagesModel, previews: PreviewCache, zaps: Zaps, lnurls: LNUrls, settings: UserSettingsStore, relay_filters: RelayFilters, relay_model_cache: RelayModelCache, drafts: Drafts, events: EventCache, bookmarks: BookmarksManager, postbox: PostBox, bootstrap_relays: [String], replies: ReplyCounter, wallet: WalletModel, nav: NavigationCoordinator, music: MusicController?, video: VideoController, ndb: Ndb, purple: DamusPurple? = nil, quote_reposts: EventCounter) {
|
||||||
self.pool = pool
|
self.pool = pool
|
||||||
self.keypair = keypair
|
self.keypair = keypair
|
||||||
self.likes = likes
|
self.likes = likes
|
||||||
@ -66,6 +67,7 @@ class DamusState: HeadlessDamusState {
|
|||||||
settings: settings,
|
settings: settings,
|
||||||
keypair: keypair
|
keypair: keypair
|
||||||
)
|
)
|
||||||
|
self.quote_reposts = quote_reposts
|
||||||
}
|
}
|
||||||
|
|
||||||
@discardableResult
|
@discardableResult
|
||||||
@ -129,7 +131,8 @@ class DamusState: HeadlessDamusState {
|
|||||||
nav: NavigationCoordinator(),
|
nav: NavigationCoordinator(),
|
||||||
music: nil,
|
music: nil,
|
||||||
video: VideoController(),
|
video: VideoController(),
|
||||||
ndb: .empty
|
ndb: .empty,
|
||||||
|
quote_reposts: .init(our_pubkey: empty_pub)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -347,12 +347,19 @@ class HomeModel {
|
|||||||
case .already_counted:
|
case .already_counted:
|
||||||
break
|
break
|
||||||
case .success(let n):
|
case .success(let n):
|
||||||
let boosted = Counted(event: ev, id: e, total: n)
|
|
||||||
notify(.reposted(boosted))
|
|
||||||
notify(.update_stats(note_id: e))
|
notify(.update_stats(note_id: e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handle_quote_repost_event(_ ev: NostrEvent, target: NoteId) {
|
||||||
|
switch damus_state.quote_reposts.add_event(ev, target: target) {
|
||||||
|
case .already_counted:
|
||||||
|
break
|
||||||
|
case .success(let n):
|
||||||
|
notify(.update_stats(note_id: target))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func handle_like_event(_ ev: NostrEvent) {
|
func handle_like_event(_ ev: NostrEvent) {
|
||||||
guard let e = ev.last_refid() else {
|
guard let e = ev.last_refid() else {
|
||||||
// no id ref? invalid like event
|
// no id ref? invalid like event
|
||||||
@ -672,6 +679,10 @@ class HomeModel {
|
|||||||
damus_state.replies.count_replies(ev, keypair: self.damus_state.keypair)
|
damus_state.replies.count_replies(ev, keypair: self.damus_state.keypair)
|
||||||
damus_state.events.insert(ev)
|
damus_state.events.insert(ev)
|
||||||
|
|
||||||
|
if let quoted_event = ev.referenced_quote_ids.first {
|
||||||
|
handle_quote_repost_event(ev, target: quoted_event.note_id)
|
||||||
|
}
|
||||||
|
|
||||||
if sub_id == home_subid {
|
if sub_id == home_subid {
|
||||||
insert_home_event(ev)
|
insert_home_event(ev)
|
||||||
} else if sub_id == notifications_subid {
|
} else if sub_id == notifications_subid {
|
||||||
|
@ -92,7 +92,9 @@ var test_damus_state: DamusState = ({
|
|||||||
nav: .init(),
|
nav: .init(),
|
||||||
music: .init(onChange: {_ in }),
|
music: .init(onChange: {_ in }),
|
||||||
video: .init(),
|
video: .init(),
|
||||||
ndb: ndb)
|
ndb: ndb,
|
||||||
|
quote_reposts: .init(our_pubkey: our_pubkey)
|
||||||
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
let prof = Profile(name: "damus", display_name: "damus", about: "iOS app!", picture: "https://damus.io/img/logo.png", banner: "", website: "https://damus.io", lud06: nil, lud16: "jb55@sendsats.lol", nip05: "damus.io", damus_donation: nil)
|
let prof = Profile(name: "damus", display_name: "damus", about: "iOS app!", picture: "https://damus.io/img/logo.png", banner: "", website: "https://damus.io", lud06: nil, lud16: "jb55@sendsats.lol", nip05: "damus.io", damus_donation: nil)
|
||||||
|
@ -49,7 +49,8 @@ func generate_test_damus_state(
|
|||||||
nav: .init(),
|
nav: .init(),
|
||||||
music: .init(onChange: {_ in }),
|
music: .init(onChange: {_ in }),
|
||||||
video: .init(),
|
video: .init(),
|
||||||
ndb: ndb)
|
ndb: ndb,
|
||||||
|
quote_reposts: .init(our_pubkey: our_pubkey) )
|
||||||
|
|
||||||
return damus
|
return damus
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user