mirror of
https://github.com/moku-project/Moku.git
synced 2026-06-13 01:09:56 -05:00
88 lines
3.0 KiB
TypeScript
88 lines
3.0 KiB
TypeScript
import { detectAdapter } from '$lib/platform-adapters'
|
|
import { initPlatformService } from '$lib/platform-service'
|
|
import { initRequestManager } from '$lib/request-manager'
|
|
import { appState } from '$lib/state/app.svelte'
|
|
import { configureAuth, probeServer } from '$lib/core/auth'
|
|
import { loadSettings, loadLibrary } from '$lib/core/persistence/persist'
|
|
import { loadSettingsIntoState, settingsState } from '$lib/state/settings.svelte'
|
|
import { historyState } from '$lib/state/history.svelte'
|
|
import { readerState } from '$lib/state/reader.svelte'
|
|
import { seriesState } from '$lib/state/series.svelte'
|
|
|
|
const KEY_URL = 'moku_server_url'
|
|
const KEY_AUTH = 'moku_auth_config'
|
|
|
|
interface SavedAuth {
|
|
mode: 'NONE' | 'BASIC_AUTH' | 'UI_LOGIN'
|
|
user?: string
|
|
pass?: string
|
|
}
|
|
|
|
async function boot() {
|
|
try {
|
|
const platformAdapter = detectAdapter()
|
|
initPlatformService(platformAdapter)
|
|
|
|
const { SuwayomiAdapter } = await import('$lib/server-adapters/suwayomi')
|
|
const serverAdapter = new SuwayomiAdapter()
|
|
initRequestManager(serverAdapter)
|
|
|
|
await platformAdapter.init()
|
|
|
|
appState.platform = platformAdapter.platform
|
|
appState.version = await platformAdapter.getVersion()
|
|
|
|
const [settingsData, libraryData] = await Promise.all([
|
|
loadSettings(),
|
|
loadLibrary(),
|
|
])
|
|
|
|
await loadSettingsIntoState(settingsData.settings)
|
|
|
|
seriesState.bookmarks = libraryData.bookmarks
|
|
readerState.markers = libraryData.markers
|
|
historyState.load(libraryData.sessions, libraryData.dailyReadCounts)
|
|
|
|
const savedUrl = (await platformAdapter.getCredential(KEY_URL)) ?? 'http://127.0.0.1:4567'
|
|
const savedAuthRaw = await platformAdapter.getCredential(KEY_AUTH)
|
|
const savedAuth: SavedAuth = savedAuthRaw ? JSON.parse(savedAuthRaw) : { mode: 'NONE' }
|
|
|
|
appState.serverUrl = savedUrl
|
|
appState.authMode = savedAuth.mode
|
|
|
|
configureAuth(savedUrl, savedAuth.mode, savedAuth.user, savedAuth.pass)
|
|
|
|
await serverAdapter.connect({
|
|
baseUrl: savedUrl,
|
|
credentials:
|
|
savedAuth.mode === 'BASIC_AUTH' && savedAuth.user && savedAuth.pass
|
|
? { username: savedAuth.user, password: savedAuth.pass }
|
|
: undefined,
|
|
})
|
|
|
|
const isTauri = platformAdapter.platform === 'tauri'
|
|
const autoStartServer = settingsState.settings.autoStartServer
|
|
|
|
if (isTauri && autoStartServer) {
|
|
appState.status = 'booting'
|
|
return
|
|
}
|
|
|
|
const probe = await probeServer()
|
|
|
|
if (probe === 'auth_required') { appState.status = 'auth'; return }
|
|
if (probe === 'unreachable') {
|
|
appState.error = `Could not reach server at ${savedUrl}`
|
|
appState.status = 'error'
|
|
return
|
|
}
|
|
|
|
appState.authenticated = true
|
|
appState.status = 'ready'
|
|
} catch (e) {
|
|
appState.error = String(e)
|
|
appState.status = 'error'
|
|
}
|
|
}
|
|
|
|
boot() |