BlueWallet/ios/BlueWalletWatch Extension/ExtensionDelegate.swift

91 lines
2.9 KiB
Swift
Raw Normal View History

2019-05-02 16:33:03 -04:00
//
// ExtensionDelegate.swift
// BlueWalletWatch Extension
//
// Created by Marcos Rodriguez on 3/6/19.
2024-01-25 00:39:01 -04:00
2019-05-02 16:33:03 -04:00
//
import WatchKit
2021-02-08 21:41:08 -05:00
import ClockKit
2024-01-28 23:04:48 -04:00
import Bugsnag
2019-05-02 16:33:03 -04:00
class ExtensionDelegate: NSObject, WKExtensionDelegate {
2021-02-08 21:41:08 -05:00
2024-01-28 23:04:48 -04:00
let groupUserDefaults = UserDefaults(suiteName: UserDefaultsGroupKey.GroupName.rawValue)
2021-02-08 21:41:08 -05:00
func applicationDidFinishLaunching() {
scheduleNextReload()
2024-01-25 09:51:40 -04:00
updatePreferredFiatCurrency()
2024-01-28 23:04:48 -04:00
if let isDoNotTrackEnabled = groupUserDefaults?.bool(forKey: "donottrack"), !isDoNotTrackEnabled {
Bugsnag.start()
}
}
2024-01-25 09:51:40 -04:00
func updatePreferredFiatCurrency() {
guard let fiatUnitUserDefaults = fetchPreferredFiatUnit() else { return }
updateMarketData(for: fiatUnitUserDefaults)
}
private func fetchPreferredFiatUnit() -> FiatUnit? {
if let preferredFiatCurrency = groupUserDefaults?.string(forKey: "preferredCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) {
2024-01-25 09:51:40 -04:00
return preferredFiatUnit
} else {
2024-01-25 09:51:40 -04:00
return fiatUnit(currency: "USD")
}
2024-01-25 09:51:40 -04:00
}
private func updateMarketData(for fiatUnit: FiatUnit) {
MarketAPI.fetchPrice(currency: fiatUnit.endPointKey) { (data, error) in
2024-01-25 09:51:40 -04:00
guard let data = data, let encodedData = try? PropertyListEncoder().encode(data) else { return }
let groupUserDefaults = UserDefaults(suiteName: UserDefaultsGroupKey.GroupName.rawValue)
groupUserDefaults?.set(encodedData, forKey: MarketData.string)
groupUserDefaults?.synchronize()
ExtensionDelegate.reloadActiveComplications()
}
}
private static func reloadActiveComplications() {
let server = CLKComplicationServer.sharedInstance()
for complication in server.activeComplications ?? [] {
server.reloadTimeline(for: complication)
2019-05-02 16:33:03 -04:00
}
2021-02-08 21:41:08 -05:00
}
func nextReloadTime(after date: Date) -> Date {
let calendar = Calendar(identifier: .gregorian)
return calendar.date(byAdding: .minute, value: 10, to: date)!
2021-02-08 21:41:08 -05:00
}
func scheduleNextReload() {
let targetDate = nextReloadTime(after: Date())
WKExtension.shared().scheduleBackgroundRefresh(
withPreferredDate: targetDate,
userInfo: nil,
scheduledCompletion: { _ in }
)
}
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
for task in backgroundTasks {
switch task {
case let backgroundTask as WKApplicationRefreshBackgroundTask:
2024-01-25 09:51:40 -04:00
handleApplicationRefreshBackgroundTask(backgroundTask)
default:
task.setTaskCompletedWithSnapshot(false)
2021-02-08 21:41:08 -05:00
}
2019-05-02 16:33:03 -04:00
}
2021-02-08 21:41:08 -05:00
}
2024-01-25 09:51:40 -04:00
private func handleApplicationRefreshBackgroundTask(_ backgroundTask: WKApplicationRefreshBackgroundTask) {
scheduleNextReload()
guard let fiatUnitUserDefaults = fetchPreferredFiatUnit() else {
backgroundTask.setTaskCompletedWithSnapshot(false)
return
}
updateMarketData(for: fiatUnitUserDefaults)
backgroundTask.setTaskCompletedWithSnapshot(false)
}
2019-05-02 16:33:03 -04:00
}