架构文档

深入了解 TimeLens 的系统架构、模块划分、数据流设计及关键技术决策。


系统概览

TimeLens 是一款基于 Tauri 2.x 构建的桌面应用,采用 Rust + React 双层架构。Rust 层负责系统级交互(窗口监控、数据库、系统托盘),React 层负责所有用户界面。

核心设计原则

Rust 后端层

lib.rs — 应用生命周期

src-tauri/src/lib.rs 是整个 Rust 层的入口,负责以下初始化流程:

  1. 初始化 env_logger 日志系统。
  2. 注册 Tauri 插件(shell、global-shortcut、notification、updater、dialog)。
  3. setup 回调中:
    • 打开/创建 SQLite 数据库
    • 将数据库连接注册为共享状态(DbState
    • 恢复上次会话的小组件窗口
    • 创建系统托盘图标和菜单
    • 启动后台监控任务(tokio)

monitor/ — 前台窗口监控

后台 tokio 任务,以固定间隔(默认 1 秒)轮询当前前台窗口信息。

平台实现方式
WindowsWin32 API(GetForegroundWindowGetWindowThreadProcessIdGetModuleBaseName
macOSAppleScript / Accessibility API

监控模块检测到窗口切换时,将旧窗口的使用时长写入数据库,并开始记录新窗口。同时通过 Tauri 事件通道向前端广播 active-window-changed 事件。

db/ — SQLite 数据层

所有数据库操作集中在 db/mod.rs,包含以下核心表:

表名用途
app_usage每条记录 = 一个应用在某日的一个使用片段(含窗口标题、活跃秒数)
app_categories应用 → 分类映射规则
usage_goals用户设置的使用目标(每日/每周、至少/至多)
focus_sessions专注模式会话记录
todos待办事项数据
widget_configs小组件窗口位置、尺寸、透明度等配置
settings应用级设置(启动项、快捷键、语言等)
browser_sessions浏览器扩展同步的网页访问记录
browser_domain_limits网页域名使用限额

commands/ — IPC 接口层

Rust command 模块按功能域拆分:

文件职责
monitor_cmd.rs监控状态查询、暂停/恢复追踪
storage_cmd.rs所有数据查询、统计计算、导入导出
widget_cmd.rs创建/打开/关闭小组件窗口
app_cmd.rs应用设置、系统通知、安装渠道检测
browser_cmd.rs浏览器扩展数据、域名统计与限额
productivity_cmd.rs生产力评分、中断时段分析
widget_permissions.rs第三方小组件权限管理

React 前端层

窗口路由

TimeLens 不是单页应用,而是多窗口应用。src/App.tsx 根据 Tauri 窗口标签决定渲染内容:

窗口标签渲染组件说明
mainMainApp主仪表盘,包含 HashRouter
clock-*WidgetWindow时钟小组件
todo-*WidgetWindow待办小组件
timer-*WidgetWindow计时器小组件
note-*WidgetWindow笔记小组件
status-*WidgetWindow状态小组件

页面结构

主应用(MainApp)使用 HashRouter,包含以下页面:

状态管理

使用 Zustand 创建了 4 个全局 store:

Store数据持久化
statsStore今日/本周/历史使用数据、监控状态否(实时从 Rust 获取)
widgetStore小组件配置列表、可见性状态Rust DB
settingsStore主题、语言、监控设置等Rust DB + localStorage 缓存
dashboardLayoutStore仪表盘卡片顺序、显隐localStorage

数据流设计

监控数据流

OS 前台窗口
    ↓ (每秒轮询)
monitor/mod.rs
    ↓ (聚合 + 写入)
SQLite (app_usage 表)
    ↓ (前端主动查询 / 事件推送)
React Frontend
    ↓ (Zustand store)
Dashboard Charts & Lists

事件流

Tauri 提供了两种前后端通信方式:

小组件系统

小组件是 TimeLens 的特色功能。每个小组件都是一个独立的 Tauri 窗口,拥有独立的 WebView 实例。

官方内置小组件

类型功能
Clock模拟/数字时钟,支持自定义格式
Todo待办列表,支持拖拽排序、完成标记
Timer多模式计时器(番茄钟 / 倒计时 / 正计时)
Note便签小组件,支持文本编辑
Status系统状态展示(当前应用、今日总时长)

第三方小组件

TimeLens 支持加载第三方 JavaScript 小组件。详细开发指南参见 小组件开发指南

国际化架构

使用 i18next + react-i18next 实现多语言支持。

安全模型

TimeLens 使用 Tauri v2 的 Capability 系统进行权限控制:


最后更新:2025-05-03 · TimeLens v1.1.0