Local Zap Notifications
Changelog-Added: Local zap notifications
This commit is contained in:
@@ -776,7 +776,6 @@ func setup_notifications() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func find_event(state: DamusState, evid: String, search_type: SearchType, find_from: [String]?, callback: @escaping (NostrEvent?) -> ()) {
|
func find_event(state: DamusState, evid: String, search_type: SearchType, find_from: [String]?, callback: @escaping (NostrEvent?) -> ()) {
|
||||||
if let ev = state.events.lookup(evid) {
|
if let ev = state.events.lookup(evid) {
|
||||||
callback(ev)
|
callback(ev)
|
||||||
|
|||||||
@@ -145,9 +145,13 @@ class HomeModel: ObservableObject {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if handle_last_event(ev: ev, timeline: .notifications) && damus_state.settings.zap_vibration {
|
if handle_last_event(ev: ev, timeline: .notifications) {
|
||||||
// Generate zap vibration
|
if damus_state.settings.zap_vibration {
|
||||||
zap_vibrate(zap_amount: zap.invoice.amount)
|
// 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
|
return
|
||||||
@@ -928,3 +932,24 @@ func zap_vibrate(zap_amount: Int64) {
|
|||||||
vibration_generator.impactOccurred()
|
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")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import SwiftUI
|
|||||||
|
|
||||||
@main
|
@main
|
||||||
struct damusApp: App {
|
struct damusApp: App {
|
||||||
|
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
|
||||||
var body: some Scene {
|
var body: some Scene {
|
||||||
WindowGroup {
|
WindowGroup {
|
||||||
MainView()
|
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? {
|
func needs_setup() -> Keypair? {
|
||||||
return get_saved_keypair()
|
return get_saved_keypair()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user