| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
发版 0.4.0:正文按 HTML 排版、附件右键预览、OAuth2 授权全流程 三处「有功能却用不起来」的问题,影响的都是每天读邮件的实际体验: 1) 正文被压成纯文本:阅读区取的是 displayBody(抓取阶段已把 HTML 压平的纯文本), 表格/加粗/链接/列表全丢。改为按邮件真实内容展示——有 HTML 就渲染 HTML (新增 commonMain 自研解析+渲染组件 HtmlMailView,不引新依赖、不用 jsoup), 只有纯文本才显示纯文本,两者都有时可一键切换。顺带治乱码:两个引擎共用一条 字符集解码链,纠正「声明 us-ascii/latin1/gb2312 却塞 GBK 或 UTF-8」这类国内常见错标。 2) 附件只能看名字:附件字节根本没保存,点了也没反应。新增 MailGateway.fetchAttachment (按需下载单个附件;Jakarta/自研栈/POP3 都实现,同步阶段仍只存元数据), 平台层落盘到临时目录后用系统默认程序打开,界面加左键/右键菜单预览。 3) OAuth2 只有半个:Google 的设备码端点不接受 Gmail 的 IMAP scope,原实现永远拿不到令牌; 另外列表「测试」拿空密码连、POP3 账号被 IMAP 服务器校验挡住存不下来、Microsoft 预设 不会自动切 OAuth2。现在 Microsoft 走设备码、Google 走授权码+PKCE+本机回环(state 恒定时间校验), 客户端配置按服务商存进凭据库、令牌过期自动刷新,设置页可切服务商并分别填客户端 ID/密钥/租户。 版本号唯一来源升到 0.4.0(顺带把三处手写的旧版本字符串改成读 MailWeaveInfo.VERSION), README 补第三次迭代说明与版本历史。 验证::shared:jvmTest + :composeApp:jvmTest 共 168 用例全绿(3 个需要真实账号环境变量的 LiveMailTest 按设计跳过);桌面冒烟 MAILWEAVE_SMOKE_OK;开发版与 ProGuard 发布版打包产物 都跑了冒烟;msi/exe 产物名为 MailWeave-0.4.0.*。 未验证:本机没有可用的 Microsoft/Google 客户端凭据,且 oauth2.googleapis.com 在境内不可达, 两条 OAuth 流程只做到 MockEngine + 真实回环端口级别的验证。 | 18 天前 | |
补齐全链路端到端测试,打包按 0.1.0 优化,写清多平台路线图 端到端测试(这次的重点): - 新增 composeApp 的 AppEndToEndTest:GreenMail 起真 IMAP/SMTP 端口、LangChain4j 打本机假 OpenAI 端点、 Ktor 打本机假飞书端点,然后驱动真实 AppViewModel 走完「收信 → 落库 → AI 分诊 → 路由推送 → 建提醒 → 打开读正文并回写已读 → 发信 → 手动提醒」,并断言第二次同步不重复推送、不重复建提醒。 只有外部服务是假的,我们自己的层一层都不 mock;它当场抓到一个真实竞态—— 新账号首次同步时 folders Flow 还没把 selectedFolder 写进状态,refresh() 就提前返回(用户侧表现: 第一次点同步没反应),已改为用刚同步回来的结果兜底。 - 为此把 AppContainer 的 SecretStore 改为可注入,测试不再碰用户真实的 ~/.mailweave/vault.json。 版本与打包: - 版本号单一来源:gradle.properties 的 mailweave.version=0.1.0,Gradle 生成 MailWeaveInfo,应用与打包共用。 - 目标格式扩到 Windows msi/exe、macOS dmg、Linux deb/rpm,并补 windows/macOS/linux 各自的图标、 bundleID、菜单组、upgradeUuid、维护者等配置;图标由 packaging/generate-icons.java 生成(png/ico/icns 可复现)。 - 发布版 ProGuard 实测:总包 167MB→151MB,app 目录 81MB→64MB,jar 97 个→1 个;打包产物冒烟通过。 过程中踩到三个坑并固化进文档/规则:-dontwarn 参数是引用方类;optimize=true 会打断 Compose 的 Swing 全局 初始化;kotlinx.coroutines 必须整包 keep(否则 JobStatus 字节码被改写导致启动 VerifyError)。 ICO 必须是小端多尺寸 DIB(大端或单张 PNG 会被 jpackage 判为数据无效),ICNS 反而是大端。 路线图(README §13):给出桌面/Android/iOS/鸿蒙的现状、可复用边界与前置条件,并把「移动端邮件协议栈」 作为必须先决策的岔路讲清楚(自研 KMP 原生协议栈 / 各端独立实现 / 瘦客户端+同步网关三条路线的代价)。 | 22 天前 | |
补齐全链路端到端测试,打包按 0.1.0 优化,写清多平台路线图 端到端测试(这次的重点): - 新增 composeApp 的 AppEndToEndTest:GreenMail 起真 IMAP/SMTP 端口、LangChain4j 打本机假 OpenAI 端点、 Ktor 打本机假飞书端点,然后驱动真实 AppViewModel 走完「收信 → 落库 → AI 分诊 → 路由推送 → 建提醒 → 打开读正文并回写已读 → 发信 → 手动提醒」,并断言第二次同步不重复推送、不重复建提醒。 只有外部服务是假的,我们自己的层一层都不 mock;它当场抓到一个真实竞态—— 新账号首次同步时 folders Flow 还没把 selectedFolder 写进状态,refresh() 就提前返回(用户侧表现: 第一次点同步没反应),已改为用刚同步回来的结果兜底。 - 为此把 AppContainer 的 SecretStore 改为可注入,测试不再碰用户真实的 ~/.mailweave/vault.json。 版本与打包: - 版本号单一来源:gradle.properties 的 mailweave.version=0.1.0,Gradle 生成 MailWeaveInfo,应用与打包共用。 - 目标格式扩到 Windows msi/exe、macOS dmg、Linux deb/rpm,并补 windows/macOS/linux 各自的图标、 bundleID、菜单组、upgradeUuid、维护者等配置;图标由 packaging/generate-icons.java 生成(png/ico/icns 可复现)。 - 发布版 ProGuard 实测:总包 167MB→151MB,app 目录 81MB→64MB,jar 97 个→1 个;打包产物冒烟通过。 过程中踩到三个坑并固化进文档/规则:-dontwarn 参数是引用方类;optimize=true 会打断 Compose 的 Swing 全局 初始化;kotlinx.coroutines 必须整包 keep(否则 JobStatus 字节码被改写导致启动 VerifyError)。 ICO 必须是小端多尺寸 DIB(大端或单张 PNG 会被 jpackage 判为数据无效),ICNS 反而是大端。 路线图(README §13):给出桌面/Android/iOS/鸿蒙的现状、可复用边界与前置条件,并把「移动端邮件协议栈」 作为必须先决策的岔路讲清楚(自研 KMP 原生协议栈 / 各端独立实现 / 瘦客户端+同步网关三条路线的代价)。 | 22 天前 |