forked from LizardByte/Sunshine
-
-
Notifications
You must be signed in to change notification settings - Fork 86
Open
Description
描述
当前 sunshine.exe 和 sunshine-gui.exe 两个独立进程都需要各自的系统托盘图标和菜单来提供用户控制,这种双托盘的设计对于用户来说比较抽象且容易造成混淆。
鉴于:
- sunshine-control-panel 已成功迁移到 Rust Tauri。
- 我们正在规划使用 Rust Tauri 重构 sunshine.exe 的系统托盘功能,以解决其原生库老旧的问题。
我们计划利用 Rust Tauri 框架强大的跨进程通信和统一前端能力,最终目标是实现双托盘合并,只在系统托盘显示一个图标来代表整个 Sunshine 应用套件。
托盘重构的必要性说明
托盘作为 Sunshine 生态中不可或缺的一部分,其在业务场景中的开发度较低,功能迭代受限于老旧的托盘库。作为一个经常使用 Sunshine 的用户而非开发者,我认为当前托盘的交互体验有较大的优化空间。鉴于 sunshine-gui.exe 已成功迁移到 Rust Tauri,尽管更换架构(迁移至 Rust Tauri)是比较激进的做法,但考虑到其对用户体验的巨大提升和相对较低的风险,我们认为现在是推进这项重构的绝佳时机。
| 目标 | 好处 |
|---|---|
| 现代化托盘界面 | 使用 Tauri 提供的现代前端技术,设计出更丰富、功能更强大的托盘菜单。 |
| 消除双托盘混淆 | 核心目标:将 sunshine.exe 和 sunshine-gui.exe 的控制功能集成到一个统一的 Tauri 托盘图标中,简化用户界面。 |
| 统一用户体验 | 与已使用 Tauri 的 sunshine-control-panel 保持一致,提供统一的界面和交互逻辑。 |
| 解决原生库限制 | 绕过旧原生托盘库的限制,更容易添加新功能和管理多进程状态。 |
当前实施计划
我们正在准备将 sunshine-gui.exe 的核心功能重构为可被 sunshine.exe 链接和加载的库 sunshine-gui.a。
这种“将 GUI 库化并由 Tauri 托盘加载”的设计,是为了平衡 架构的先进性、开发效率,以及 用户体验:
- 消除 IPC 复杂性:通过将 sunshine-gui 作为库(.a)直接被 sunshine.exe 加载,可以避免复杂的进程间通信(IPC)机制,提高性能和数据同步的可靠性。
- 模块化:sunshine.exe 专注于服务和托盘管理,sunshine-gui.a 专注于界面。这种分离提高了代码的可维护性和可测试性。
- 稳健的迁移策略:保留 sunshine-gui.exe 文件,旨在确保与其他非基地版的 sunshine.exe 兼容,即使新架构在某些情况下出现问题,用户仍然可以使用旧的独立 EXE,使重构过程风险可控。
Metadata
Metadata
Assignees
Labels
No labels