Skip to content

Feature Request: 使用 Rust Tauri重构系统托盘并实现双托盘合并 #352

@Yundi339

Description

@Yundi339

描述

当前 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 托盘加载”的设计,是为了平衡 架构的先进性、开发效率,以及 用户体验:

  1. 消除 IPC 复杂性:通过将 sunshine-gui 作为库(.a)直接被 sunshine.exe 加载,可以避免复杂的进程间通信(IPC)机制,提高性能和数据同步的可靠性。
  2. 模块化:sunshine.exe 专注于服务和托盘管理,sunshine-gui.a 专注于界面。这种分离提高了代码的可维护性和可测试性。
  3. 稳健的迁移策略:保留 sunshine-gui.exe 文件,旨在确保与其他非基地版的 sunshine.exe 兼容,即使新架构在某些情况下出现问题,用户仍然可以使用旧的独立 EXE,使重构过程风险可控。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions