diff --git a/Meshtastic/Extensions/UserDefaults.swift b/Meshtastic/Extensions/UserDefaults.swift index ab5f2ba9..6af3a3fd 100644 --- a/Meshtastic/Extensions/UserDefaults.swift +++ b/Meshtastic/Extensions/UserDefaults.swift @@ -66,6 +66,7 @@ extension UserDefaults { case enableDetectionNotifications case detectionSensorRole case enableSmartPosition + case newNodeNotifications case modemPreset case firmwareVersion case testIntEnum @@ -143,6 +144,9 @@ extension UserDefaults { @UserDefault(.enableSmartPosition, defaultValue: false) static var enableSmartPosition: Bool + + @UserDefault(.newNodeNotifications, defaultValue: false) + static var newNodeNotifications: Bool @UserDefault(.modemPreset, defaultValue: 0) static var modemPreset: Int diff --git a/Meshtastic/Persistence/UpdateCoreData.swift b/Meshtastic/Persistence/UpdateCoreData.swift index 1ac1b6e2..90a35cce 100644 --- a/Meshtastic/Persistence/UpdateCoreData.swift +++ b/Meshtastic/Persistence/UpdateCoreData.swift @@ -177,6 +177,22 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext) newUser.role = Int32(newUserMessage.role.rawValue) newUser.hwModel = String(describing: newUserMessage.hwModel).uppercased() newNode.user = newUser + + + if (UserDefaults.newNodeNotifications){ + let manager = LocalNotificationManager() + manager.notifications = [ + Notification( + id: (UUID().uuidString), + title: "New Node", + subtitle: "\(newUser.longName ?? "unknown".localized)", + content: "New Node has been discovered", + target: "nodeInfo", + path: "meshtastic://nodeInfo" + ) + ] + manager.schedule() + } } } else { let newUser = UserEntity(context: context) diff --git a/Meshtastic/Views/Settings/AppSettings.swift b/Meshtastic/Views/Settings/AppSettings.swift index cd9ef8f4..48b689f6 100644 --- a/Meshtastic/Views/Settings/AppSettings.swift +++ b/Meshtastic/Views/Settings/AppSettings.swift @@ -12,6 +12,7 @@ struct AppSettings: View { @StateObject var locationHelper = LocationHelper() @State var provideLocation: Bool = UserDefaults.provideLocation @State var enableSmartPosition: Bool = UserDefaults.enableSmartPosition + @State var newNodeNotifications: Bool = UserDefaults.newNodeNotifications @State var useLegacyMap: Bool = UserDefaults.mapUseLegacy @State var provideLocationInterval: Int = UserDefaults.provideLocationInterval @State private var isPresentingCoreDataResetConfirm = false @@ -52,6 +53,12 @@ struct AppSettings: View { } .toggleStyle(SwitchToggleStyle(tint: .accentColor)) } + + Section(header: Text("Notifications")){ + Toggle(isOn: $newNodeNotifications){ + Label("appsettings.newNodeNotifications", systemImage: "bell.fill") + } + } Section(header: Text("phone.gps")) { if #available(iOS 17.0, macOS 14.0, *) { GPSStatus() @@ -156,6 +163,10 @@ struct AppSettings: View { self.bleManager.sendWantConfig() } } + + .onChange(of: newNodeNotifications){ newNewNodeNotifications in + UserDefaults.newNodeNotifications = newNewNodeNotifications + } .onChange(of: enableSmartPosition) { newEnableSmartPosition in UserDefaults.enableSmartPosition = newEnableSmartPosition } diff --git a/de.lproj/Localizable.strings b/de.lproj/Localizable.strings index 54b004f6..8807fc05 100644 --- a/de.lproj/Localizable.strings +++ b/de.lproj/Localizable.strings @@ -339,3 +339,4 @@ "user.details"="Benutzer Details"; "voltage"="Voltage"; "waiting"="Warte..."; +"appsettings.newNodeNotifications"="New Node Notifications"; diff --git a/en.lproj/Localizable.strings b/en.lproj/Localizable.strings index 28c468d2..bda5169b 100644 --- a/en.lproj/Localizable.strings +++ b/en.lproj/Localizable.strings @@ -354,3 +354,4 @@ "user.details"="User Details"; "voltage"="Voltage"; "waiting"="Waiting. . ."; +"appsettings.newNodeNotifications"="New Node Notifications"; diff --git a/fr.lproj/Localizable.strings b/fr.lproj/Localizable.strings index 717d5997..ee20ea01 100644 --- a/fr.lproj/Localizable.strings +++ b/fr.lproj/Localizable.strings @@ -319,3 +319,4 @@ "user.details"="Détails de l'utilisateur"; "voltage"="Tension"; "waiting"="En attente . . ."; +"appsettings.newNodeNotifications"="New Node Notifications"; diff --git a/he.lproj/Localizable.strings b/he.lproj/Localizable.strings index ce0d9316..ab80c974 100644 --- a/he.lproj/Localizable.strings +++ b/he.lproj/Localizable.strings @@ -343,3 +343,4 @@ "user.details"="פרטי משתמש"; "voltage"="וולטז'"; "waiting"="ממתין. . ."; +"appsettings.newNodeNotifications"="New Node Notifications"; diff --git a/pl.lproj/Localizable.strings b/pl.lproj/Localizable.strings index 82b7aa4c..6a6e1df5 100644 --- a/pl.lproj/Localizable.strings +++ b/pl.lproj/Localizable.strings @@ -340,3 +340,4 @@ "user.details"="Szczegóły użytkownika"; "voltage"="Napięcie"; "waiting"="Czekam. . ."; +"appsettings.newNodeNotifications"="New Node Notifications"; diff --git a/se.lproj/Localizable.strings b/se.lproj/Localizable.strings index 00febe5d..4fffdbfc 100644 --- a/se.lproj/Localizable.strings +++ b/se.lproj/Localizable.strings @@ -354,3 +354,4 @@ "user.details"="Användaruppgifter"; "voltage"="Spänning"; "waiting"="Väntar..."; +"appsettings.newNodeNotifications"="New Node Notifications"; diff --git a/zh-Hans.lproj/Localizable.strings b/zh-Hans.lproj/Localizable.strings index 9a424c0e..935c3985 100644 --- a/zh-Hans.lproj/Localizable.strings +++ b/zh-Hans.lproj/Localizable.strings @@ -339,3 +339,4 @@ "user.details"="用户信息"; "voltage"="电压"; "waiting"="等待中..."; +"appsettings.newNodeNotifications"="New Node Notifications"; diff --git a/zh-Hant-TW.lproj/Localizable.strings b/zh-Hant-TW.lproj/Localizable.strings index 4a557826..f3f007c2 100644 --- a/zh-Hant-TW.lproj/Localizable.strings +++ b/zh-Hant-TW.lproj/Localizable.strings @@ -338,3 +338,4 @@ "user.details"="使用者資料"; "voltage"="電壓"; "waiting"="等待中..."; +"appsettings.newNodeNotifications"="New Node Notifications";