commit b773df1204755fb53676ff3d2939b9da8471b543
parent c7a34379dd1b5c7e876bc7b09ffb10a1e1c70093
Author: Swift <scoder1747@gmail.com>
Date: Fri, 24 Mar 2023 18:45:35 -0400
Local Zap Notifications
Changelog-Added: Local zap notifications
Diffstat:
3 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/damus/ContentView.swift b/damus/ContentView.swift
@@ -776,7 +776,6 @@ func setup_notifications() {
}
}
-
func find_event(state: DamusState, evid: String, search_type: SearchType, find_from: [String]?, callback: @escaping (NostrEvent?) -> ()) {
if let ev = state.events.lookup(evid) {
callback(ev)
diff --git a/damus/Models/HomeModel.swift b/damus/Models/HomeModel.swift
@@ -145,9 +145,13 @@ class HomeModel: ObservableObject {
return
}
- if handle_last_event(ev: ev, timeline: .notifications) && damus_state.settings.zap_vibration {
- // Generate zap vibration
- zap_vibrate(zap_amount: zap.invoice.amount)
+ if handle_last_event(ev: ev, timeline: .notifications) {
+ if damus_state.settings.zap_vibration {
+ // Generate zap vibration
+ 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)
}
return
@@ -928,3 +932,24 @@ func zap_vibrate(zap_amount: Int64) {
vibration_generator.impactOccurred()
}
+func create_in_app_zap_notification(zap_amount: Int64) {
+ let sats = zap_amount / 1000
+ let content = UNMutableNotificationContent()
+ content.title = "Zap"
+ let satString = sats == 1 ? "sat" : "sats"
+ content.body = "You have just received \(sats) \(satString)"
+ content.sound = UNNotificationSound.default
+
+ let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
+
+ let request = UNNotificationRequest(identifier: "myZapNotification", content: content, trigger: trigger)
+
+ UNUserNotificationCenter.current().add(request) { error in
+ if let error = error {
+ print("Error: \(error)")
+ } else {
+ print("Local notification scheduled")
+ }
+ }
+}
+
diff --git a/damus/damusApp.swift b/damus/damusApp.swift
@@ -9,6 +9,7 @@ import SwiftUI
@main
struct damusApp: App {
+ @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
MainView()
@@ -43,6 +44,19 @@ struct MainView: View {
}
}
+class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate {
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
+ UNUserNotificationCenter.current().delegate = self
+ return true
+ }
+
+ // Handle the notification in the foreground state
+ func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
+ // Display the notification in the foreground
+ completionHandler([.alert, .sound, .badge])
+ }
+}
+
func needs_setup() -> Keypair? {
return get_saved_keypair()
}