damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit c03b4cac114ffd1ef11fcede53655c30b703e533
parent b773df1204755fb53676ff3d2939b9da8471b543
Author: William Casarin <jb55@jb55.com>
Date:   Mon, 27 Mar 2023 17:48:06 -0400

Zap Notifications: Include who it's from and message

Diffstat:
Mdamus/Models/HomeModel.swift | 36+++++++++++++++++++++++++++---------
1 file changed, 27 insertions(+), 9 deletions(-)

diff --git a/damus/Models/HomeModel.swift b/damus/Models/HomeModel.swift @@ -130,7 +130,7 @@ class HomeModel: ObservableObject { } } - func handle_zap_event_with_zapper(_ ev: NostrEvent, our_keypair: Keypair, zapper: String) { + func handle_zap_event_with_zapper(profiles: Profiles, ev: NostrEvent, our_keypair: Keypair, zapper: String) { guard let zap = Zap.from_zap_event(zap_ev: ev, zapper: zapper, our_privkey: our_keypair.privkey) else { return } @@ -151,7 +151,7 @@ class HomeModel: ObservableObject { zap_vibrate(zap_amount: zap.invoice.amount) } // Create in-app local notification for zap received. - create_in_app_zap_notification(zap_amount: zap.invoice.amount) + create_in_app_zap_notification(profiles: profiles, zap: zap) } return @@ -165,7 +165,7 @@ class HomeModel: ObservableObject { let our_keypair = damus_state.keypair if let local_zapper = damus_state.profiles.lookup_zapper(pubkey: ptag) { - handle_zap_event_with_zapper(ev, our_keypair: our_keypair, zapper: local_zapper) + handle_zap_event_with_zapper(profiles: self.damus_state.profiles, ev: ev, our_keypair: our_keypair, zapper: local_zapper) return } @@ -184,7 +184,7 @@ class HomeModel: ObservableObject { DispatchQueue.main.async { self.damus_state.profiles.zappers[ptag] = zapper - self.handle_zap_event_with_zapper(ev, our_keypair: our_keypair, zapper: zapper) + self.handle_zap_event_with_zapper(profiles: self.damus_state.profiles, ev: ev, our_keypair: our_keypair, zapper: zapper) } } @@ -932,12 +932,30 @@ func zap_vibrate(zap_amount: Int64) { vibration_generator.impactOccurred() } -func create_in_app_zap_notification(zap_amount: Int64) { - let sats = zap_amount / 1000 +func describe_zap_type(_ zap: Zap) -> String? { + if zap.private_request != nil { + return "Private" + } + + return nil +} + +func create_in_app_zap_notification(profiles: Profiles, zap: Zap) { let content = UNMutableNotificationContent() - content.title = "Zap" - let satString = sats == 1 ? "sat" : "sats" - content.body = "You have just received \(sats) \(satString)" + let typ = describe_zap_type(zap).map({ "\($0) " }) ?? "" + + content.title = typ + "Zap" + let satString = zap.invoice.amount == 1000 ? "sat" : "sats" + + let src = zap.private_request ?? zap.request.ev + let anon = event_is_anonymous(ev: src) + let pk = anon ? "anon" : src.pubkey + let profile = profiles.lookup(id: pk) + let sats = format_msats_abbrev(zap.invoice.amount) + let name = Profile.displayName(profile: profile, pubkey: pk).display_name + let message = src.content.count == 0 ? "" : ": \"\(src.content)\"" + + content.body = "You received \(sats) \(satString) from \(name)\(message)" content.sound = UNNotificationSound.default let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)