mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
* Update messaging list separator insets
* Dont show unread messages or notifications for emoji reactions matching iMessage.
* Restore ble state method (#1416)
* Restore BLE State
* Log privacy
* AccessoryManager to handle restored connection
* Comment task out
* Update restore state function based on conversation with jake
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLETransport.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLETransport.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Two Column Node List (#1425)
* Restore BLE State
* Log privacy
* AccessoryManager to handle restored connection
* Comment task out
* Switch the node list to a two column layout
* Keep asian translations of channel details string
* Update restore state function based on conversation with jake
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLETransport.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLETransport.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* always show node list search bar
* Update auto correct modifier
* Dont show online animations for ios 17, remove online animation from node map, remove online circle from position popover
* Work in progress.
* Update detents
* Gate the discovery process while restoring
* Use geometry reader to size weather tiles on node details
* Update BLE Transport
* Update location weather condistion styles
* Log privacy in didReceive
* Remove extra dividers from admin key config, fix onboarding typo
* Bump minimum catalyst target
* Bump mac target version
* Use @FetchRequest for UserList to try and use less memory on ios 17
* Revert change to @fetchrequest
* Stab in the dark for Devices crash
* Updated UserList (back?) to @FetchRequest
* Set mac minimum to 15
* Nil out continuation after use
* Use @FetchRequest for the node list to stop crashes on iOS 17
* Handle failed connections during restoration
---------
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update protos
* Update protos
* Remove stale keys
* Serbian translations update (#1422)
* Log privacy
* Add Serbian translations
---------
Co-authored-by: Garth Vander Houwen <garthvh@yahoo.com>
* Clarify public key sub-text in security settings (#1412)
* Clarify public key sub-text in settings
* Trigger lint
* freq slot num pad (#1410)
* kill keyboard toolbar on lora config
* delete extranious scrollDismissesKeyboard
* Properly set catalyst target
* Update Meshtastic/Views/Onboarding/DeviceOnboarding.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update Meshtastic/Views/Settings/Config/SecurityConfig.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update Meshtastic/Enums/DeviceEnums.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Make current location nilable, remove log spam
* clean up toUser logic
* Fix telemetry entity not added in nodeInfoPacket
* fix typo: powerMetrics.hasChXCurrent mismatch
* Duplicate decoding of telemetry.current removed
* Clean up mesh map fetch request and distance filter logic
* Revert attempt to fix message logic
* Bump datadog version
* Missing message fix, attempt #2 (#1431)
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
* Retry fewer times for longer
* Revert "Missing message fix, attempt #2 (#1431)" (#1432)
This reverts commit a96d318adb.
* Make retry 2 seconds
* Add back link to node details from position popover without navigation stack and link, clear notifications when deleting database
* Add clear notifications function
* Link from channel messages to node info
* Link to node details
* Discovery on retry fix
* Discovery on retry fix fix
* Add contact to device node db if you get an encrypted send faild routing error
* Seperate channel message view into two views for better performance.
* Refactor User Message List
* Update device hardware
Add liquid glass to config save button
* Save button cleanup
* Update button structure on users view
* Move encrypted send logic out of the router. Update protos
* Restore node long- and short- names (#1442)
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLEConnection.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Revert routing error
* Toggle for enabling device telemetry broadcast enable
* Update
* Enhancements for interval dropdowns (#1445)
* Cleanup
* Fix core data version
* Add never to update interval
* Device telemetry Enabled Boolean (#1446)
* Update core data and interval picker
* Move formatter
* Rework to nest options under enabled
* Clearer names
* Safer devicehardware api call, remove node history filter from mesh map
* Fix build
* Simplify mesh map filter
* Remove stale translation keys
---------
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Nikola Dašić <dasic.nikola@yandex.com>
Co-authored-by: Spencer Smith <dontaskspencer@gmail.com>
Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
216 lines
6.3 KiB
Swift
216 lines
6.3 KiB
Swift
//
|
|
// UpdateIntervals.swift
|
|
// Meshtastic
|
|
//
|
|
// Created by Garth Vander Houwen on 12/30/22.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
enum IntervalConfiguration: CaseIterable {
|
|
case all
|
|
case broadcastShort
|
|
case broadcastMedium
|
|
case broadcastLong
|
|
case detectionSensorMinimum
|
|
case detectionSensorState
|
|
case nagTimeout
|
|
case paxCounter
|
|
case rangeTestSender
|
|
case smartBroadcastMinimum
|
|
|
|
var allowedCases: [FixedUpdateIntervals] {
|
|
switch self {
|
|
case .all:
|
|
return FixedUpdateIntervals.allCases // Show all cases
|
|
case .broadcastShort:
|
|
return [.unset, .thirtyMinutes, .oneHour, .twoHours, .threeHours, .fourHours, .fiveHours, .sixHours, .twelveHours, .eighteenHours, .twentyFourHours, .thirtySixHours, .fortyeightHours, .seventyTwoHours, .never]
|
|
case .broadcastMedium:
|
|
return [.oneHour, .twoHours, .threeHours, .fourHours, .fiveHours, .sixHours, .twelveHours, .eighteenHours, .twentyFourHours, .thirtySixHours, .fortyeightHours, .seventyTwoHours, .never]
|
|
case .broadcastLong:
|
|
return [.threeHours, .fourHours, .fiveHours, .sixHours, .twelveHours, .eighteenHours, .twentyFourHours, .thirtySixHours, .fortyeightHours, .seventyTwoHours, .never]
|
|
case .detectionSensorMinimum:
|
|
return [.unset, .fifteenSeconds, .thirtySeconds, .oneMinute, .twoMinutes, .fiveMinutes, .tenMinutes, .fifteenMinutes, .thirtyMinutes, .oneHour, .twoHours, .threeHours, .fourHours, .fiveHours, .sixHours, .twelveHours, .eighteenHours, .twentyFourHours, .thirtySixHours, .fortyeightHours, .seventyTwoHours]
|
|
case .detectionSensorState:
|
|
return [.unset, .fifteenMinutes, .thirtyMinutes, .oneHour, .twoHours, .threeHours, .fourHours, .fiveHours, .sixHours, .twelveHours, .eighteenHours, .twentyFourHours, .thirtySixHours, .fortyeightHours, .seventyTwoHours]
|
|
case .nagTimeout:
|
|
return [.unset, .oneSecond, .fiveSeconds, .tenSeconds, .fifteenSeconds, .thirtySeconds, .oneMinute]
|
|
case .paxCounter:
|
|
return [.fifteenMinutes, .thirtyMinutes, .oneHour, .twoHours, .threeHours, .fourHours, .fiveHours, .sixHours, .twelveHours, .eighteenHours, .twentyFourHours, .thirtySixHours, .fortyeightHours, .seventyTwoHours]
|
|
case .rangeTestSender:
|
|
return [.unset, .fifteenSeconds, .thirtySeconds, .fortyFiveSeconds, .oneMinute, .fiveMinutes, .tenMinutes, .fifteenMinutes, .thirtyMinutes, .oneHour]
|
|
case .smartBroadcastMinimum:
|
|
return [.fifteenSeconds, .thirtySeconds, .fortyFiveSeconds, .oneMinute, .fiveMinutes, .tenMinutes, .fifteenMinutes, .thirtyMinutes, .oneHour]
|
|
}
|
|
}
|
|
}
|
|
|
|
enum FixedUpdateIntervals: Int, CaseIterable, Hashable {
|
|
|
|
case unset = 0
|
|
case oneSecond = 1
|
|
case fiveSeconds = 5
|
|
case tenSeconds = 10
|
|
case fifteenSeconds = 15
|
|
case thirtySeconds = 30
|
|
case fortyFiveSeconds = 45
|
|
case oneMinute = 60
|
|
case twoMinutes = 120
|
|
case fiveMinutes = 300
|
|
case tenMinutes = 600
|
|
case fifteenMinutes = 900
|
|
case thirtyMinutes = 1800
|
|
case oneHour = 3600
|
|
case twoHours = 7200
|
|
case threeHours = 10800
|
|
case fourHours = 14400
|
|
case fiveHours = 18000
|
|
case sixHours = 21600
|
|
case twelveHours = 43200
|
|
case eighteenHours = 64800
|
|
case twentyFourHours = 86400
|
|
case thirtySixHours = 129600
|
|
case fortyeightHours = 172800
|
|
case seventyTwoHours = 259200
|
|
case never = 2147483647 // Int.max
|
|
}
|
|
|
|
struct UpdateInterval: Hashable, Identifiable {
|
|
|
|
enum IntervalType: Hashable {
|
|
case fixed(FixedUpdateIntervals)
|
|
case manual(Int)
|
|
}
|
|
|
|
let type: IntervalType
|
|
|
|
var id: String {
|
|
switch type {
|
|
case .fixed(let fixedCase):
|
|
return "fixed_\(fixedCase.rawValue)"
|
|
case .manual(let value):
|
|
return "manual_\(value)"
|
|
}
|
|
}
|
|
|
|
var intValue: Int {
|
|
switch type {
|
|
case .fixed(let fixedCase):
|
|
return fixedCase.rawValue
|
|
case .manual(let value):
|
|
return value
|
|
}
|
|
}
|
|
|
|
var description: String {
|
|
switch type {
|
|
case .fixed(let fixedCase):
|
|
switch fixedCase {
|
|
case .unset:
|
|
return "Unset".localized
|
|
case .oneSecond:
|
|
return "One Second".localized
|
|
case .fiveSeconds:
|
|
return "Five Seconds".localized
|
|
case .tenSeconds:
|
|
return "Ten Seconds".localized
|
|
case .fifteenSeconds:
|
|
return "Fifteen Seconds".localized
|
|
case .thirtySeconds:
|
|
return "Thirty Seconds".localized
|
|
case .fortyFiveSeconds:
|
|
return "Forty Five Seconds".localized
|
|
case .oneMinute:
|
|
return "One Minute".localized
|
|
case .twoMinutes:
|
|
return "Two Minutes".localized
|
|
case .fiveMinutes:
|
|
return "Five Minutes".localized
|
|
case .tenMinutes:
|
|
return "Ten Minutes".localized
|
|
case .fifteenMinutes:
|
|
return "Fifteen Minutes".localized
|
|
case .thirtyMinutes:
|
|
return "Thirty Minutes".localized
|
|
case .oneHour:
|
|
return "One Hour".localized
|
|
case .twoHours:
|
|
return "Two Hours".localized
|
|
case .threeHours:
|
|
return "Three Hours".localized
|
|
case .fourHours:
|
|
return "Four Hours".localized
|
|
case .fiveHours:
|
|
return "Five Hours".localized
|
|
case .sixHours:
|
|
return "Six Hours".localized
|
|
case .twelveHours:
|
|
return "Twelve Hours".localized
|
|
case .eighteenHours:
|
|
return "Eighteen Hours".localized
|
|
case .twentyFourHours:
|
|
return "Twenty Four Hours".localized
|
|
case .thirtySixHours:
|
|
return "Thirty Six Hours".localized
|
|
case .fortyeightHours:
|
|
return "Forty Eight Hours".localized
|
|
case .seventyTwoHours:
|
|
return "Seventy Two Hours".localized
|
|
case .never:
|
|
return "Never".localized
|
|
}
|
|
case .manual(let value):
|
|
return "Custom: \(value) Seconds".localized
|
|
}
|
|
}
|
|
|
|
// MARK: - Initializer (For loading from Int)
|
|
init(from int: Int) {
|
|
if let fixedCase = FixedUpdateIntervals(rawValue: int) {
|
|
self.type = .fixed(fixedCase)
|
|
} else {
|
|
self.type = .manual(int)
|
|
}
|
|
}
|
|
}
|
|
|
|
enum OutputIntervals: Int, CaseIterable, Identifiable {
|
|
|
|
case unset = 0
|
|
case oneSecond = 1000
|
|
case twoSeconds = 2000
|
|
case threeSeconds = 3000
|
|
case fourSeconds = 4000
|
|
case fiveSeconds = 5000
|
|
case tenSeconds = 10000
|
|
case fifteenSeconds = 15000
|
|
case thirtySeconds = 30000
|
|
case oneMinute = 60000
|
|
|
|
var id: Int { self.rawValue }
|
|
var description: String {
|
|
|
|
switch self {
|
|
case .unset:
|
|
return "Unset".localized
|
|
case .oneSecond:
|
|
return "One Second".localized
|
|
case .twoSeconds:
|
|
return "Two Seconds".localized
|
|
case .threeSeconds:
|
|
return "Three Seconds".localized
|
|
case .fourSeconds:
|
|
return "Four Seconds".localized
|
|
case .fiveSeconds:
|
|
return "Five Seconds".localized
|
|
case .tenSeconds:
|
|
return "Ten Seconds".localized
|
|
case .fifteenSeconds:
|
|
return "Fifteen Seconds".localized
|
|
case .thirtySeconds:
|
|
return "Thirty Seconds".localized
|
|
case .oneMinute:
|
|
return "One Minute".localized
|
|
}
|
|
}
|
|
}
|