feat(schedule): 重构日程系统并融合清单与课表事务 - #593
Merged
Merged
Conversation
- 抽离键盘重叠高度与完整区域滚动能力,支持编辑内容按焦点避让输入法。 - 调整日程编辑弹窗布局,并限制日历组件不因惯性滑动误展开。 - 合并连续的编辑器基础改动,保留原有最终文件状态。
- 统一课表最大周来源,避免重复规则与课表周数边界不一致。 - 补充重复截止日期的次数预览,并优化结束条件展示。 - 合并同一重复规则功能的连续实现,便于按功能回滚。
- 修复备注输入时的键盘避让问题。 - 修正时间段分隔符的垂直对齐。 - 合并两项相邻的编辑器视觉修复。
- 使用 schedule 模块替换原 todo 主页入口。 - 区分重复日程的完成与删除状态,避免两类操作共享错误语义。 - 保留入口切换与状态修复作为同一产品阶段。
- 建立日程到系统日历的导出入口与基础平台适配。 - 为后续日历对账与提醒能力提供最初的用户授权链路。 - 历史整理仅重写提交边界,不改变该阶段文件树。
- 按最终 typed 合同建立 Category、Schedule 与 OccurrenceOverride 的线协议、领域映射和四表 Room 存储。 - 通过 Ktorfit、KtProvider 与公共 ApiWrapper 接入远端,并删除 cursor、outbox、receipt、semantic sidecar 和旧迁移链。 - 保留 Android 与 iOS 单向系统日历导出,移除未采用的双向冲突、入站回写和兼容层设计。 - 汇总跨平台生产接线、协议文档与回归测试,替代此前已被最终实现推翻的实验提交。
- 仅在离线转在线且当前账号仍有 pending 时触发一次现有 RequestSync。 - Android 复用 NetworkUtil,iOS 使用 NWPathMonitor,监听生命周期绑定仓库进程作用域。 - iOS 在远端提交成功后触发一次 EventKit 全量导出,避免远端变化只停留在本地。 - 新增网络边沿和 iOS RemoteCommitted 回归覆盖。
- 三个日常 schedules 接口统一发送 AtomicBatch,一次本地命令可携带相关分类、日程与 occurrence override。 - 复用完整资源和 version 合并服务端 canonical 响应,并保持 R→U compare-and-clear 语义。 - 网络、超时和未知失败继续保留 pending;业务 REJECTED 只清除仍匹配上传 revision 的请求。 - 更新最终交接与版本同步文档,并补齐跨平台仓库与网关回归测试。
- 完成邮子清单主页面、编辑与详情交互,并与统一日程数据源打通。 - 补齐移动端状态栏、导航栏、空态、置顶、批量管理和卡片动画等验收细节。 - 收敛临时预览与 mock 接线,保留可复用的正式页面能力。
- 将邮子清单 Feed 接入首页展示,补齐临期横幅、卡片信息、提醒与课表关联入口,并对齐左右滑置顶和删除交互。 - 复用清单页统一投影和排序规则,使用账号 Settings 持久化置顶顺序,并在清单删除后清理失效记录。 - Feed 点击后按日程与实例 identity 定位目标,使用按需覆盖层和 graphicsLayer 透明度动画完成低开销高亮。 - 完善 Android 预览数据及共享服务接线,增加 Feed 投影测试并验证 Schedule Android/Desktop 与 Discover Android 编译。
- 支持时间点、时间段和全天清单投射到课表,并按类型处理重叠、层级与点击。 - 修复投影项目的遮挡、折叠展开和全天背景层级。 - 将投影数据与详情弹窗重构为课表侧 PageDecoration 和平台 ItemFactory 扩展,避免 schedule 模块侵入课表 UI。 - 合并初始投影、连续重叠修复与最终结构调整,保留最终可维护实现。
- 引入不可变 kind,使用可空 todoState 区分清单成员,并持久化 linkedToCourse 原子字段 - 完善 TODO/AFFAIR 校验、重复实例完成约束以及领域、wire、同步和 Room 映射 - 使用仓库状态替换进程内课表关联,统一清单、Feed、系统日历和课表投射行为 - 更新 Schedule v2 文档与覆盖测试;聚焦 desktopTest 已通过
- 将课表长按创建改为内存时间草稿,确认保存后再通过 Schedule 本地优先命令创建 AFFAIR 日程 - 扩展 Schedule 服务与编辑草稿边界,保留事务来源、清单完成态和课表投射语义 - 拆分 TODO 时间段与事务 Decoration,分别维护 ItemHierarchy、层级及来源过滤 - 复用旧事务斜纹样式和移动端详情交互,并停用旧 AffairPageDecoration 注册 - 新增事务草稿映射测试;通过 schedule desktopTest 及 course/view、course desktop 编译
- 新增基于目标内容边界的 IME 避让状态,仅将标题、信息栏和备注完整抬至键盘上方 - 关闭 Android Dialog 的系统 adjustPan,由 commonMain 的 WindowInsetsRulers 统一驱动跨平台位移动画 - 使用屏幕坐标同步课表滚轴与弹窗位置,并在键盘收起时恢复滚动偏移 - 移除旧事务编辑器手工上报窗口坐标的链路,补充目标状态的完整使用示例 - 验证:相关文件 IDE diagnostics 无错误,git diff --cached --check 通过;未运行 Gradle
- 在共享日程弹窗中补充清单完成态与课表/清单关联开关,并保持事务来源视觉语义 - 将完成态与系列级关联修改统一路由到仓库命令,支持重复实例的正确完成处理 - 统一分类目录与惰性默认分类创建,确保主页面、清单页及桌面预览共享同一仓库数据 - 补充关联图标、API 投影字段和相关无修改/分类筛选测试 - 验证:IDE diagnostics 通过,git diff --check 通过
- 新增分组管理页面,支持新增、改名、删除、拖拽排序及十组课表配色,并接入本地优先同步链路 - 将分组背景与文字配色写入统一 JSON 模型,补充默认灰色及事务关联清单后的课表展示规则 - 统一清单页与主页 Feed 的时间、关联课表图标和深色模式前景色,并对齐分组页顶部栏与悬浮按钮 - 修复深色模式下分组编辑弹窗、日程信息图标以及课表底部弹窗导航栏区域的显示问题 - 补充分组配色和本地命令测试;IDE diagnostics 与 git diff --cached --check 通过,未运行 Gradle
- 在 AppTheme 根级提供默认 LocalContentColor,使未显式设色的文字在深浅色模式下保持可读 - 保持 Typography 仅负责字体、字号与行高,不绑定前景色,确保 Surface(contentColor) 可以按组件语义覆盖 - 撤销清单分组栏与临期标签为规避 Typography 颜色优先级添加的冗余显式颜色 - 完善提前提醒的分钟文案;IDE diagnostics 与 git diff --check 通过,未运行 Gradle
- 将跨平台 Window 的日程编辑宿主统一为无系统阴影的 Dialog,并修复导航栏、背景与深色模式显示 - 统一返回键、遮罩点击和下拉手势的未保存拦截;继续编辑时回弹,空白新建内容可直接放弃 - 为课表详情宿主增加挂起式关闭门控与顶层确认内容,避免弹窗拖离后确认框延迟出现 - 默认让 BottomSheet 下拉关闭经过 onDismissRequest,并保留地图可隐藏抽屉对 Collapsed/Hide 的区分 - 补充日历与滚轮选择器的主题适配、日程入口宿主调整及空白新建状态测试 - 验证:IDE diagnostics 无新增 error,git diff --cached --check 通过;本次未额外运行完整 Gradle 测试
- 新增 macOS、Linux 与 Windows 平台的 Codex Action,共用 Bash 构建安装脚本 - 支持单设备自动选择及多设备白名单选择,定向构建并安装 test Debug APK - 显式启动掌邮 MainActivity,避免误打开 LeakCanary 的 Leaks 页面 - 将 CMP 复用组件 Skill 迁移到 .agents/skills,并通过 Claude 兼容软链接继续暴露 - 验证 Bash 语法与暂存区差异检查通过
- 将分组课表候选扩充为 18 组背景与文字配色,并按色相顺序整理展示 - 分别调整柔和色与鲜艳色的明暗模式表现,兼顾辨识度和课表视觉重量 - 预览数据复用真实候选色,在 3 月 7 日和 8 日生成对应时间段以便集中验收 - 验证:Android Studio diagnostics 无错误,git diff --check 通过
- 将顶部渐变阴影与动画背景合并到同一绘制层,避免矩形阴影覆盖圆角内容 - 调整绘制顺序为先绘制阴影、再以不透明圆角背景覆盖内部区域 - 按 density 缓存固定高度的渐变 Brush,避免内容尺寸动画期间重复创建绘制对象 - 将相关状态读取收敛到 BottomSheet 内容作用域,保留现有动画与导航栏填充行为 - 验证:Android Studio diagnostics 无错误,git diff --cached --check 通过
- 支持仅此次、此次及以后和整个系列三种编辑范围,并为后半系列执行原子拆分与例外迁移 - 补充 occurrence 时间与分类覆盖、稳定重复锚点及对应 wire、快照投影和本地 reducer 映射 - 更新编辑弹窗范围选择、日常 mutation 批次与 Android 验收 mock,使拆分后课表立即展示新时间 - 完善重复规则能力矩阵、同步流程和交接文档,并扩充 reducer、mapper、projector 与 Room 相关测试 - 验证:相关 Kotlin 文件 IDE diagnostics 无错误;git diff --check 通过
- 区分开始/结束与小时/分钟滚轮操作,按用户实际调整端联动另一端 - 开始小时越过结束时间时优先保留结束分钟,仅在不足三十分钟时补足最短时长 - 移除会阻断连续操作的动态 Animatable 边界,并为零点与当天末尾提供同日边界收敛 - 补充普通联动、越界联动及 00:30、23:29 边界测试 - 验证:相关实现与测试文件 IDE diagnostics 无错误;git diff --check 通过
- 新增跨平台提醒授权状态,Android 支持权限拒绝后的设置页引导,iOS 接入 EventKit 完整访问,并在未授权信息区保留远端提醒事实。 - 将系统受管日历统一命名为“掌邮日程”,时间点改为 Android 与 iOS 均可回读的零时长投影。 - Android 使用 CAL_SYNC2 标记投射协议版本,仅对 CAL_SYNC1 身份可信的托管日历执行一次性安全重建,并在重建后强制全量回写。 - 区分托管数据损坏与权限、Provider、账号异常,普通运行故障不会触发日历清空。 - 补充零时长 canonicalization、EventKit 回读和自动恢复边界测试;相关源码经 IDE diagnostics 检查无错误,git diff --check 通过,未运行 Gradle。
- 在 commonMain 实现旧事务与旧清单的只读拉取、稳定映射、分类复用及 local-first 幂等落库,并恢复 Android 真实 Room 仓库。 - Android 与 iOS 在账号仓库初始化锁外启动同一迁移;失败留到下次初始化,迁移入口于 2028-09-01 UTC 自动失效。 - 补齐未排期日程的提醒、重复和课表关联归一化,支持 offsetMinutes=0 的准时提醒并保留无时间入口提示。 - 新增迁移映射、历史 DTO、持久化与期限边界测试;Android Host 与 iOS Simulator 各 41 项聚焦测试通过。 - 更新迁移方案与交接文档,明确平台入口、幂等标识、字段映射、失败重试和旧服务下线边界。
- 将 Today 状态与纯 Date 运算拆分,避免 Android Host 测试初始化 Context 和主线程 Looper - 恢复循环规则锚点与日程时间的一致性校验,拒绝旧 UI 无法无损表达的数据 - 同步分组调色板测试至当前 18 组配置 - 验证 Schedule Android Host 307 项及 iOS Simulator 测试全部通过
- 删除 Affair2 的跨平台模型、仓库、同步、编辑及服务实现,统一由 Schedule 承载新版事务。 - 移除课表中依赖 Affair2 的 PageDecoration、Item 与底部弹窗,不影响现有 Schedule 日程展示。 - 保留 Android 旧 View 事务服务与数据链路,并将相关依赖收缩至 androidMain,继续支持设置页回退。 - 验证 Affair、Course、Home、NoClass、Widget、Notification Android 编译及 Course iOS Simulator 编译通过。
- 删除旧清单的 API、网络、Room、Activity、Fragment、Feed、桌面小组件及全部模块资源。 - 移除发现页与旧清单小组件入口路由,避免继续注册已经废弃的 Activity 和 Provider。 - 保留 Schedule 的旧清单服务端迁移能力,并更新统一日程服务的替代关系说明。 - 验证 Android 主应用、Schedule Android 与 iOS Simulator 编译通过,IDE 检查无旧清单符号残留。
- 主页固定使用 Compose 课表,删除旧课表实现注入和首次展开时的回退提示。 - 移除设置页的新旧课表切换开关及对应的 SharedPreferences 配置项。 - 删除旧主页课表容器、头部数据适配和专用 Android 资源,收缩无调用方的课表服务接口。 - 验证 home、course、mine 的 Android Main 编译通过,并通过 git diff --check。
- 对 HTTP 400 与业务拒绝保留 Room pending,避免旧数据迁移或本地新建日程在远端拒绝后消失 - 新增账号级失败记录与清单失败页面,支持再次编辑、成功提交或本地删除后自动清理记录 - 补充请求、响应及 Room 快照诊断日志,仅记录必要业务字段并限制错误响应长度 - 将旧数据迁移版本提升至 v2,以幂等方式补回早期被错误清除的数据 - 修正日程快照时间投影,并覆盖失败保留、R→U 与记录生命周期测试 - 验证 Schedule Android Main 编译与 Desktop 测试通过
- 验证超期、置顶、临期、普通和无时间项的排序优先级 - 验证置顶状态持久化及删除后自动清理账号设置引用 - 补充分组筛选、深浅色标签和标题栏对齐的真机证据
- 记录 Feed 点击定位及高亮动画的真机验收结果 - 覆盖清单侧滑、完成移动与恢复未完成链路 - 验证批量管理实心勾选样式及已置顶项的取消置顶语义
- 为分类 confirmed、upsert、delete 与 discovered 结果补充受控诊断日志 - 日志仅输出分类业务字段和受控配色,不记录凭证、请求头或完整请求体 - 真机确认冷启动同步、连接失败后的 pending 重试和课表分类配色均正确 - 更新 Android E2E 用例 C06 的执行状态与可复核证据 - 验证:compileAndroidMain、test debug 覆盖安装及冷启动 Sync 通过
- 非成功 HTTP 响应只记录状态码和 Content-Type,不再输出任意响应正文 - HTTP 400 业务错误正文仍保留在类型化失败结果中,供失败记录展示和修改处理 - 新增 SafeLine HTML 与疑似凭证文本不得进入日志摘要的聚焦测试 - 真机验证分类在 468 后保留 pending,并在冷启动 Sync 后收敛为远端版本 - 验证:Schedule 网关 desktopTest、test debug 构建与覆盖安装通过
- 在 reducer 边界拒绝空白分类名,并统一去除名称首尾空白后写入 pending。 - 覆盖大小写判重、中文标点保留、连续编辑收敛和 canonical 分类合并引用。 - 同步更新协议与端到端验收记录,补充 dev/test 服务端真实判重证据。 - 验证:./gradlew :cyxbs-pages:schedule:desktopTest。
- 覆盖全部 18 套候选配色在命令、协议响应与 Room 快照中的完整往返。 - 验证 TODO 与 AFFAIR 共用分类时,改名、换色和排序不会改变日程引用。 - 记录 dev/test 配色往返与真机分类引用数量变化的验收证据。 - 验证:./gradlew :cyxbs-pages:schedule:desktopTest。
- 补充响应丢失后沿用同一 Schedule UUID 重试且不产生重复数据的仓库测试 - 覆盖新分类、提醒、重复规则与课表关联在一次 CREATE 中解析和收敛 - 登记无日期日程补全、系列拆分及重复边界的自动化与真机证据 - 验证:./gradlew :cyxbs-pages:schedule:desktopTest
- 放宽 Room 对事务完成态的旧限制,保留事务必须关联课表且使用时间段的约束 - 补充事务关联清单从本地持久化、UPDATE 请求到规范回包的仓库回归测试 - 记录真机创建、关联、取消关联与完成后课表投影的验收结果 - 验证:./gradlew :cyxbs-pages:schedule:desktopTest
- 新增仅此次六类字段独立写入、首次删除后续范围和删除恢复后旧 Patch 不复活的聚焦回归测试 - 记录事务关联清单、全天课表交互及失败留存等真机与代码验收证据 - 按产品范围跳过低频双设备并发,只保留顺序同槽合并与字段级合并验证 - 验证 ScheduleEditNoOpTest、Room repository 与失败记录持久化聚焦桌面测试通过
- 在应用父日程删除前冻结单次调整的远端 ID 与本地 identity 映射,避免级联删除后响应失去关联 - 仅允许同轮 DELETED 使用冻结映射,CONFIRMED 与 CHANGED 仍保持原有严格状态校验 - 为响应应用失败补充不含业务载荷的 reason/detail 日志,便于定位结构相关问题 - 新增父日程与单次调整同时被远端删除的回归测试,完整 schedule desktopTest 通过
- Android 出站协调器启用原生 occurrence exception,并按原始发生槽位映射单次修改、取消和还原。 - 支持重复 Deadline 及单次在时间段、时间点、全天之间切换,过滤仅分类等不影响系统日历的调整。 - 增加领域、协调器、Gateway 与真实 Calendar Provider 回归测试,设备端 17 项全部通过。 - 更新系统日历设计说明与 Android E2E 清单,241 项验收全部完成。
- 首次导出时忽略同一 source 下的普通日历,仅对明确缓存但无法确认身份的日历保持安全拒绝。 - 按设备时区转换 EventKit 全天日期,并兼容包含式结束时刻与半开区间模型,避免全天事件写后校验失败。 - 增加普通日历不阻断受管日历创建的回归测试;模拟器验证全天、时间段、周重复、更新、删除和重启对账,Xcode 构建通过。
- 使用 EventKit occurrenceDate 定位原始实例,并通过 thisEvent 保存单次修改或移除单次事件 - 系列本体或单次调整变化时重建主事件并重放有效调整,支持删除后的还原 - 持久化账号级调整指纹,避免未变化快照重复改写 EventKit,并对损坏账本 fail-closed - 补齐映射、网关、运行时和账本测试,更新系统日历投影文档 - 验证::cyxbs-pages:schedule:iosSimulatorArm64Test、Xcode iOS 模拟器 Debug 构建及 EventKit 数据库只读核对通过
- 基于系统日历投影生成 RFC 5545 文件,覆盖时间段、时间点、全天、重复规则、提醒与单次调整 - 对文本执行转义和 UTF-8 行折叠,并过滤无时间及已完成的非重复清单,避免导出账号与同步元数据 - Android 10 及以上保存到 Download/Cyxbs,并通过保留 .ics 文件名的 FileProvider URI 兼容小米日历;Android 8、9 使用系统保存面板 - iOS 保存到应用内部 schedule 目录后调用系统分享面板,Desktop 使用另存为,Web 使用浏览器下载 - 在清单设置页开放导出入口,展示导出、跳过和保存结果,并同步更新日历导出文档 - 验证:ICS Desktop 单元测试、Android/iOS/Desktop/JS/Wasm 编译、Xcode iOS 模拟器 Debug 链接及小米日历实际导入通过
- 扩展公共日历日期格,按业务日期集合绘制事件提示圆点,并保证缓存日期项读取最新内容 - 为时间轴、日期编辑和保留的详情页接入账号日程圆点,按实际 occurrence 和跨日占用日期计算 - 重复截止日期日历仅预览当前编辑日程的重复日期,不混入账号内其他日程 - 新增日期占用与周重复规则测试,聚焦 desktopTest 及 Android 测试包构建通过
- 区分月份主体补位范围与折叠态可选周范围,保留展开动画所需的跨月网格 - 折叠态预布局前后周时按真实起止日期拦截越界访问,避免生成负 item index - 真机验证重复日程进入“按日期”不再触发空列表 first 异常 - 验证:日程圆点聚焦 desktopTest、Android 测试包构建及 IDE diagnostics 通过
- 将 Bash 4 专属的关联数组替换为兼容 Bash 3.2 的 case 映射 - 保持现有 Gitmoji 类型、中文说明与非法类型拒绝行为不变 - 同步更新仓库 hook 源文件,避免重新安装 hook 后恢复旧实现 - 验证:Bash 语法检查、合法类型放行、未知类型拒绝及 diff check 通过
- 在 build-logic 提供统一 useUnitTest 入口,并将基础依赖、Android Host、iOS、Room3、Ktor fixture 与持久设备测试拆为独立配置 - 持久设备测试动态读取生成的 instrumentation component,保留测试 APK、完整输出和失败终态校验,同时兼容 Gradle 配置缓存 - 精简 schedule 构建脚本,并将 Android JVM 测试迁移到标准 androidHostTest 源集 - 将 SQLite JVM driver 纳入版本目录,移除 schedule 中的依赖版本硬编码 - 验证 desktopTest、testAndroidHostTest、iOS 测试编译及 persistentAndroidDeviceTest dry-run 均通过
- 为所有课表 Item 提供统一最小视觉高度,折叠区间内仍可读取和点击 - 时间点点击后自动展开所属时间轴,并改为居中绘制单个时间标签 - 修正日程 Item 构造参数,移除截止时间专属视觉高度分支 - 为坐标与时间权重换算补齐首尾边界,避免拖出课表后数组越界 - 验证:桌面端相关测试通过;Android 实机验证折叠时间点、时间段及 23:59 边界拖动
- 为折叠时间轴中的课表项提供统一最小展示高度,并优化时间点文案展示 - 点击折叠项时展开对应时间轴,由 BottomSheet 统一负责滚动避让 - 区分首次弹起、切换事项与关闭阶段的偏移策略,修复闪动和关闭后位置错误 - 补充坐标动态观察与边界说明,IDE 诊断及 git diff --check 均通过
- 为重复规则补充次数与截止日期摘要,并调整提醒、重复、关联和分组的展示顺序 - 为信息项声明建议行,保证重复、关联和分组不会因前行空余而提前 - 仅允许变长的信息项独立后移并在缩短后返回,避免其他字段级联跳行 - 补充重复摘要和稳定换行测试,聚焦 desktopTest 与 IDE diagnostics 均通过
- 弹窗首次弹起和内容高度变化时同步更新课表滚动偏移 - 为课表项顶部保留 20dp 可视间距,避免长时间段被移出课表 - 保留切换当前 Item 的独立动画,并在动画后按最新弹窗高度校准 - 验证:通过 :cyxbs-pages:course:view:compileKotlinDesktop 与 git diff --check
- 补充清单、ICS、课表折叠时间轴与弹窗避让的当前实现 - 将交接状态更新为 Android 端到端验收完成及 dev/test 后端已部署 - 修正 Android 与 iOS 系统日历后续提交记录和过期日志标识 - 将验证命令区分为客户端与后端仓库并移除本机绝对路径
- 合入 develop 的 KMP WebView、签到页与 Kotlin/AGP 依赖升级 - 保留 Schedule 的 Room3、测试依赖、导航入口与 iOS 日历权限配置 - 维持 Affair2 和旧课表事务展示代码的删除状态,避免旧实现重新接入 - 通过 Schedule 多平台编译、桌面单测及 test/pro Android 应用编译验证
- 新增全部及指定分组的全量日程页,按完成态区分待办,并按有效实例划分普通日程的未过期与已过期区域 - 支持区域全选、页面全选、批量移出分组和批量删除,返回键优先退出批量管理 - 复用清单卡片与编辑入口,统一分组列表样式、普通日程标题布局及导航注册 - 补充普通日程排序、临期与重复系列测试,并更新交接和 Android E2E 验收文档 - 验证:desktopTest、compileAndroidMain 通过;真机完成分组移出、批量删除、冷启动持久化及测试数据还原
- 清单页新增事项默认使用当天日期与当前分钟起一小时,并在午夜边界收敛到 23:59 - 时间滚轮最短输入区间由 30 分钟调整为 10 分钟,既有更短日程仍可展示且不会被无关编辑改写 - 补充默认时间、10 分钟联动与午夜边界单元测试,并更新真机测试用例和执行证据 - 验证 schedule 聚焦桌面测试、Android 编译及真机创建同步均通过
- 将全天标题层移动到右侧事件固定视口,与全天彩色条共享同一布局坐标系 - 保持标题层不随时间轴滚动,避免通过写死时间轴宽度修正位置 - 修复两条及以上全天日程进入半宽布局后标题与色条中心不一致的问题 - 验证 IDE diagnostics 与 git diff --check 均通过
- 多条全天日程在窄屏发生换行时统一按可视区域垂直居中,避免单行与多行标题错位 - 补充清单新增默认日期时间与多全天日程响应式布局的验收用例和真机证据 - 更新 Schedule 交接文档中的提交、数据清理和 develop 合并状态 - 验证 schedule、course:view 的 desktopTest 及相关 Android 编译任务通过,并完成真机核心流程回归
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
主要改动
建立统一的 Schedule 日程模型,将邮子清单与课表事务合并到同一套数据、编辑和同步链路中;清单可关联课表,事务关联清单后可获得完成状态与分类能力。
完成新版邮子清单,支持列表与时间轴切换、分类筛选、置顶、完成、侧滑操作、批量管理,以及按分类查看全部历史与未来日程。
支持时间点、时间段、全天和未设置时间日程,完善日、周、月、年重复,以及仅此次、此次及以后和整个系列的编辑与删除。
使用 Schedule 替代主页课表事务,支持长按创建事务,并将全天、时间点和时间段日程投影到课表;完善重叠、折叠时间轴、点击展开和详情弹窗交互。
重构本地存储与网络同步,采用远端确认快照与本地 pending 快照实现本地优先写入;网络失败时保留数据,恢复后自动同步,单条业务失败不会阻塞其他资源。
支持同步失败记录的查看与修复,用户可以定位到对应日程进行修改;后续提交成功或删除日程后自动清理相关记录。
完成 Android 与 iOS 旧数据迁移:旧清单根据时间、提醒、完成状态和重复规则转换为 Schedule,旧 Transaction 根据学期、周次、星期和节次转换为事务日程;使用确定性 UUID 避免重复迁移。
完善分类管理和课表配色,支持分类新增、改名、排序、删除、引用检查,以及查看分类下全部待办和普通日程。
完善 Android 与 iOS 系统日历投影,支持重复日程的单次修改与删除、提醒和权限引导;同时支持 Android、iOS、Desktop 与 Web 导出 ICS 文件。
完善首页 Feed,展示清单卡片及临期、超期提醒,支持完成、置顶、删除和跳转定位对应日程。
移除已被 Schedule 替代的旧版清单、Affair2 事务和主页旧课表回退入口;保留设置页仍在使用的旧 View 事务能力。
相关文档