Files
raspberry/iOS/Wallet/Sources/Resources/Service/ResourcesServicePerformance.swift

73 lines
2.6 KiB
Swift

//
// ResourcesServicePerformance.swift
// Wallet
//
// Created by Igor on 09.03.2021.
// Copyright © 2021 AM. All rights reserved.
//
import Foundation
extension Resources.Service {
class Performance: Common.Service.Provider {
private var collection = [Resources.Model.Performance]()
let account: String
private(set) var refund: String?
private(set) var refundTime: String?
init(account: String) {
self.account = account
}
subscript(_ kind: Resources.Model.Performance.Kind) -> Resources.Model.Performance {
if let value = collection.filter({ $0.kind == kind }).first { return value }
return .init(kind: kind)
}
func clear() {
collection = []
refund = nil
refundTime = nil
}
func fetch(_ completion: @escaping Completion.Network) {
Network.accounts.account(account) { (account) in
self.collection = [
.init(
kind: .cpu,
available: account?.cpuLimit.available,
max: account?.cpuLimit.max,
staked: account?.total.cpuWeight,
stakedByMe: account?.delegated?.cpuWeight
),
.init(
kind: .net,
available: account?.netLimit.available,
max: account?.netLimit.max,
staked: account?.total.netWeight,
stakedByMe: account?.delegated?.netWeight
),
.init(
kind: .ram,
available: (account?.ramQuota ?? 0) - (account?.ramUsage ?? 0),
max: account?.ramQuota
)
]
let refund = (account?.refund?.cpuAmount.amount.toDecimal() ?? 0) + (account?.refund?.netAmount.amount.toDecimal() ?? 0)
self.refund = refund > 0 ? refund.toString(max: .eosioToken) : nil
if var date = account?.refund?.date {
date.addTimeInterval(Double(TimeZone.init(abbreviation: "UTC")!.secondsFromGMT()) + 3*24*3600)
self.refundTime = date.timeIntervalSince1970 > Date().timeIntervalSince1970 ? Date().distance(to: date) : nil
} else {
self.refundTime = nil
}
completion(nil)
}
}
}
}