mirror of
https://github.com/yattee/yattee.git
synced 2025-08-06 18:54:11 +00:00
Save last used account instead of having to set default
This commit is contained in:
@@ -3,7 +3,7 @@ import Defaults
|
||||
import Foundation
|
||||
|
||||
final class AccountsModel: ObservableObject {
|
||||
@Published private(set) var account: Instance.Account!
|
||||
@Published private(set) var current: Instance.Account!
|
||||
|
||||
@Published private(set) var invidious = InvidiousAPI()
|
||||
@Published private(set) var piped = PipedAPI()
|
||||
@@ -11,15 +11,23 @@ final class AccountsModel: ObservableObject {
|
||||
private var cancellables = [AnyCancellable]()
|
||||
|
||||
var all: [Instance.Account] {
|
||||
Defaults[.instances].map(\.anonymousAccount) + Defaults[.accounts]
|
||||
Defaults[.accounts]
|
||||
}
|
||||
|
||||
var lastUsed: Instance.Account? {
|
||||
guard let id = Defaults[.lastAccountID] else {
|
||||
return nil
|
||||
}
|
||||
|
||||
return AccountsModel.find(id)
|
||||
}
|
||||
|
||||
var isEmpty: Bool {
|
||||
account.isNil
|
||||
current.isNil
|
||||
}
|
||||
|
||||
var signedIn: Bool {
|
||||
!isEmpty && !account.anonymous
|
||||
!isEmpty && !current.anonymous
|
||||
}
|
||||
|
||||
init() {
|
||||
@@ -32,12 +40,12 @@ final class AccountsModel: ObservableObject {
|
||||
)
|
||||
}
|
||||
|
||||
func setAccount(_ account: Instance.Account! = nil) {
|
||||
guard account != self.account else {
|
||||
func setCurrent(_ account: Instance.Account! = nil) {
|
||||
guard account != current else {
|
||||
return
|
||||
}
|
||||
|
||||
self.account = account
|
||||
current = account
|
||||
|
||||
guard !account.isNil else {
|
||||
return
|
||||
@@ -49,5 +57,25 @@ final class AccountsModel: ObservableObject {
|
||||
case .piped:
|
||||
piped.setAccount(account)
|
||||
}
|
||||
|
||||
Defaults[.lastAccountID] = account.anonymous ? nil : account.id
|
||||
Defaults[.lastInstanceID] = account.instanceID
|
||||
}
|
||||
|
||||
static func find(_ id: Instance.Account.ID) -> Instance.Account? {
|
||||
Defaults[.accounts].first { $0.id == id }
|
||||
}
|
||||
|
||||
static func add(instance: Instance, name: String, sid: String) -> Instance.Account {
|
||||
let account = Instance.Account(instanceID: instance.id, name: name, url: instance.url, sid: sid)
|
||||
Defaults[.accounts].append(account)
|
||||
|
||||
return account
|
||||
}
|
||||
|
||||
static func remove(_ account: Instance.Account) {
|
||||
if let accountIndex = Defaults[.accounts].firstIndex(where: { $0.id == account.id }) {
|
||||
Defaults[.accounts].remove(at: accountIndex)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -14,17 +14,17 @@ struct Instance: Defaults.Serializable, Hashable, Identifiable {
|
||||
static var bridge = AccountsBridge()
|
||||
|
||||
let id: String
|
||||
let instanceID: UUID
|
||||
let instanceID: String
|
||||
var name: String?
|
||||
let url: String
|
||||
let sid: String
|
||||
let anonymous: Bool
|
||||
|
||||
init(id: String? = nil, instanceID: UUID? = nil, name: String? = nil, url: String? = nil, sid: String? = nil, anonymous: Bool = false) {
|
||||
init(id: String? = nil, instanceID: String? = nil, name: String? = nil, url: String? = nil, sid: String? = nil, anonymous: Bool = false) {
|
||||
self.anonymous = anonymous
|
||||
|
||||
self.id = id ?? (anonymous ? "anonymous-\(instanceID!)" : UUID().uuidString)
|
||||
self.instanceID = instanceID ?? UUID()
|
||||
self.instanceID = instanceID ?? UUID().uuidString
|
||||
self.name = name
|
||||
self.url = url ?? ""
|
||||
self.sid = sid ?? ""
|
||||
@@ -62,7 +62,7 @@ struct Instance: Defaults.Serializable, Hashable, Identifiable {
|
||||
|
||||
return [
|
||||
"id": value.id,
|
||||
"instanceID": value.instanceID.uuidString,
|
||||
"instanceID": value.instanceID,
|
||||
"name": value.name ?? "",
|
||||
"url": value.url,
|
||||
"sid": value.sid
|
||||
@@ -80,10 +80,9 @@ struct Instance: Defaults.Serializable, Hashable, Identifiable {
|
||||
return nil
|
||||
}
|
||||
|
||||
let instanceUUID = UUID(uuidString: instanceID)!
|
||||
let name = object["name"] ?? ""
|
||||
|
||||
return Account(id: id, instanceID: instanceUUID, name: name, url: url, sid: sid)
|
||||
return Account(id: id, instanceID: instanceID, name: name, url: url, sid: sid)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -91,13 +90,13 @@ struct Instance: Defaults.Serializable, Hashable, Identifiable {
|
||||
static var bridge = InstancesBridge()
|
||||
|
||||
let app: App
|
||||
let id: UUID
|
||||
let id: String
|
||||
let name: String
|
||||
let url: String
|
||||
|
||||
init(app: App, id: UUID? = nil, name: String, url: String) {
|
||||
init(app: App, id: String? = nil, name: String, url: String) {
|
||||
self.app = app
|
||||
self.id = id ?? UUID()
|
||||
self.id = id ?? UUID().uuidString
|
||||
self.name = name
|
||||
self.url = url
|
||||
}
|
||||
@@ -133,7 +132,7 @@ struct Instance: Defaults.Serializable, Hashable, Identifiable {
|
||||
|
||||
return [
|
||||
"app": value.app.rawValue,
|
||||
"id": value.id.uuidString,
|
||||
"id": value.id,
|
||||
"name": value.name,
|
||||
"url": value.url
|
||||
]
|
||||
@@ -149,10 +148,9 @@ struct Instance: Defaults.Serializable, Hashable, Identifiable {
|
||||
return nil
|
||||
}
|
||||
|
||||
let uuid = UUID(uuidString: id)
|
||||
let name = object["name"] ?? ""
|
||||
|
||||
return Instance(app: app, id: uuid, name: name, url: url)
|
||||
return Instance(app: app, id: id, name: name, url: url)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -2,21 +2,19 @@ import Defaults
|
||||
import Foundation
|
||||
|
||||
final class InstancesModel: ObservableObject {
|
||||
@Published var defaultAccount: Instance.Account?
|
||||
|
||||
var all: [Instance] {
|
||||
Defaults[.instances]
|
||||
}
|
||||
|
||||
init() {
|
||||
guard let id = Defaults[.defaultAccountID] else {
|
||||
return
|
||||
var lastUsed: Instance? {
|
||||
guard let id = Defaults[.lastInstanceID] else {
|
||||
return nil
|
||||
}
|
||||
|
||||
defaultAccount = findAccount(id)
|
||||
return InstancesModel.find(id)
|
||||
}
|
||||
|
||||
func find(_ id: Instance.ID?) -> Instance? {
|
||||
static func find(_ id: Instance.ID?) -> Instance? {
|
||||
guard id != nil else {
|
||||
return nil
|
||||
}
|
||||
@@ -24,48 +22,26 @@ final class InstancesModel: ObservableObject {
|
||||
return Defaults[.instances].first { $0.id == id }
|
||||
}
|
||||
|
||||
func accounts(_ id: Instance.ID?) -> [Instance.Account] {
|
||||
static func accounts(_ id: Instance.ID?) -> [Instance.Account] {
|
||||
Defaults[.accounts].filter { $0.instanceID == id }
|
||||
}
|
||||
|
||||
func add(app: Instance.App, name: String, url: String) -> Instance {
|
||||
let instance = Instance(app: app, name: name, url: url)
|
||||
static func add(app: Instance.App, name: String, url: String) -> Instance {
|
||||
let instance = Instance(app: app, id: UUID().uuidString, name: name, url: url)
|
||||
Defaults[.instances].append(instance)
|
||||
|
||||
return instance
|
||||
}
|
||||
|
||||
func remove(_ instance: Instance) {
|
||||
let accounts = accounts(instance.id)
|
||||
static func remove(_ instance: Instance) {
|
||||
let accounts = InstancesModel.accounts(instance.id)
|
||||
if let index = Defaults[.instances].firstIndex(where: { $0.id == instance.id }) {
|
||||
Defaults[.instances].remove(at: index)
|
||||
accounts.forEach { removeAccount($0) }
|
||||
accounts.forEach { AccountsModel.remove($0) }
|
||||
}
|
||||
}
|
||||
|
||||
func findAccount(_ id: Instance.Account.ID) -> Instance.Account? {
|
||||
Defaults[.accounts].first { $0.id == id }
|
||||
}
|
||||
|
||||
func addAccount(instance: Instance, name: String, sid: String) -> Instance.Account {
|
||||
let account = Instance.Account(instanceID: instance.id, name: name, url: instance.url, sid: sid)
|
||||
Defaults[.accounts].append(account)
|
||||
|
||||
return account
|
||||
}
|
||||
|
||||
func removeAccount(_ account: Instance.Account) {
|
||||
if let accountIndex = Defaults[.accounts].firstIndex(where: { $0.id == account.id }) {
|
||||
Defaults[.accounts].remove(at: accountIndex)
|
||||
}
|
||||
}
|
||||
|
||||
func setDefaultAccount(_ account: Instance.Account?) {
|
||||
Defaults[.defaultAccountID] = account?.id
|
||||
defaultAccount = account
|
||||
}
|
||||
|
||||
func resetDefaultAccount() {
|
||||
setDefaultAccount(nil)
|
||||
static func setLastAccount(_ account: Instance.Account?) {
|
||||
Defaults[.lastAccountID] = account?.id
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user