mirror of
https://github.com/dream-pep/koring-launcher.git
synced 2026-09-12 05:45:18 +08:00
feat: 发布 v1.2.0 版本,新增多项核心功能
- 引入 electron-updater 实现自动更新功能 - 新增 Java 环境扫描与校验的 IPC 处理逻辑 - 实现离线账号登录功能 - 新增配置变更跨进程广播机制 - 重构游戏启动逻辑,使用主进程内存配置作为唯一权威来源 - 新增界面显示与语言设置的配置页面 - 添加 Windows 平台自动发布 CI 流水线 - 迁移旧版配置/认证文件到用户数据目录 - 修复崩溃日志路径、表单控件等多项 bug - 重构设置页组件系统统一界面样式
This commit is contained in:
@@ -34,6 +34,11 @@ build/ Build resources (generated, gitignored)
|
||||
**IPC Flow:**
|
||||
Frontend → `ipcRenderer.invoke()` → `ipcMain.handle()` → main process → `webContents.send()` → Frontend
|
||||
|
||||
**Config storage (main-process authoritative):**
|
||||
- `Koring.yml` — 打包后存 `app.getPath('userData')`(`%APPDATA%/Koring Launcher/`),开发模式在项目根目录;旧版 exe 旁文件首次启动自动迁移
|
||||
- 主进程内存缓存为唯一权威:渲染进程通过 `config:update` 提交补丁,主进程深度合并 → 300ms debounce 稀疏写盘 → 广播 `config:changed` 同步渲染端镜像
|
||||
- `koring-auth.json` / `koring-crash.log` 与配置同策略(打包后 userData)
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
@@ -64,19 +69,21 @@ src/
|
||||
electron/
|
||||
├── main.ts # Electron entry, window management, splash→main transition
|
||||
├── preload.ts # Context bridge (window.electronAPI)
|
||||
├── config.ts # YAML config management
|
||||
├── config.ts # YAML config management (main-process authoritative, debounce sparse save)
|
||||
├── auth.ts # Auth data persistence
|
||||
├── core/ # @xmcl/* integrations
|
||||
│ ├── auth.ts # Microsoft OAuth, Xbox Live, MC auth
|
||||
│ ├── installer.ts # @xmcl/installer
|
||||
│ ├── launcher.ts # @xmcl/core game launcher
|
||||
│ ├── launcher.ts # Unified game launcher (@xmcl/core launch + config-driven)
|
||||
│ ├── launch-options.ts # Config → LaunchOption mapping (parseArgs/buildLaunchOptions/resolveJavaPath)
|
||||
│ ├── modrinth.ts # Modrinth/CurseForge API
|
||||
│ └── instance.ts # Instance management
|
||||
├── handlers/ # IPC handlers
|
||||
│ ├── config.ts # Config load/save
|
||||
│ ├── config.ts # Config load/save/update (config:get/update/save + config:changed broadcast)
|
||||
│ ├── auth.ts # Auth operations
|
||||
│ ├── install.ts # Install operations
|
||||
│ ├── launch.ts # Game launch
|
||||
│ ├── launch.ts # Unified game launch (launch:launch / launch:diagnose + afterLaunch)
|
||||
│ ├── java.ts # Java detection (java:scan / java:resolve)
|
||||
│ ├── mods.ts # Mod operations
|
||||
│ ├── instance.ts # Instance operations
|
||||
│ ├── background.ts # Background operations
|
||||
@@ -146,12 +153,13 @@ import { APP_ICON, DEFAULT_BG, LOGO_SVG, BUILD_MODE, isDev } from "@/lib/mode";
|
||||
|
||||
## IPC Handlers
|
||||
|
||||
- `config:*` — Config load/save
|
||||
- `config:get` / `config:update` / `config:save` / `config:changed` — 配置读写(主进程权威:update 深度合并 + debounce 稀疏写盘 + 广播)
|
||||
- `auth:*` — Microsoft OAuth, offline login
|
||||
- `install:*` — Minecraft install, mod loader, version lists
|
||||
- `launch:*` — Game launch, diagnose
|
||||
- `launch:launch` / `launch:diagnose` — 统一游戏启动:主进程读取权威配置自动应用 Java/内存/GC/JVM/游戏参数/窗口/启动前命令,事件经 `launch:event` 推送,window-ready 时按 `afterLaunch` 处理启动器窗口
|
||||
- `java:scan` / `java:resolve` — Java 环境检测 / 路径校验
|
||||
- `mods:*` — Modrinth/CurseForge search, install
|
||||
- `instance:*` — Instance CRUD
|
||||
- `instance:*` — Instance CRUD(安装/导入/诊断;启动统一走 `launch:launch`)
|
||||
- `background:*` — Background image/color/blur/animation/theme
|
||||
- `task:*` — Task system progress
|
||||
- `system:*` — System info
|
||||
@@ -166,8 +174,14 @@ import { APP_ICON, DEFAULT_BG, LOGO_SVG, BUILD_MODE, isDev } from "@/lib/mode";
|
||||
- **Transparent windows**: `transparent: true` + `frame: false` in BrowserWindow options.
|
||||
- **Mutable win ref**: `electron/main.ts` uses a mutable `win` object — all handlers read `win.mainWindow` at runtime (not captured at registration time).
|
||||
- **Asset paths**: Use `import.meta.env.BASE_URL` prefix for public assets (e.g., `${import.meta.env.BASE_URL}background.png`). Absolute paths like `/background.png` break in packaged app.
|
||||
- **Config**: YAML format (`Koring.yml`) stored next to executable. Sparse save (only non-default values).
|
||||
- **Auth**: JSON file (`koring-auth.json`) stored next to executable.
|
||||
- **Config**: YAML format (`Koring.yml`). 打包后存 `app.getPath('userData')`(开发模式在项目根目录);主进程内存缓存为唯一权威,渲染进程经 `config:update` 提交、`config:changed` 同步,不在渲染端直接写盘。Sparse save(只写非默认值)。
|
||||
- **Auth**: JSON file (`koring-auth.json`),打包后存 userData(与配置同策略)。
|
||||
- **Launch is config-driven**: `launch:launch` 由主进程读取权威配置映射为 `@xmcl/core` 的 `LaunchOption`(`buildLaunchOptions`),前端只传实例名 + 游戏根目录 + 账户档案。
|
||||
- **HeroUI 3 基于 react-aria**:Switch / RadioGroup 等使用 `onChange`(不是 `onValueChange`),`onValueChange` 在 HeroUI 3 中不存在且静默失效。
|
||||
- **设置子页面统一原语**:`src/components/setting/`(SettingCard/SettingRow/SettingBadge/SettingListItem/controls.tsx + `fieldCls`),一套样式组合;Radio 必须显式渲染 `<Radio.Control><Radio.Indicator /></Radio.Control>` 才有圆点;HeroUI field 默认边框宽度为 0,输入框需叠加 `fieldCls`。
|
||||
- **游戏目录导入**:版本从**当前扫描目录**导入(`sourceGamePath`),实例建在主库;主目录变更自动重扫;批量导入幂等(已存在跳过);相对 `gameDir`(默认 `.minecraft`)由主进程 `resolveGamePath` 按 exe 目录/项目根归一化。
|
||||
- **设置页结构(参考 PCL2)**:通用(主页/Koring 账户/关于/版权)与其他(服务与反馈/赞助/开发者)保留;游戏组(账户·离线登录、Java、目录、高级·含快速进入服务器)、个性化组(主题背景/主界面/语言/辅助)、网络组(下载/安全识别)已对接设置接口;以太/陶瓦联机页暂为占位。新增配置段:`app.language`(语言偏好)、`ui.showInstanceTitle/showTaskButton`(主界面元素)、`advanced.server`(快速进入服务器,启动自动加入)。
|
||||
- **离线账号登录**:`auth:offline-login` 处理器生成离线 UUID(MD5(OfflinePlayer:用户名));微软登录 UI 标注"开发中"。
|
||||
|
||||
## Tech Stack
|
||||
|
||||
|
||||
Reference in New Issue
Block a user