Skip to content

Commit 321f081

Browse files
committed
log endpoint
1 parent ddab26d commit 321f081

2 files changed

Lines changed: 123 additions & 2 deletions

File tree

QWEN.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# MessAuto - macOS 验证码自动提取工具
2+
3+
## 项目概述
4+
5+
MessAuto 是一款专为 macOS 平台设计的轻量级工具,旨在自动从短信 (iMessage) 和电子邮件 (Mail.app) 中提取验证码,并根据用户配置自动将验证码粘贴到活动输入框或显示一个悬浮窗。该工具使用 Rust 编写,具有低资源占用和后台常驻运行的特点。
6+
7+
### 主要技术栈
8+
9+
* **语言**: Rust
10+
* **构建工具**: Cargo
11+
* **核心依赖**:
12+
* `tray-icon`: 用于创建和管理菜单栏托盘图标。
13+
* `winit`: 用于处理窗口系统交互。
14+
* `tokio`: 异步运行时,用于处理文件监控和并发任务。
15+
* `notify`: 用于监控文件系统变化(监听邮件和消息数据库)。
16+
* `regex`: 用于匹配和提取验证码。
17+
* `emlx`: 解析 `.emlx` 格式的邮件文件。
18+
* `serde`, `toml`: 用于配置文件的序列化和反序列化。
19+
* `dirs`: 获取系统标准目录路径(配置、日志)。
20+
* `enigo`: 模拟键盘输入(粘贴验证码)。
21+
* `rust-i18n`: 提供多语言支持。
22+
23+
### 核心架构
24+
25+
MessAuto 的核心架构基于一个 `MonitorActor`,它负责监听短信和邮件的变化。主程序 (`main.rs`) 在启动时会初始化这个 Actor,并通过一个 `mpsc::channel` 与之通信。托盘菜单 (`tray.rs`) 也持有这个 channel 的发送端 (`Sender<MonitorCommand>`),当用户通过菜单开启或关闭短信/邮件监听时,会向 Actor 发送相应的命令 (`StartMessageMonitoring`, `StopMessageMonitoring`, `StartEmailMonitoring`, `StopEmailMonitoring`)。
26+
27+
验证码的提取和处理流程如下:
28+
29+
1. **监听**: `MonitorActor` 启动后,会根据配置文件 (`config.toml`) 中的 `listen_message``listen_email` 选项,向自身发送初始的启动命令。
30+
2. **文件监控**: `MonitorActor` 内部为短信和邮件分别维护一个 `FileWatcher`。当接收到启动命令时,对应的 `FileWatcher` 会开始监控目标目录或文件。
31+
* **短信**: 监控 `~/Library/Messages/NickNameCache/``.db` 文件的元数据变化。这实际上是一个触发器,表明 `chat.db` 可能已更新。然后程序会直接查询 `~/Library/Messages/chat.db` SQLite 数据库,获取最新的未处理消息。
32+
* **邮件**: 监控 `~/Library/Mail/V10/` 及其子目录下的 `.emlx` 文件的创建事件。
33+
3. **处理**:
34+
* **短信**: 当检测到 `NickNameCache` 变化时,程序会查询 `chat.db`,找出所有 `ROWID` 大于上次处理记录的消息。对于每条新消息,它会检查内容是否包含预设的关键词(如“验证码”),如果包含,则使用正则表达式提取验证码。
35+
* **邮件**: 当检测到新的 `.emlx` 文件时,程序会解析该文件,获取邮件正文。然后同样检查关键词和提取验证码。
36+
4. **自动化操作**: 提取到验证码后,程序根据配置文件中的设置 (`floating_window`, `direct_input`, `auto_paste`, `auto_enter`) 执行操作。
37+
* **悬浮窗 (`floating_window`)**: 如果启用,会通过 IPC 启动一个独立的 `floating_window` 子进程来显示验证码。此模式下强制 `direct_input` 生效。
38+
* **直接输入 (`direct_input`)**: 使用 `enigo` 库模拟键盘直接输入验证码,不占用剪贴板。
39+
* **剪贴板+自动粘贴 (`auto_paste`)**: 将验证码复制到剪贴板,然后模拟 `Cmd+V` 粘贴。
40+
* **自动回车 (`auto_enter`)**: 在粘贴或直接输入后,模拟按下回车键。
41+
42+
## 构建、运行和测试
43+
44+
### 环境要求
45+
46+
* macOS 操作系统。
47+
* Rust 和 Cargo 工具链。
48+
* `sqlite3` 命令行工具(短信监听功能依赖)。
49+
50+
### 构建和运行
51+
52+
1. **开发运行**:
53+
```bash
54+
cargo run
55+
```
56+
这将编译项目并在开发模式下运行。
57+
58+
2. **打包应用**:
59+
```bash
60+
# 安装 cargo-bundle (注意:此项目使用了一个特定分支)
61+
cargo install cargo-bundle --git https://github.com/zed-industries/cargo-bundle.git --branch add-plist-extension
62+
63+
# 打包发布版本
64+
cargo bundle --release
65+
```
66+
生成的应用程序位于 `target/release/bundle/osx/MessAuto.app`
67+
68+
### 测试
69+
70+
* 项目中有一些基本的日志记录和手动测试逻辑。主要的功能测试(如监听短信/邮件、提取验证码)需要在真实的 macOS 环境中,并配合相应的短信或邮件接收来进行。
71+
* 可以通过 `--test` 命令行参数运行一个简单的悬浮窗测试:
72+
```bash
73+
cargo run -- --test
74+
```
75+
76+
## 开发约定
77+
78+
* **模块化**: 代码按功能模块组织在 `src/` 目录下,例如 `monitor/`, `floating_window/`, `clipboard.rs` 等。
79+
* **配置**: 使用 `config.rs``config.toml` 文件进行配置管理。
80+
* **国际化**: 使用 `rust-i18n` crate,翻译内容存储在 `locales/app.yml` 文件中。
81+
* **日志**: 使用 `log``env_logger` crate 进行日志记录。
82+
* **异步**: 核心逻辑(如文件监控、Actor)使用 `tokio` 异步运行时。
83+
* **权限**: 项目需要 macOS 的“完全磁盘访问权限”(访问 Messages 数据库和 Mail 文件夹)和“辅助功能权限”(模拟键盘输入)。权限请求和管理在代码中有相应处理。
84+
85+
## 项目文件结构
86+
87+
```
88+
messauto/
89+
├── Cargo.lock
90+
├── Cargo.toml # 项目依赖和元数据
91+
├── README.md
92+
├── LICENSE.txt
93+
├── resources/ # 图标等资源文件
94+
│ ├── icon.png
95+
│ └── ...
96+
├── locales/ # 国际化翻译文件
97+
│ └── app.yml
98+
├── src/ # 源代码
99+
│ ├── main.rs # 程序入口
100+
│ ├── config.rs # 配置加载和管理
101+
│ ├── tray.rs # 托盘菜单逻辑
102+
│ ├── monitor/ # 核心监听逻辑 (Actor, Watcher, Processors)
103+
│ │ ├── mod.rs
104+
│ │ ├── actor.rs # MonitorActor 定义
105+
│ │ ├── commands.rs # MonitorCommand 定义
106+
│ │ ├── message.rs # 短信处理逻辑 (MessageProcessor)
107+
│ │ ├── email.rs # 邮件处理逻辑 (EmailProcessor)
108+
│ │ └── watcher.rs # 通用文件监控逻辑 (FileWatcher)
109+
│ ├── floating_window/ # 悬浮窗应用代码
110+
│ │ ├── mod.rs
111+
│ │ └── app.rs
112+
│ ├── clipboard.rs # 剪贴板和键盘模拟操作
113+
│ ├── parser.rs # 验证码提取逻辑 (关键词和正则)
114+
│ ├── ipc.rs # 进程间通信 (启动悬浮窗)
115+
│ ├── launch.rs # 开机自启管理
116+
│ ├── notification.rs # (可能用于通知,需进一步确认)
117+
│ └── updater.rs # 应用更新检查
118+
└── target/ # Cargo 构建输出目录
119+
```

src/updater.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ fn get_current_arch() -> &'static str {
1616

1717
fn get_endpoint() -> String {
1818
let arch = get_current_arch();
19-
format!(
19+
let endpoint = format!(
2020
"https://github.com/LeeeSe/MessAuto/releases/latest/download/update-{}.json",
2121
arch
22-
)
22+
);
23+
info!("检查更新的 endpoint: {}", endpoint);
24+
endpoint
2325
}
2426

2527
const CURRENT_VERSION: &str = env!("CARGO_PKG_VERSION");

0 commit comments

Comments
 (0)