112 lines
3.7 KiB
Swift
112 lines
3.7 KiB
Swift
//
|
|
// ResourcesModelPerformance.swift
|
|
// Wallet
|
|
//
|
|
// Created by Igor on 09.03.2021.
|
|
// Copyright © 2021 AM. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
extension Resources.Model {
|
|
struct Performance {
|
|
enum Kind: String {
|
|
case cpu
|
|
case net
|
|
case ram
|
|
}
|
|
let kind: Kind
|
|
let available: Int
|
|
let max: Int
|
|
let staked: String
|
|
let stakedByMe: String
|
|
let stakedByOthers: String
|
|
let divider: Decimal
|
|
init(
|
|
kind: Kind,
|
|
available: Int? = nil,
|
|
max: Int? = nil,
|
|
staked: String? = nil,
|
|
stakedByMe: String? = nil
|
|
) {
|
|
self.kind = kind
|
|
self.available = available ?? 0
|
|
self.max = max ?? 0
|
|
self.staked = staked ?? Decimal(0).toString(max: .eosioToken)
|
|
self.stakedByMe = stakedByMe ?? Decimal(0).toString(max: .eosioToken)
|
|
let subtract = (staked?.amount.toDecimal() ?? 0) - self.stakedByMe.amount.toDecimal()
|
|
self.stakedByOthers = ((subtract > 0) ? subtract : 0).toString(max: .eosioToken)
|
|
self.divider = kind == .cpu ? 1000 : 1024
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Resources.Model.Performance {
|
|
private var availableDividedAndRounded: Double {
|
|
let available = (Decimal(available) / divider).roundDown(to: 2)
|
|
return available.doubleValue
|
|
}
|
|
|
|
private var maxDividedAndRounded: Double {
|
|
let max = (Decimal(max) / divider).roundDown(to: 2)
|
|
return max.doubleValue
|
|
}
|
|
|
|
private var usedDividedAndRounded: Double {
|
|
return self.maxDividedAndRounded - self.availableDividedAndRounded
|
|
}
|
|
|
|
var availableStr: String {
|
|
L10n.Resources.Performance.used2(
|
|
self.availableDividedAndRounded.toString(max: 2, min: 2, group: false),
|
|
kind.unit
|
|
)
|
|
}
|
|
var availableKbString: String {
|
|
L10n.Resources.Performance.Available.kb(
|
|
self.availableDividedAndRounded.toString(max: 2, min: 2, group: false, symbol: kind.unit)
|
|
)
|
|
}
|
|
|
|
var maxStr: String {
|
|
L10n.Resources.Performance.used2(
|
|
self.maxDividedAndRounded.toString(max: 2, min: 2, group: false),
|
|
kind.unit
|
|
)
|
|
}
|
|
|
|
var availableTitle: String {
|
|
L10n.Resources.Performance.available(
|
|
self.availableDividedAndRounded.toString(max: 2, min: 2, group: false, symbol: kind.unit),
|
|
self.maxDividedAndRounded.toString(max: 2, min: 2, group: false, symbol: kind.unit),
|
|
self.availableProgress.withPercentage
|
|
)
|
|
}
|
|
|
|
var usedTitle: String {
|
|
L10n.Resources.Performance.used(
|
|
self.usedDividedAndRounded.toString(max: 2, min: 2, group: false),
|
|
self.maxDividedAndRounded.toString(max: 2, min: 2, group: false),
|
|
kind.unit
|
|
)
|
|
}
|
|
|
|
var availableProgress: Double {
|
|
let safeMax = self.maxDividedAndRounded == 0 ? 1 : self.maxDividedAndRounded
|
|
return self.availableDividedAndRounded / safeMax
|
|
}
|
|
|
|
var usedProgress: Double {
|
|
let safeMax = self.maxDividedAndRounded == 0 ? 1 : self.maxDividedAndRounded
|
|
return self.usedDividedAndRounded / safeMax
|
|
}
|
|
var usedPercentageProgress: String { self.usedProgress.withPercentage }
|
|
}
|
|
|
|
extension Resources.Model.Performance.Kind {
|
|
var unit: String { self == .cpu ? L10n.Resources.Performance.Unit.ms : L10n.Resources.Performance.Unit.kb }
|
|
var prefix: String { "resources.performance.kind.\(rawValue).prefix".localized }
|
|
var name: String { "resources.performance.kind.\(rawValue).name".localized }
|
|
var title: String { prefix.isEmpty ? name : "\(prefix) (\(name))" }
|
|
}
|