87 lines
2.5 KiB
Swift
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")
|
|
}
|