mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-02-22 06:52:41 +01:00
Update MainInterface.storyboard ADD: Cache fetched data ADD: Add "Up from/Down from" data OPS: Add Provision Profile Update project.pbxproj ADD: Synchronize user selected currency with Today extension Update Info.plist ADD: quick actions Update App.js Update App.js Update App.js Update App.js Update App.js FIX: Fix currency bugs FIX: Hide balance from quick actions ADD: cqc Update currency.js Update TodayViewController.swift Update App.js REF: headercolor Update App.js FIX: carousel would not show FIX: Fix FIX FIX Update API.swift FIX: Fixed alerts TST Revert "TST" This reverts commit bcdf62e9b238cc5da200cc4bce45e4e55f480d6d. ADD: Tests mocks REF: Device Quick Actions ref FIX: Fixed crash Update quickActions.ios.js ADD: QuickActions for Android D FIX: Tests OP
130 lines
5.2 KiB
Swift
130 lines
5.2 KiB
Swift
//
|
|
// TodayViewController.swift
|
|
// TodayExtension
|
|
//
|
|
// Created by Marcos Rodriguez on 11/2/19.
|
|
// Copyright © 2019 Facebook. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import NotificationCenter
|
|
|
|
class TodayViewController: UIViewController, NCWidgetProviding {
|
|
|
|
|
|
@IBOutlet weak var currencyLabel: UILabel!
|
|
@IBOutlet weak var lastUpdatedDate: UILabel!
|
|
@IBOutlet weak var priceLabel: UILabel!
|
|
|
|
@IBOutlet weak var lastPriceArrowImage: UIImageView!
|
|
@IBOutlet weak var lastPrice: UILabel!
|
|
@IBOutlet weak var lastPriceFromLabel: UILabel!
|
|
private var lastPriceNumber: NSNumber?
|
|
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
setLastPriceOutletsHidden(isHidden: true)
|
|
if let lastStoredTodayStore = TodayData.getPriceRateAndLastUpdate() {
|
|
processRateAndLastUpdate(todayStore: lastStoredTodayStore)
|
|
} else {
|
|
setLastPriceOutletsHidden(isHidden: true)
|
|
}
|
|
}
|
|
|
|
func setLastPriceOutletsHidden(isHidden: Bool) {
|
|
lastPrice.isHidden = isHidden
|
|
lastPriceFromLabel.isHidden = isHidden
|
|
lastPriceArrowImage.isHidden = isHidden
|
|
}
|
|
|
|
func processRateAndLastUpdate(todayStore: TodayDataStore) {
|
|
guard let rateString = todayStore.formattedRate, let dateFormatted = todayStore.formattedDate else { return }
|
|
|
|
priceLabel.text = rateString
|
|
lastUpdatedDate.text = dateFormatted
|
|
}
|
|
|
|
func processStoredRateAndLastUpdate(todayStore: TodayDataStore) {
|
|
guard let lastPriceNumber = todayStore.formattedRate else { return }
|
|
|
|
lastPrice.text = lastPriceNumber
|
|
}
|
|
|
|
func processCachedStoredRateAndLastUpdate(new: TodayDataStore, cached: TodayDataStore) {
|
|
guard let newPriceDoubleValue = new.rateDoubleValue, let cachedPriceNumber = cached.formattedRate, let cachedPriceNumberDoubleValue = cached.rateDoubleValue else { return }
|
|
|
|
lastPrice.text = cachedPriceNumber
|
|
|
|
|
|
if newPriceDoubleValue > cachedPriceNumberDoubleValue {
|
|
self.lastPriceArrowImage.image = UIImage(systemName: "arrow.up")
|
|
self.setLastPriceOutletsHidden(isHidden: false)
|
|
} else {
|
|
self.lastPriceArrowImage.image = UIImage(systemName: "arrow.down")
|
|
self.setLastPriceOutletsHidden(isHidden: false)
|
|
}
|
|
}
|
|
|
|
func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
|
|
// Perform any setup necessary in order to update the view.
|
|
|
|
// If an error is encountered, use NCUpdateResult.Failed
|
|
// If there's no update required, use NCUpdateResult.NoData
|
|
// If there's an update, use NCUpdateResult.NewData
|
|
let userPreferredCurrency = API.getUserPreferredCurrency();
|
|
self.currencyLabel.text = userPreferredCurrency
|
|
API.fetchPrice(currency: userPreferredCurrency, completion: { (result, error) in
|
|
DispatchQueue.main.async { [unowned self] in
|
|
guard let result = result else {
|
|
completionHandler(.failed)
|
|
return
|
|
}
|
|
|
|
guard let bpi = result["bpi"] as? Dictionary<String, Any>, let preferredCurrency = bpi[userPreferredCurrency] as? Dictionary<String, Any>, let rateString = preferredCurrency["rate"] as? String,
|
|
let time = result["time"] as? Dictionary<String, Any>, let lastUpdatedString = time["updatedISO"] as? String
|
|
else {
|
|
return
|
|
}
|
|
|
|
let latestRateDataStore = TodayDataStore(rate: rateString, lastUpdate: lastUpdatedString)
|
|
|
|
if let lastStoredTodayStore = TodayData.getPriceRateAndLastUpdate(), lastStoredTodayStore.lastUpdate == latestRateDataStore.lastUpdate, rateString == lastStoredTodayStore.rate, API.getLastSelectedCurrency() == userPreferredCurrency {
|
|
if let cached = TodayData.getCachedPriceRateAndLastUpdate() {
|
|
self.processCachedStoredRateAndLastUpdate(new: lastStoredTodayStore, cached: cached)
|
|
} else {
|
|
self.setLastPriceOutletsHidden(isHidden: true)
|
|
}
|
|
completionHandler(.noData)
|
|
} else {
|
|
self.processRateAndLastUpdate(todayStore: latestRateDataStore)
|
|
let priceRiceAndLastUpdate = TodayData.getPriceRateAndLastUpdate()
|
|
|
|
if let rate = priceRiceAndLastUpdate?.rate, let lastUpdate = priceRiceAndLastUpdate?.lastUpdate {
|
|
TodayData.saveCachePriceRateAndLastUpdate(rate: rate, lastUpdate: lastUpdate);
|
|
}
|
|
|
|
if let latestRateDataStore = latestRateDataStore.rateDoubleValue, let lastStoredPriceNumber = priceRiceAndLastUpdate?.rateDoubleValue, API.getLastSelectedCurrency() == userPreferredCurrency {
|
|
|
|
if latestRateDataStore > lastStoredPriceNumber {
|
|
self.lastPriceArrowImage.image = UIImage(systemName: "arrow.up")
|
|
self.setLastPriceOutletsHidden(isHidden: false)
|
|
} else {
|
|
self.lastPriceArrowImage.image = UIImage(systemName: "arrow.down")
|
|
self.setLastPriceOutletsHidden(isHidden: false)
|
|
}
|
|
self.lastPrice.text = priceRiceAndLastUpdate?.formattedRate
|
|
} else {
|
|
self.setLastPriceOutletsHidden(isHidden: true)
|
|
}
|
|
|
|
TodayData.savePriceRateAndLastUpdate(rate: latestRateDataStore.rate, lastUpdate: latestRateDataStore.lastUpdate)
|
|
API.saveNewSelectedCurrency()
|
|
completionHandler(.newData)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|