mirror of
https://github.com/dream-pep/koring-launcher.git
synced 2026-09-12 05:45:18 +08:00
- 新增主进程更新服务,支持GitHub官方源与加速源兜底的检查、下载、安装全流程 - 新增独立更新日志页面,支持查看更新说明与更新全流程管理 - 实现更新状态持久化,重启应用可恢复上次未完成的下载进度 - 完善版本管理与构建元数据脚本,优化CI发布流水线 - 补充VersionCard的构建信息展示与更新页跳转逻辑 - 新增更新相关IPC接口、类型定义与全局状态管理 - 清理旧的无用配置项,升级相关依赖包
113 lines
3.9 KiB
TypeScript
113 lines
3.9 KiB
TypeScript
import { useEffect } from "react";
|
|
import { RootLayout } from "./layouts/RootLayout";
|
|
import { useRouteStore } from "./stores/routeStore";
|
|
import { useTheme } from "./hooks/useTheme";
|
|
import { useConfigStore } from "./stores/configStore";
|
|
import { syncThemeFromConfig } from "./stores/themeStore";
|
|
import { syncA11yFromConfig } from "./stores/a11yStore";
|
|
import { syncBackgroundFromConfig } from "./stores/backgroundStore";
|
|
import { useAuthStore } from "./stores/authStore";
|
|
import { useKoringAuthStore } from "./stores/koringAuthStore";
|
|
import type { AppConfig } from "./api/config";
|
|
import { Home } from "./pages/home";
|
|
import { Store } from "./pages/store";
|
|
import { Today } from "./pages/today";
|
|
import { PlayLink } from "./pages/play-link";
|
|
import { Setting } from "./pages/setting";
|
|
import { SettingLogin } from "./pages/setting/login";
|
|
import { Gallery } from "./pages/gallery";
|
|
import { TaskQueue } from "./pages/task-queue";
|
|
import { UpdatePage } from "./pages/update";
|
|
import { Debug } from "./pages/debug";
|
|
import { SplashDebug } from "./pages/debug/splash-debug";
|
|
import { DisplayDebug } from "./pages/debug/display-debug";
|
|
import { VersionCardDebug } from "./pages/debug/version-card-debug";
|
|
import { TaskDebug } from "./pages/debug/task-debug";
|
|
import { CrashDebug } from "./pages/debug/crash-debug";
|
|
import { Oobe } from "./pages/oobe";
|
|
import { OobeLanguage } from "./pages/oobe/step-language";
|
|
import { OobeAgreement } from "./pages/oobe/step-agreement";
|
|
import { OobeLogin } from "./pages/oobe/step-login";
|
|
import { OobeWelcome } from "./pages/oobe/step-welcome";
|
|
import { OobeVersion } from "./pages/oobe/step-version";
|
|
import { OobeBetaTest } from "./pages/oobe/step-beta-test";
|
|
import { OobeFinish } from "./pages/oobe/step-finish";
|
|
import { OobeLegal } from "./pages/oobe/step-legal";
|
|
import { OobeAboutInfo } from "./pages/oobe/about-info";
|
|
|
|
const pageMap = {
|
|
home: Home,
|
|
store: Store,
|
|
today: Today,
|
|
"play-link": PlayLink,
|
|
setting: Setting,
|
|
"setting/login": SettingLogin,
|
|
gallery: Gallery,
|
|
"task-queue": TaskQueue,
|
|
update: UpdatePage,
|
|
oobe: Oobe,
|
|
"oobe/language": OobeLanguage,
|
|
"oobe/agreement": OobeAgreement,
|
|
"oobe/login": OobeLogin,
|
|
"oobe/welcome": OobeWelcome,
|
|
"oobe/version": OobeVersion,
|
|
"oobe/beta-test": OobeBetaTest,
|
|
"oobe/finish": OobeFinish,
|
|
"oobe/about-info": OobeAboutInfo,
|
|
"oobe/legal": OobeLegal,
|
|
debug: Debug,
|
|
"debug-splash": SplashDebug,
|
|
"debug-display": DisplayDebug,
|
|
"debug-version-card": VersionCardDebug,
|
|
"debug-task": TaskDebug,
|
|
"debug-crash": CrashDebug,
|
|
} as const;
|
|
|
|
function App() {
|
|
useTheme();
|
|
const current = useRouteStore((s) => s.current);
|
|
const Page = pageMap[current];
|
|
|
|
useEffect(() => {
|
|
// Listen for preloaded config from main process
|
|
const unsub = window.electronAPI?.onConfigPreload((data) => {
|
|
const { config, isFirstLaunch } = data;
|
|
const cfg = config as AppConfig;
|
|
useConfigStore.getState().applyPreloaded(cfg, isFirstLaunch);
|
|
// 语言偏好 → <html lang>
|
|
document.documentElement.lang = (cfg as AppConfig).app?.language ?? "zh-CN";
|
|
syncThemeFromConfig();
|
|
syncA11yFromConfig();
|
|
syncBackgroundFromConfig();
|
|
useAuthStore.getState().initFromRegistry();
|
|
useKoringAuthStore.getState().initFromDisk();
|
|
// Navigate to OOBE on first launch or if oobe not completed
|
|
if (isFirstLaunch || cfg.oobe) {
|
|
useRouteStore.getState().navigate("oobe");
|
|
}
|
|
});
|
|
|
|
return () => { unsub?.(); };
|
|
}, []);
|
|
|
|
// 主进程权威配置广播 → 覆盖本地镜像并同步派生 store
|
|
useEffect(() => {
|
|
const unsub = window.electronAPI?.onConfigChanged((config) => {
|
|
useConfigStore.getState().applyChanged(config as AppConfig);
|
|
syncThemeFromConfig();
|
|
syncA11yFromConfig();
|
|
syncBackgroundFromConfig();
|
|
});
|
|
|
|
return () => { unsub?.(); };
|
|
}, []);
|
|
|
|
return (
|
|
<RootLayout>
|
|
<Page key={current} />
|
|
</RootLayout>
|
|
);
|
|
}
|
|
|
|
export default App;
|