Files
raspberry/iOS/Wallet/Sources/Account/Service/AccountServiceResources.swift
2022-05-27 20:21:01 +03:00

87 lines
2.5 KiB
Swift

//
// AccountServiceResources.swift
// PayCash
//
// Created by Igor on 05.03.2021.
// Copyright © 2021 AM. All rights reserved.
//
import Foundation
extension Notification.Name {
static let didUpdateAccountQuota = Self("Account.Service.Resources.didUpdateAccountQuota")
}
extension Account.Service {
class Resources2 {
private var _service: Resources.Service.Quota?
private var service: Resources.Service.Quota? {
if _service == nil, let account = Accounts().current?.username {
_service = .init(account: account)
}
return _service
}
var count: Int { free + paid }
private(set) var free: Int {
get { Settings()[.free] }
set { Settings()[.free] = newValue }
}
private(set) var paid: Int {
get { Settings()[.paid] }
set { Settings()[.paid] = newValue }
}
var isEmpty: Bool { _service == nil && free == 0 && paid == 0 }
var isEnabled: Bool {
get { Settings()[.isEnabled] }
set { Settings()[.isEnabled] = newValue;Notification.post(name: .didUpdateAccountQuota) }
}
init() {
if !Settings().contains(.isEnabled) {
isEnabled = true
}
}
func update(free: Int, paid: Int) {
self.free = free
self.paid = paid
Notification.post(name: .didUpdateAccountQuota)
}
func fetch(clear: Bool = false, force: Bool = false) {
if clear {
paid = 0
free = 0
_service = nil
Notification.post(name: .didUpdateAccountQuota)
}
perform()
if force {
delayed(4) { self.perform() }
delayed(8) { self.perform() }
delayed(16) { self.perform() }
}
}
private func perform() {
service?.fetch { [weak self] _ in
if let free = self?.service?.free, let paid = self?.service?.paid {
self?.update(free: free, paid: paid)
}
}
}
}
}
extension Common.Model.Key {
fileprivate static let free = Self("Account.Service.Resources.free")
fileprivate static let paid = Self("Account.Service.Resources.paid")
fileprivate static let isEnabled = Self("Account.Service.Resources.isEnabled")
}