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()
|
|
|
|
}
|
2021-02-11 22:34:51 -05:00
|
|
|
}
|
|
|
|
|
2024-01-25 09:51:40 -04:00
|
|
|
func updatePreferredFiatCurrency() {
|
|
|
|
guard let fiatUnitUserDefaults = fetchPreferredFiatUnit() else { return }
|
|
|
|
updateMarketData(for: fiatUnitUserDefaults)
|
|
|
|
}
|
|
|
|
|
|
|
|
private func fetchPreferredFiatUnit() -> FiatUnit? {
|
2024-01-24 15:54:36 -04:00
|
|
|
if let preferredFiatCurrency = groupUserDefaults?.string(forKey: "preferredCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) {
|
2024-01-25 09:51:40 -04:00
|
|
|
return preferredFiatUnit
|
2021-02-11 22:34:51 -05:00
|
|
|
} else {
|
2024-01-25 09:51:40 -04:00
|
|
|
return fiatUnit(currency: "USD")
|
2021-02-11 22:34:51 -05:00
|
|
|
}
|
2024-01-25 09:51:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
private func updateMarketData(for fiatUnit: FiatUnit) {
|
2024-04-14 12:51:09 -04:00
|
|
|
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)
|
2021-02-11 22:34:51 -05:00
|
|
|
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 {
|
2021-02-11 22:34:51 -05:00
|
|
|
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)
|
|
|
|
}
|
2021-02-11 22:34:51 -05:00
|
|
|
|
2019-05-02 16:33:03 -04:00
|
|
|
}
|