文章

toona introduction

toona introduction

Toona 是一个基于 Matrix 协议和 Makepad UI 框架构建的任务协作管理平台,灵感来源于 Trello 的看板模式。作为 Robrix 项目基础上的延伸,Toona 将即时通讯与任务管理完美融合,让团队协作更加高效。

核心特性

  • 看板视图: 类似 Trello 的拖拽式看板界面,轻松管理任务状态
  • Matrix 集成: 基于 Matrix 协议,支持端到端加密的团队沟通
  • 实时协作: 多端同步,团队成员可以实时查看和更新任务
  • 跨平台支持: 支持 macOS、Windows、Linux、Android、iOS
  • 纯 Rust 实现: 利用 Makepad 和 Robius 框架,确保高性能和安全性

技术栈

  • 语言: Rust 2024 edition
  • UI 框架: Makepad
  • 应用框架: Robius
  • 协议: Matrix (原生 Sliding Sync)
  • 异步运行时: Tokio

平台支持

目标平台主机系统编译运行
macOSmacOS
LinuxLinux
WindowsWindows
Android任意
iOSmacOS

快速开始

环境准备

  1. 安装 Rust

  2. Linux/WSL 系统额外依赖:

    1
    2
    
    sudo apt-get update
    sudo apt-get install libssl-dev libsqlite3-dev pkg-config binfmt-support libxcursor-dev libx11-dev libasound2-dev libpulse-dev libwayland-dev libxkbcommon-dev
    

构建与运行

1
2
3
4
5
6
7
8
# Debug 构建并运行
cargo run

# Release 构建
cargo run --release

# TSP 功能支持
cargo run --features tsp

移动端构建

需要安装 cargo-makepad 工具:

1
cargo install --force --git https://github.com/makepad/makepad.git --branch dev cargo-makepad

Android:

1
2
cargo makepad android install-toolchain
cargo makepad android run -p toona --release

iOS:

1
2
3
rustup toolchain install nightly
cargo makepad apple ios install-toolchain
cargo makepad apple ios --org=<你的组织标识> --app=toona run-sim -p toona --release

功能特性

任务管理

  • 看板视图与列表切换
  • 拖拽式任务卡片
  • 任务详情查看与编辑
  • 任务状态管理(待办/进行中/完成)
  • 看板列表视图

即时通讯

  • Matrix 聊天室接入
  • 消息收发(文本、图片)
  • 消息回复与引用
  • 消息reaction
  • 消息编辑
  • 端到端加密验证
  • 链接预览

辅助功能

  • 用户登录认证
  • 会话持久化
  • 头像缓存
  • 媒体文件缓存
  • 空间(Space)视图
  • 房间邀请处理
  • 离线模式支持

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
src/
├── lib.rs                   # 库入口
├── main.rs                  # 程序入口
├── app.rs                   # 应用状态管理
├── utils.rs                 # 工具函数
├── sliding_sync.rs          # Matrix Sliding Sync
├── space_service_sync.rs    # Space 服务同步
├── avatar_cache.rs          # 头像缓存
├── media_cache.rs           # 媒体缓存
├── location.rs              # 位置功能
├── event_preview.rs         # 事件预览
├── temp_storage.rs          # 临时存储
├── verification.rs          # E2EE 验证
├── verification_modal.rs    # 验证弹窗
├── join_leave_room_modal.rs # 加入/离开房间弹窗
│
├── home/                    # 主界面模块
│   ├── home_screen.rs       # 主屏幕
│   ├── kanban_list_view.rs  # 看板列表
│   ├── kanban_card.rs       # 任务卡片
│   ├── kanban_card_detail.rs # 卡片详情
│   ├── room_screen.rs       # 聊天室
│   ├── rooms_list.rs        # 房间列表
│   ├── rooms_sidebar.rs     # 侧边栏
│   ├── spaces_bar.rs        # Space 导航
│   ├── ...                  # 其他 UI 组件
│
├── kanban/                  # 看板功能模块
│   ├── api/                 # API 集成
│   ├── data/                # 数据模型
│   ├── drag_drop/           # 拖拽逻辑
│   └── state/               # 状态管理
│
├── room/                    # 房间模块
├── login/                   # 登录模块
├── settings/                # 设置模块
├── profile/                 # 用户资料
├── shared/                  # 共享组件
├── persistence/             # 持久化存储
│
├── tsp/                     # TSP 钱包集成
└── tsp_dummy/               # TSP 占位模块

技术亮点

  • 原生 Sliding Sync: 与 Element X 等现代客户端保持一致
  • Makepad UI: 声明式 DSL 构建现代化界面
  • Robius 框架: 跨平台应用开发的最佳实践
  • Tokio 异步: 高性能异步处理
  • Matrix SDK: 完整的 Matrix 协议支持

已知问题

  • Matrix 链接 (https://matrix.to/...) 在应用内尚未完全处理
  • 忽略/取消忽略用户会清空所有时间线
  • Linux 平台的拖拽功能受限于 Makepad 实现

打包分发

1
2
3
4
5
6
7
8
# 安装 cargo-packager (需要 Rust 1.79+)
cargo +stable install --force cargo-packager

# 打包
cargo packager --release

# Windows 控制台隐藏
RUSTFLAGS="--cfg hide_windows_console" cargo packager --release

致谢

  • 感谢 Robrix 项目提供坚实的基础
  • 感谢 Makepad 团队带来优秀的 UI 框架
  • 感谢 Robius 框架的跨平台支持
  • 感谢 Matrix 社区的开放协议

许可证

MIT License

本文由作者按照 CC BY 4.0 进行授权