mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-02-22 15:04:50 +01:00
ADD: Update complication currency based on user preference
This commit is contained in:
parent
c413a6a133
commit
983e6b4dd1
10 changed files with 85 additions and 37 deletions
|
@ -7,7 +7,9 @@ import { BlueStorageContext } from './blue_modules/storage-context';
|
|||
import Notifications from './blue_modules/notifications';
|
||||
|
||||
function WatchConnectivity() {
|
||||
const { walletsInitialized, wallets, fetchWalletTransactions, saveToDisk, txMetadata } = useContext(BlueStorageContext);
|
||||
const { walletsInitialized, wallets, fetchWalletTransactions, saveToDisk, txMetadata, preferredFiatCurrency } = useContext(
|
||||
BlueStorageContext,
|
||||
);
|
||||
const isReachable = useReachability();
|
||||
const isInstalled = useInstalled(); // true | false
|
||||
|
||||
|
@ -19,6 +21,21 @@ function WatchConnectivity() {
|
|||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [walletsInitialized, wallets, isReachable, isInstalled]);
|
||||
|
||||
useEffect(() => {
|
||||
if (walletsInitialized) {
|
||||
try {
|
||||
updateApplicationContext({
|
||||
preferredFiatCurrency: JSON.parse(preferredFiatCurrency).endPointKey,
|
||||
randomID: Math.floor(Math.random() * 11),
|
||||
});
|
||||
} catch (e) {
|
||||
console.log('WatchConnectivity useEffect preferredFiatCurrency error');
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [preferredFiatCurrency, walletsInitialized]);
|
||||
|
||||
const handleMessages = (message, reply) => {
|
||||
if (message.request === 'createInvoice') {
|
||||
handleLightningInvoiceCreateRequest(message.walletIndex, message.amount, message.description)
|
||||
|
|
|
@ -30,6 +30,7 @@ async function setPrefferedCurrency(item) {
|
|||
|
||||
async function getPreferredCurrency() {
|
||||
const preferredCurrency = await JSON.parse(await AsyncStorage.getItem(AppStorage.PREFERRED_CURRENCY));
|
||||
await DefaultPreference.setName('group.io.bluewallet.bluewallet');
|
||||
await DefaultPreference.set('preferredCurrency', preferredCurrency.endPointKey);
|
||||
await DefaultPreference.set('preferredCurrencyLocale', preferredCurrency.locale.replace('-', '_'));
|
||||
return preferredCurrency;
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.io.bluewallet.bluewallet</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict/>
|
||||
</plist>
|
||||
|
|
|
@ -41,13 +41,17 @@ class ComplicationController: NSObject, CLKComplicationDataSource {
|
|||
let valueLabel: String
|
||||
let currencySymbol: String
|
||||
|
||||
if let price = marketData?.formattedRateForComplication, let marketDatadata = marketData?.date, let userCurrencySymbol = fiatUnit(currency: WidgetAPI.getUserPreferredCurrency())?.symbol {
|
||||
if let price = marketData?.formattedRateForComplication, let marketDatadata = marketData?.date {
|
||||
date = marketDatadata
|
||||
valueLabel = price
|
||||
currencySymbol = userCurrencySymbol
|
||||
if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) {
|
||||
currencySymbol = preferredFiatUnit.symbol
|
||||
} else {
|
||||
currencySymbol = fiatUnit(currency: "USD")!.symbol
|
||||
}
|
||||
} else {
|
||||
valueLabel = "--"
|
||||
currencySymbol = "USD"
|
||||
currencySymbol = fiatUnit(currency: "USD")!.symbol
|
||||
date = Date()
|
||||
}
|
||||
|
||||
|
|
|
@ -14,17 +14,32 @@ class ExtensionDelegate: NSObject, WKExtensionDelegate {
|
|||
func applicationDidFinishLaunching() {
|
||||
// Perform any final initialization of your application.
|
||||
scheduleNextReload()
|
||||
WidgetAPI.fetchPrice(currency: WidgetAPI.getUserPreferredCurrency()) { [weak self] (data, error) in
|
||||
ExtensionDelegate.preferredFiatCurrencyChanged()
|
||||
}
|
||||
|
||||
static func preferredFiatCurrencyChanged() {
|
||||
let fiatUnitUserDefaults: FiatUnit
|
||||
if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) {
|
||||
fiatUnitUserDefaults = preferredFiatUnit
|
||||
} else {
|
||||
fiatUnitUserDefaults = fiatUnit(currency: "USD")!
|
||||
}
|
||||
WidgetAPI.fetchPrice(currency: fiatUnitUserDefaults.endPointKey) { (data, error) in
|
||||
if let data = data, let encodedData = try? PropertyListEncoder().encode(data) {
|
||||
UserDefaults.standard.set(encodedData, forKey: MarketData.string)
|
||||
self?.reloadActiveComplications()
|
||||
UserDefaults.standard.synchronize()
|
||||
let server = CLKComplicationServer.sharedInstance()
|
||||
|
||||
for complication in server.activeComplications ?? [] {
|
||||
server.reloadTimeline(for: complication)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func nextReloadTime(after date: Date) -> Date {
|
||||
let calendar = Calendar(identifier: .gregorian)
|
||||
return calendar.date(byAdding: .minute, value: 1, to: date)!
|
||||
return calendar.date(byAdding: .minute, value: 10, to: date)!
|
||||
}
|
||||
|
||||
func scheduleNextReload() {
|
||||
|
@ -60,14 +75,20 @@ class ExtensionDelegate: NSObject, WKExtensionDelegate {
|
|||
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
|
||||
for task in backgroundTasks {
|
||||
switch task {
|
||||
case let backgroundTask as WKApplicationRefreshBackgroundTask:
|
||||
case let backgroundTask as WKApplicationRefreshBackgroundTask:
|
||||
NSLog("ExtensionDelegate: handling WKApplicationRefreshBackgroundTask")
|
||||
|
||||
scheduleNextReload()
|
||||
|
||||
WidgetAPI.fetchPrice(currency: WidgetAPI.getUserPreferredCurrency()) { [weak self] (data, error) in
|
||||
let fiatUnitUserDefaults: FiatUnit
|
||||
if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) {
|
||||
fiatUnitUserDefaults = preferredFiatUnit
|
||||
} else {
|
||||
fiatUnitUserDefaults = fiatUnit(currency: "USD")!
|
||||
}
|
||||
WidgetAPI.fetchPrice(currency: fiatUnitUserDefaults.endPointKey) { [weak self] (data, error) in
|
||||
if let data = data, let encodedData = try? PropertyListEncoder().encode(data) {
|
||||
UserDefaults.standard.set(encodedData, forKey: MarketData.string)
|
||||
UserDefaults.standard.synchronize()
|
||||
self?.reloadActiveComplications()
|
||||
backgroundTask.setTaskCompletedWithSnapshot(false)
|
||||
}
|
||||
|
@ -79,4 +100,6 @@ class ExtensionDelegate: NSObject, WKExtensionDelegate {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -96,11 +96,23 @@ class WatchDataSource: NSObject, WCSessionDelegate {
|
|||
}
|
||||
|
||||
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
|
||||
WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext)
|
||||
if let preferredFiatCurrency = applicationContext["preferredFiatCurrency"] as? String, let preferredFiatCurrencyUnit = fiatUnit(currency: preferredFiatCurrency) {
|
||||
UserDefaults.standard.set(preferredFiatCurrencyUnit.endPointKey, forKey: "preferredFiatCurrency")
|
||||
UserDefaults.standard.synchronize()
|
||||
ExtensionDelegate.preferredFiatCurrencyChanged()
|
||||
} else {
|
||||
WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext)
|
||||
}
|
||||
}
|
||||
|
||||
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
|
||||
WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext)
|
||||
if let preferredFiatCurrency = applicationContext["preferredFiatCurrency"] as? String, let preferredFiatCurrencyUnit = fiatUnit(currency: preferredFiatCurrency) {
|
||||
UserDefaults.standard.set(preferredFiatCurrencyUnit.endPointKey, forKey: "preferredFiatCurrency")
|
||||
UserDefaults.standard.synchronize()
|
||||
ExtensionDelegate.preferredFiatCurrencyChanged()
|
||||
} else {
|
||||
WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext)
|
||||
}
|
||||
}
|
||||
|
||||
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.io.bluewallet.bluewallet</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict/>
|
||||
</plist>
|
||||
|
|
|
@ -61,3 +61,14 @@ enum MarketDataTimeline: String {
|
|||
case Previous = "previous"
|
||||
case Current = "current"
|
||||
}
|
||||
|
||||
enum UserDefaultsGroupKey: String {
|
||||
case GroupName = "group.io.bluewallet.bluewallet"
|
||||
case PreferredCurrency = "preferredCurrency"
|
||||
case ElectrumSettingsHost = "electrum_host"
|
||||
case ElectrumSettingsTCPPort = "electrum_tcp_port"
|
||||
case ElectrumSettingsSSLPort = "electrum_ssl_port"
|
||||
case AllWalletsBalance = "WidgetCommunicationAllWalletsSatoshiBalance"
|
||||
case AllWalletsLatestTransactionTime = "WidgetCommunicationAllWalletsLatestTransactionTime"
|
||||
case LatestTransactionIsUnconfirmed = "\"WidgetCommunicationLatestTransactionIsUnconfirmed\""
|
||||
}
|
||||
|
|
|
@ -8,17 +8,6 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
enum UserDefaultsGroupKey: String {
|
||||
case GroupName = "group.io.bluewallet.bluewallet"
|
||||
case PreferredCurrency = "preferredCurrency"
|
||||
case ElectrumSettingsHost = "electrum_host"
|
||||
case ElectrumSettingsTCPPort = "electrum_tcp_port"
|
||||
case ElectrumSettingsSSLPort = "electrum_ssl_port"
|
||||
case AllWalletsBalance = "WidgetCommunicationAllWalletsSatoshiBalance"
|
||||
case AllWalletsLatestTransactionTime = "WidgetCommunicationAllWalletsLatestTransactionTime"
|
||||
case LatestTransactionIsUnconfirmed = "\"WidgetCommunicationLatestTransactionIsUnconfirmed\""
|
||||
}
|
||||
|
||||
struct UserDefaultsElectrumSettings {
|
||||
let host: String?
|
||||
let port: Int32?
|
||||
|
|
|
@ -42,7 +42,8 @@ class WidgetAPI {
|
|||
}
|
||||
|
||||
static func getUserPreferredCurrency() -> String {
|
||||
guard let userDefaults = UserDefaults(suiteName: "group.io.bluewallet.bluewallet"),
|
||||
|
||||
guard let userDefaults = UserDefaults(suiteName: UserDefaultsGroupKey.GroupName.rawValue),
|
||||
let preferredCurrency = userDefaults.string(forKey: "preferredCurrency")
|
||||
else {
|
||||
return "USD"
|
||||
|
@ -58,7 +59,7 @@ class WidgetAPI {
|
|||
}
|
||||
|
||||
static func getUserPreferredCurrencyLocale() -> String {
|
||||
guard let userDefaults = UserDefaults(suiteName: "group.io.bluewallet.bluewallet"),
|
||||
guard let userDefaults = UserDefaults(suiteName: UserDefaultsGroupKey.GroupName.rawValue),
|
||||
let preferredCurrency = userDefaults.string(forKey: "preferredCurrencyLocale")
|
||||
else {
|
||||
return "en_US"
|
||||
|
|
Loading…
Add table
Reference in a new issue