From 5ed7d2551ccaefc19d9e0b934ef17583dca202b2 Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Tue, 12 Dec 2023 01:22:43 -0500 Subject: Add server page --- Jel/Controllers/AuthStateController.swift | 38 ++++++++++++++++++++++++++ Jel/Controllers/DatamodelController.swift | 25 +++++++++++++++++ Jel/Controllers/JellyfinClientController.swift | 30 ++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 Jel/Controllers/AuthStateController.swift create mode 100644 Jel/Controllers/DatamodelController.swift create mode 100644 Jel/Controllers/JellyfinClientController.swift (limited to 'Jel/Controllers') diff --git a/Jel/Controllers/AuthStateController.swift b/Jel/Controllers/AuthStateController.swift new file mode 100644 index 0000000..1629556 --- /dev/null +++ b/Jel/Controllers/AuthStateController.swift @@ -0,0 +1,38 @@ +// +// AuthStateController.swift +// Jel +// +// Created by zerocool on 12/11/23. +// + +import Foundation + +class AuthStateController: ObservableObject { + @Published var loggedIn: Bool + @Published var serverUrl: URL? + @Published var authToken: String? + + private let defaults = UserDefaults.standard + + init(loggedIn: Bool = false, serverUrl: URL? = nil, authToken: String? = nil) { + self.loggedIn = loggedIn + self.serverUrl = serverUrl + self.authToken = authToken + } + + func load() { + self.loggedIn = defaults.bool(forKey: "AuthState_loggedIn") + if let oldServerUrl = defaults.url(forKey: "AuthState_serverUrl") { + self.serverUrl = oldServerUrl + } + if let oldAuthToken = defaults.string(forKey: "AuthState_authToken") { + self.authToken = oldAuthToken + } + } + + func save() { + defaults.set(self.loggedIn, forKey: "AuthState_loggedIn") + defaults.set(self.serverUrl, forKey: "AuthState_serverUrl") + defaults.set(self.authToken, forKey: "AuthState_authToken") + } +} diff --git a/Jel/Controllers/DatamodelController.swift b/Jel/Controllers/DatamodelController.swift new file mode 100644 index 0000000..4beb173 --- /dev/null +++ b/Jel/Controllers/DatamodelController.swift @@ -0,0 +1,25 @@ +// +// DatamodelController.swift +// Jel +// +// Created by zerocool on 12/11/23. +// + +import CoreData + +struct DatamodelController { + static let shared = DatamodelController() + + let container: NSPersistentContainer + + init() { + container = NSPersistentContainer(name: "Model") + + container.loadPersistentStores(completionHandler: {(storeDescription, error) in + if let error = error as NSError? { + fatalError("Unresolved error \(error), \(error.userInfo)") + } + }) + container.viewContext.automaticallyMergesChangesFromParent = true + } +} diff --git a/Jel/Controllers/JellyfinClientController.swift b/Jel/Controllers/JellyfinClientController.swift new file mode 100644 index 0000000..343efe1 --- /dev/null +++ b/Jel/Controllers/JellyfinClientController.swift @@ -0,0 +1,30 @@ +// +// JellyfinClientController.swift +// Jel +// +// Created by zerocool on 12/12/23. +// + +import Foundation +import Get +import JellyfinKit + +class JellyfinClientController { + let api: APIClient + + init(serverUrl: URL) { + self.api = APIClient( + baseURL: serverUrl + ) + } + + func isJellyfinServer() async -> Bool { + let request = Paths.getPublicUsers + do { + try await api.send(request) + } catch { + return false + } + return true + } +} -- cgit v1.2.3