HuggingChat-Mac/Models/HuggingChatSession.swift (59 lines of code) (raw):
//
// HuggingChatSession.swift
// HuggingChat-Mac
//
// Created by Cyril Zakka on 8/23/24.
//
import SwiftUI
import Combine
import Foundation
import WebKit
import SafariServices
import AuthenticationServices
@Observable class HuggingChatSession {
static let shared: HuggingChatSession = HuggingChatSession()
var clientID: String?
var token: String?
var conversations: [Conversation] = []
var availableLLM: [LLMModel] = []
var currentConversation: String?
var currentUser: HuggingChatUser?
private var cancellables: [AnyCancellable] = []
init() {
let cookies = HTTPCookieStorage.shared.cookies!
for cookie in cookies {
print("\(cookie.name): \(cookie.value)")
}
}
func refreshLoginState() {
NetworkService.getCurrentUser()
.receive(on: DispatchQueue.main)
.sink { [weak self] completion in
switch completion {
case .failure(let error):
print(error.localizedDescription)
self?.currentUser = nil
case .finished: break
}
} receiveValue: { [weak self] user in
self?.currentUser = user
}.store(in: &cancellables)
}
var hfChatToken: String? {
guard let token = HTTPCookieStorage.shared.cookies?.first(where: { $0.name == "hf-chat" })?.value else {
return nil
}
return token
}
func logout() {
let cookieStore = HTTPCookieStorage.shared.cookies
for cookie in cookieStore ?? [] {
let backgroundQueue = DispatchQueue(label: "background_queue",
qos: .background)
backgroundQueue.async {
HTTPCookieStorage.shared.deleteCookie(cookie)
}
}
DispatchQueue.main.async { [weak self] in
self?.currentUser = nil
self?.currentConversation = ""
DataService.shared.resetLocalModels()
UserDefaults.standard.setValue(false, forKey: "userLoggedIn")
UserDefaults.standard.setValue(false, forKey: "onboardingDone")
}
}
}