Files
qemby/ai/qml-migration-status.md
T
dela 2ee3a234a6 feat: complete QML shell migration and ship 0.0.8 Arch package
Replace the Widgets main shell with AppShellHost + QML routes, add a QML
independent player window, and remove the legacy player/page Widgets stack.
Also wire settings cache/proxy actions, fix quit-time engine teardown, improve
list/home scroll performance, and update Arch packaging to 0.0.8.
2026-07-27 16:41:18 +08:00

74 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# qEmby QML 迁移状态
更新时间:2026-07-27(设置缺口补全)
## 结论
**唯一外壳 = 全 QML**(`AppShellHost` + `AppShell.qml`)。
Widgets 页面壳与播放器栈已删除。
**独立播放窗 = 第二个 QML `ApplicationWindow`**(`IndependentPlayerHost` + `IndependentPlayerWindow.qml`)。
保留 `QApplication`:托盘、文件对话框、业务 Widget 对话框(弹幕设置/识别、字幕设置、库/用户管理等)仍需要。
## 播放路径
| 模式 | 实现 |
|---|---|
| 壳内嵌入 | `PlayerRouteController` → 路由 `player` → `PlayerPage` |
| 独立窗口 | `IndependentPlayerHost` → 二级引擎 → `IndependentPlayerWindow` |
| 外部播放器 | `PlaybackManager` + `ExternalPlayerIPC` |
## 已删除(播放器栈 + 无引用 Widgets)
**播放器:** `PlayerWindow` `PlayerView` `NativeDanmakuOverlay` `MpvWidget` 及 OSD/切集/统计/长按/seek bubble 等。
**孤儿 UI(约 35 组,无 live `#include` 路径):**
`MediaGridWidget` `Horizontal*Gallery` `MediaCardDelegate` `MediaListModel`
`Detail*Widget` `AdminUserCard` `CollectionCard/Grid`
`SearchHistoryPopup`(Widgets 版,QML 已有)`ServerWheelView`
`DashboardSectionOrderWidget/Strip` `DanmakuServerDialog*`
`LibraryActionMenu` `TranscodingCodecList*`
`SettingsCard/SubPanel`(Widgets 版)`ThemeTransitionWidget` `ShadowOverlay`
`ShimmerWidget` `ModernScrollPanel` `ModernSortButton` `ModernNumberInput` 等。
## 仍保留的 Widgets
| 角色 | 代表 |
|---|---|
| 播放对话框 | `PlayerDanmaku*Dialog` `PlayerSubtitleSettingsDialog` `PlayerOverlayDialog` |
| 管理/库 | `LibraryCreate/EditDlg` `UserEditDialog` `TaskEditDialog` `*Codec*Dialog` |
| 媒体操作 | `MediaActionMenu` `MediaIdentify/ImageEditDialog` `AddToPlaylistDialog` |
| 通用 | `ModernDialogBase` `ModernToast` `ModernMessageBox` `ProxySettingsDialog` `WebDav*` |
| 播放核心 | `MpvController` `PlayerDanmakuController` |
## 启动
```bash
cmake --build cmake-build-debug --target qEmbyApp -j$(nproc)
./cmake-build-debug/bin/qEmbyApp
```
## 本轮设置补全
| 功能 | 位置 |
|---|---|
| 主页区块自定义排序(↑↓ + 重置) | `SettingsLibraryPage` + `SettingsViewModel::{customHomeSectionOrderEnabled,homeSectionOrder,moveHomeSection}` |
| 弹幕 API 服务器管理(选/启停/增删改) | `SettingsPlayerPage` + `DanmakuSettings` 桥接 |
| 缺失弹幕属性 | `danmakuSourceMode` / `AutoLoad` / `AutoMatch` / `WithRelated` / `CacheHours` |
| 库开关按服务器作用域 | `showContinueWatching` 等写入 `server/<id>/library/...`(与 Dashboard 一致,兼容读全局旧值) |
## 本轮优化(2026-07-27)
| 项 | 说明 |
|---|---|
| 设置缓存清理 | `clearRecommendCache` / `clearImageCache` 已接线 + toast |
| 代理设置 | 设置-通用「配置…」打开 `ProxySettingsDialog` |
| 列表性能 | MediaCard DPR sourceSize、滑动关 smooth/mipmap;Grid/Section 减小 cacheBuffer |
| 首页 | 区块 Loader 异步;reduceMotion 跳过入场动画 |
| 路由 | reduceMotion / 播放器页瞬时切页,少缩放动画 |
## 后续可选
- 播放器内弹幕设置 / 识别 / 字幕对话框 QML 化
- 主页排序改为拖拽(当前为上下按钮,足够用)