Replace environment objects with observed objects

This commit is contained in:
Arkadiusz Fal
2022-11-24 21:36:05 +01:00
parent 23fa0968c6
commit 0d333b5583
102 changed files with 427 additions and 723 deletions

View File

@@ -3,6 +3,8 @@ import Defaults
import Foundation
final class AccountsModel: ObservableObject {
static let shared = AccountsModel()
@Published private(set) var current: Account!
@Published private var invidious = InvidiousAPI()
@@ -61,8 +63,8 @@ final class AccountsModel: ObservableObject {
func configureAccount() {
if let account = lastUsed ??
InstancesModel.lastUsed?.anonymousAccount ??
InstancesModel.all.first?.anonymousAccount
InstancesModel.shared.lastUsed?.anonymousAccount ??
InstancesModel.shared.all.first?.anonymousAccount
{
setCurrent(account)
}

View File

@@ -2,27 +2,29 @@ import Defaults
import Foundation
final class InstancesModel: ObservableObject {
static var all: [Instance] {
static var shared = InstancesModel()
var all: [Instance] {
Defaults[.instances]
}
static var forPlayer: Instance? {
var forPlayer: Instance? {
guard let id = Defaults[.playerInstanceID] else {
return nil
}
return InstancesModel.find(id)
return InstancesModel.shared.find(id)
}
static var lastUsed: Instance? {
var lastUsed: Instance? {
guard let id = Defaults[.lastInstanceID] else {
return nil
}
return InstancesModel.find(id)
return InstancesModel.shared.find(id)
}
static func find(_ id: Instance.ID?) -> Instance? {
func find(_ id: Instance.ID?) -> Instance? {
guard id != nil else {
return nil
}
@@ -30,11 +32,11 @@ final class InstancesModel: ObservableObject {
return Defaults[.instances].first { $0.id == id }
}
static func accounts(_ id: Instance.ID?) -> [Account] {
func accounts(_ id: Instance.ID?) -> [Account] {
Defaults[.accounts].filter { $0.instanceID == id }
}
static func add(app: VideosApp, name: String, url: String) -> Instance {
func add(app: VideosApp, name: String, url: String) -> Instance {
let instance = Instance(
app: app, id: UUID().uuidString, name: name, apiURL: standardizedURL(url)
)
@@ -43,7 +45,7 @@ final class InstancesModel: ObservableObject {
return instance
}
static func setFrontendURL(_ instance: Instance, _ url: String) {
func setFrontendURL(_ instance: Instance, _ url: String) {
if let index = Defaults[.instances].firstIndex(where: { $0.id == instance.id }) {
var instance = Defaults[.instances][index]
instance.frontendURL = standardizedURL(url)
@@ -52,7 +54,7 @@ final class InstancesModel: ObservableObject {
}
}
static func setProxiesVideos(_ instance: Instance, _ proxiesVideos: Bool) {
func setProxiesVideos(_ instance: Instance, _ proxiesVideos: Bool) {
guard let index = Defaults[.instances].firstIndex(where: { $0.id == instance.id }) else {
return
}
@@ -63,15 +65,15 @@ final class InstancesModel: ObservableObject {
Defaults[.instances][index] = instance
}
static func remove(_ instance: Instance) {
let accounts = Self.accounts(instance.id)
func remove(_ instance: Instance) {
let accounts = accounts(instance.id)
if let index = Defaults[.instances].firstIndex(where: { $0.id == instance.id }) {
Defaults[.instances].remove(at: index)
accounts.forEach { AccountsModel.remove($0) }
}
}
static func standardizedURL(_ url: String) -> String {
func standardizedURL(_ url: String) -> String {
if url.count > 7, url.last == "/" {
return String(url.dropLast())
} else {