1
0
mirror of https://github.com/yattee/yattee.git synced 2025-04-27 15:30:33 +05:30
yattee/Model/AccountsModel.swift
2021-10-18 01:29:03 +02:00

54 lines
1.2 KiB
Swift

import Combine
import Defaults
import Foundation
final class AccountsModel: ObservableObject {
@Published private(set) var account: Instance.Account!
@Published private(set) var invidious = InvidiousAPI()
@Published private(set) var piped = PipedAPI()
private var cancellables = [AnyCancellable]()
var all: [Instance.Account] {
Defaults[.instances].map(\.anonymousAccount) + Defaults[.accounts]
}
var isEmpty: Bool {
account.isNil
}
var signedIn: Bool {
!isEmpty && !account.anonymous
}
init() {
cancellables.append(
invidious.objectWillChange.sink { [weak self] _ in self?.objectWillChange.send() }
)
cancellables.append(
piped.objectWillChange.sink { [weak self] _ in self?.objectWillChange.send() }
)
}
func setAccount(_ account: Instance.Account! = nil) {
guard account != self.account else {
return
}
self.account = account
guard !account.isNil else {
return
}
switch account.instance.app {
case .invidious:
invidious.setAccount(account)
case .piped:
piped.setAccount(account)
}
}
}