some marks on sessionmanager
This commit is contained in:
parent
45a93b9de5
commit
4e2af9ec7f
|
@ -20,12 +20,16 @@ typealias CurrentLogin = (server: SwiftfinStore.State.Server, user: SwiftfinStor
|
||||||
// MARK: NewSessionManager
|
// MARK: NewSessionManager
|
||||||
final class SessionManager {
|
final class SessionManager {
|
||||||
|
|
||||||
|
|
||||||
// MARK: currentLogin
|
// MARK: currentLogin
|
||||||
|
|
||||||
private(set) var currentLogin: CurrentLogin!
|
private(set) var currentLogin: CurrentLogin!
|
||||||
|
|
||||||
// MARK: main
|
// MARK: main
|
||||||
|
|
||||||
static let main = SessionManager()
|
static let main = SessionManager()
|
||||||
|
|
||||||
|
// MARK: init
|
||||||
private init() {
|
private init() {
|
||||||
if let lastUserID = SwiftfinStore.Defaults.suite[.lastServerUserID],
|
if let lastUserID = SwiftfinStore.Defaults.suite[.lastServerUserID],
|
||||||
let user = try? SwiftfinStore.dataStack.fetchOne(From<SwiftfinStore.Models.StoredUser>(),
|
let user = try? SwiftfinStore.dataStack.fetchOne(From<SwiftfinStore.Models.StoredUser>(),
|
||||||
|
@ -40,11 +44,13 @@ final class SessionManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: fetchServers
|
||||||
func fetchServers() -> [SwiftfinStore.State.Server] {
|
func fetchServers() -> [SwiftfinStore.State.Server] {
|
||||||
let servers = try! SwiftfinStore.dataStack.fetchAll(From<SwiftfinStore.Models.StoredServer>())
|
let servers = try! SwiftfinStore.dataStack.fetchAll(From<SwiftfinStore.Models.StoredServer>())
|
||||||
return servers.map({ $0.state })
|
return servers.map({ $0.state })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: fetchUsers
|
||||||
func fetchUsers(for server: SwiftfinStore.State.Server) -> [SwiftfinStore.State.User] {
|
func fetchUsers(for server: SwiftfinStore.State.Server) -> [SwiftfinStore.State.User] {
|
||||||
guard let storedServer = try? SwiftfinStore.dataStack.fetchOne(From<SwiftfinStore.Models.StoredServer>(),
|
guard let storedServer = try? SwiftfinStore.dataStack.fetchOne(From<SwiftfinStore.Models.StoredServer>(),
|
||||||
Where<SwiftfinStore.Models.StoredServer>("id == %@", server.id))
|
Where<SwiftfinStore.Models.StoredServer>("id == %@", server.id))
|
||||||
|
@ -52,6 +58,7 @@ final class SessionManager {
|
||||||
return storedServer.users.map({ $0.state }).sorted(by: { $0.username < $1.username })
|
return storedServer.users.map({ $0.state }).sorted(by: { $0.username < $1.username })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: connectToServer publisher
|
||||||
// Connects to a server at the given uri, storing if successful
|
// Connects to a server at the given uri, storing if successful
|
||||||
func connectToServer(with uri: String) -> AnyPublisher<SwiftfinStore.State.Server, Error> {
|
func connectToServer(with uri: String) -> AnyPublisher<SwiftfinStore.State.Server, Error> {
|
||||||
var uriComponents = URLComponents(string: uri) ?? URLComponents()
|
var uriComponents = URLComponents(string: uri) ?? URLComponents()
|
||||||
|
@ -104,6 +111,7 @@ final class SessionManager {
|
||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: addURIToServer publisher
|
||||||
func addURIToServer(server: SwiftfinStore.State.Server, uri: String) -> AnyPublisher<SwiftfinStore.State.Server, Error> {
|
func addURIToServer(server: SwiftfinStore.State.Server, uri: String) -> AnyPublisher<SwiftfinStore.State.Server, Error> {
|
||||||
return Just(server)
|
return Just(server)
|
||||||
.tryMap { server -> (SwiftfinStore.Models.StoredServer, UnsafeDataTransaction) in
|
.tryMap { server -> (SwiftfinStore.Models.StoredServer, UnsafeDataTransaction) in
|
||||||
|
@ -129,6 +137,7 @@ final class SessionManager {
|
||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: setServerCurrentURI publisher
|
||||||
func setServerCurrentURI(server: SwiftfinStore.State.Server, uri: String) -> AnyPublisher<SwiftfinStore.State.Server, Error> {
|
func setServerCurrentURI(server: SwiftfinStore.State.Server, uri: String) -> AnyPublisher<SwiftfinStore.State.Server, Error> {
|
||||||
return Just(server)
|
return Just(server)
|
||||||
.tryMap { server -> (SwiftfinStore.Models.StoredServer, UnsafeDataTransaction) in
|
.tryMap { server -> (SwiftfinStore.Models.StoredServer, UnsafeDataTransaction) in
|
||||||
|
@ -158,6 +167,7 @@ final class SessionManager {
|
||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: loginUser publisher
|
||||||
// Logs in a user with an associated server, storing if successful
|
// Logs in a user with an associated server, storing if successful
|
||||||
func loginUser(server: SwiftfinStore.State.Server, username: String, password: String) -> AnyPublisher<SwiftfinStore.State.User, Error> {
|
func loginUser(server: SwiftfinStore.State.Server, username: String, password: String) -> AnyPublisher<SwiftfinStore.State.User, Error> {
|
||||||
setAuthHeader(with: "")
|
setAuthHeader(with: "")
|
||||||
|
@ -174,7 +184,7 @@ final class SessionManager {
|
||||||
|
|
||||||
guard let username = response.user?.name,
|
guard let username = response.user?.name,
|
||||||
let id = response.user?.id else { throw JellyfinAPIError("Missing user data from network call") }
|
let id = response.user?.id else { throw JellyfinAPIError("Missing user data from network call") }
|
||||||
|
|
||||||
newUser.username = username
|
newUser.username = username
|
||||||
newUser.id = id
|
newUser.id = id
|
||||||
newUser.appleTVID = ""
|
newUser.appleTVID = ""
|
||||||
|
@ -217,6 +227,7 @@ final class SessionManager {
|
||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: loginUser
|
||||||
func loginUser(server: SwiftfinStore.State.Server, user: SwiftfinStore.State.User) {
|
func loginUser(server: SwiftfinStore.State.Server, user: SwiftfinStore.State.User) {
|
||||||
JellyfinAPI.basePath = server.currentURI
|
JellyfinAPI.basePath = server.currentURI
|
||||||
SwiftfinStore.Defaults.suite[.lastServerUserID] = user.id
|
SwiftfinStore.Defaults.suite[.lastServerUserID] = user.id
|
||||||
|
@ -225,6 +236,7 @@ final class SessionManager {
|
||||||
SwiftfinNotificationCenter.main.post(name: SwiftfinNotificationCenter.Keys.didSignIn, object: nil)
|
SwiftfinNotificationCenter.main.post(name: SwiftfinNotificationCenter.Keys.didSignIn, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: logout
|
||||||
func logout() {
|
func logout() {
|
||||||
currentLogin = nil
|
currentLogin = nil
|
||||||
JellyfinAPI.basePath = ""
|
JellyfinAPI.basePath = ""
|
||||||
|
@ -233,6 +245,7 @@ final class SessionManager {
|
||||||
SwiftfinNotificationCenter.main.post(name: SwiftfinNotificationCenter.Keys.didSignOut, object: nil)
|
SwiftfinNotificationCenter.main.post(name: SwiftfinNotificationCenter.Keys.didSignOut, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: purge
|
||||||
func purge() {
|
func purge() {
|
||||||
// Delete all servers
|
// Delete all servers
|
||||||
let servers = fetchServers()
|
let servers = fetchServers()
|
||||||
|
@ -247,12 +260,14 @@ final class SessionManager {
|
||||||
SwiftfinNotificationCenter.main.post(name: SwiftfinNotificationCenter.Keys.didPurge, object: nil)
|
SwiftfinNotificationCenter.main.post(name: SwiftfinNotificationCenter.Keys.didPurge, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: delete user
|
||||||
func delete(user: SwiftfinStore.State.User) {
|
func delete(user: SwiftfinStore.State.User) {
|
||||||
guard let storedUser = try? SwiftfinStore.dataStack.fetchOne(From<SwiftfinStore.Models.StoredUser>(),
|
guard let storedUser = try? SwiftfinStore.dataStack.fetchOne(From<SwiftfinStore.Models.StoredUser>(),
|
||||||
[Where<SwiftfinStore.Models.StoredUser>("id == %@", user.id)]) else { fatalError("No stored user for state user?")}
|
[Where<SwiftfinStore.Models.StoredUser>("id == %@", user.id)]) else { fatalError("No stored user for state user?")}
|
||||||
_delete(user: storedUser, transaction: nil)
|
_delete(user: storedUser, transaction: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: delete server
|
||||||
func delete(server: SwiftfinStore.State.Server) {
|
func delete(server: SwiftfinStore.State.Server) {
|
||||||
guard let storedServer = try? SwiftfinStore.dataStack.fetchOne(From<SwiftfinStore.Models.StoredServer>(),
|
guard let storedServer = try? SwiftfinStore.dataStack.fetchOne(From<SwiftfinStore.Models.StoredServer>(),
|
||||||
[Where<SwiftfinStore.Models.StoredServer>("id == %@", server.id)]) else { fatalError("No stored server for state server?")}
|
[Where<SwiftfinStore.Models.StoredServer>("id == %@", server.id)]) else { fatalError("No stored server for state server?")}
|
||||||
|
|
Loading…
Reference in New Issue