Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持 TUI:在 termux (Android) 上也能使用 FeelUOwn #654

Open
5 tasks
cosven opened this issue Feb 18, 2023 · 2 comments
Open
5 tasks

支持 TUI:在 termux (Android) 上也能使用 FeelUOwn #654

cosven opened this issue Feb 18, 2023 · 2 comments

Comments

@cosven
Copy link
Member

cosven commented Feb 18, 2023

背景

测试发现,目前 FeelUOwn 可以良好的运行在 termux 环境,不需要修改任何代码。

video
feeluown-termux.mp4

但有一个问题是目前只能通过在命令行输入命令的方式来操控,比如 fuo search/play/resume/pause 等,但这样操作的效率很低。要提升操作效率,降低使用难度,TUI/GUI 都是一个不错的选择。

TUI or GUI

这里我觉得可以先支持 TUI,原因如下

  1. 开发维护成本更低:考虑到该项目开发者的背景,会 Python,但不一定会安卓或(前端)
  2. 安装方式更简单一点:利用 termux 现有的机制,不需要额外任何工作
  3. 其他因素:TUI 在桌面端也可以使用,反馈+迭代会更快

TUI 的实现方式

考虑到 FeelUOwn 目前的形态,实现 TUI 有两种方式,一种是 C/S 结构,一种是单体结构。单体结构则类似现在的 GUI 形态,C/S 结构则是利用它的 tcp 服务来传输数据。

单体结构的主要优势是开发成本低,使用起来通常更简单。就不详细描述了。

C/S 结构的主要优势是灵活,有更多的可能性。比如

  1. 使用者只需要启动一个 service 就能开始听歌,可以按需启动 client (TUI)。
  2. 使用者也可以把 service 部署到云上或者家里的服务器上,这样可以从任何地方连接到该服务。
  3. 其它开发者也能自己开发自己的客户端。

但也有一个现实的问题,要让这些“优势”变成现实,通常需要不少的 “折腾”,考虑到投入产出比,那愿意折腾的人又有多少呢?

emm,还是 C/S 结构吧,毕竟还年轻不是...

大致的开发计划

开发工作量主要有两部分

  • 一部分是 service 部分,之前虽然提供了一些接口,但不稳定,协议也不那么明确
    • 确定传输协议(如何传输 json。其实目前已经实现,但需要让代码更健壮。)
    • 让所有需要传输的对象都支持序列化/反序列化(其实目前也已经实现,但有很多已知问题。)
    • 提供 Python 的 SDK
  • 一部分是 client 部分,也就是 TUI 的开发
    • 确认 TUI 的基本布局(要重点考虑 termux 环境下的使用)
    • 使用 prompt-toolkit 来实现(直接在 feeluown 项目实现)

第一阶段希望达成的状态:

  1. 支持展示当前播放列表
  2. 支持播放/暂停,展示当前播放状态
  3. 支持搜索
@cosven
Copy link
Member Author

cosven commented Feb 19, 2023

TUI 库的选择

  1. rust tui-rs 优势是它提供了类似 Table/List 等 widget,不足是不支持 input/focus 处理。另外对这个库的成熟度也有点担心。最致命的是它没人维护了。(放弃吧)
  2. python prompt_toolkit 优势是支持 input,window,focus 等概念,但几乎没有 wdiget。button 很弱,也没有 table/list 等。
  3. python textual 难受的一点是要单独写 css,另外依赖库太多了。写起来最快的应该是 textual。不过它也没有现成的 table(它用 rich 实现的 table 太弱了)。

@cosven
Copy link
Member Author

cosven commented Apr 17, 2023

https://github.com/cosven/FeelUOwn/tree/tui
一个写了一半的 demo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant