Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Android 小组件由 `TimetableWidget` 更新、由 `WidgetAgenda` 读取本地

`sync/SyncController` 只持有一轮同步的所选内容、进行状态和结果,不提供任务队列、逐项追加或任务历史。覆盖课表、考试安排、成绩、学分进度及乐学、新延河课堂、MOOC、大物实验 DDL。共享学校会话的读取顺序执行,MOOC 独立并行;开始前等待其他学校查询结束,取消等待不会中断那次查询。大物实验 DDL 在本轮课表读取结束后生成。日程导入在 `AgendaController` 内顺序合并,基于最新已保存数据构造结果,并在真正写入前再次检查请求是否已取消,避免并行平台互相覆盖或取消后写入等待中的结果。

首页和日程页共用 `SyncButton`,菜单只包含「同步全部」和「自定义同步」,不承载本地数据维护。成绩和学分进度只在各自页面提供同步入口;已删除的 DDL 只在日程页头提供恢复入口,与删除后的原位撤销共同组成恢复流程。「同步全部」默认覆盖可用的课表、考试和 DDL 来源,跳过尚未登录的 MOOC;自定义抽屉按课表与 DDL 两组勾选,主动勾选 MOOC 时可登录。同步静默开始,按钮显示加载状态,再次点击才展开「同步进度」。该抽屉只显示本轮进度、各项结果、整轮取消和重试未完成内容;重试保留本轮指定的学期,返回、收起和下滑关闭不会取消。完成或失败统一反馈一次,抽屉已展开时直接更新列表,不叠加通知遮住操作。
首页和日程页共用 `SyncButton`,菜单只包含「同步全部」和「自定义同步」,不承载本地数据维护。成绩和学分进度只在各自页面提供同步入口;日程页“更多”菜单中的“DDL 回收站”入口负责进入独立恢复页面,与删除后的原位撤销共同组成恢复流程。「同步全部」默认覆盖可用的课表、考试和 DDL 来源,跳过尚未登录的 MOOC;自定义抽屉按课表与 DDL 两组勾选,主动勾选 MOOC 时可登录。同步静默开始,按钮显示加载状态,再次点击才展开「同步进度」。该抽屉只显示本轮进度、各项结果、整轮取消和重试未完成内容;重试保留本轮指定的学期,返回、收起和下滑关闭不会取消。完成或失败统一反馈一次,抽屉已展开时直接更新列表,不叠加通知遮住操作。

启动时只恢复学校登录,不同步业务数据。恢复登录和后台同步不提供交互验证回调;遇到短信或图形验证时,在获取手机号、验证码图片或发送短信前停止相关读取,并保留「需要短信验证/需要图形验证」账号状态,独立平台继续同步。用户主动重试未完成的内容或查询时可完成验证码验证;取消验证则保留同一待验证状态。

Expand All @@ -56,7 +56,7 @@ Android 小组件由 `TimetableWidget` 更新、由 `WidgetAgenda` 读取本地

USTC 风控采集失败时遵循学校登录页的协议:仅在风控请求出现 HTTP/连接错误,或响应不是有效 token 时,将加密的 `risk_payload` 设为 `{"error":true}`,仍保留 `riskEngine=true` 并由学校继续认证。这不是登录成功状态;密码错误、短信验证、服务回调和登录会话检查照常执行。取消、凭据存储失败和程序错误不进入此处理。采集失败的技术原因只写入日志,不单独弹出内部接口地址。`/gate` 是公开页面配置的前端资源网关,不能直接据此改写独立风控服务地址。

数据仍使用 `schedule.json`、`agenda.json`、`academics.json` 和原有 JSON 字段;凭据与 Cookie 仍使用原有系统安全存储。DDL 同步保留本地编辑、删除标记和已完成状态,并接收平台完成状态。删除 DDL 时先提供原位撤销;离开当前视图后,可从日程页头的「已删除的 DDL」批量恢复。恢复不会出现在同步菜单中。
数据仍使用 `schedule.json`、`agenda.json`、`academics.json` 和原有 JSON 字段;凭据与 Cookie 仍使用原有系统安全存储。DDL 同步保留本地编辑、删除标记和已完成状态,并接收平台完成状态。删除 DDL 时先提供原位撤销;离开当前视图后,可从日程页“更多”菜单进入独立的“DDL 回收站”批量恢复。恢复页面按截止日期分组,使用懒加载列表和搜索应对持续增长的数据;单条恢复使用文字按钮,永久清空放在页面“更多”菜单中。恢复不会出现在同步菜单中。

四个 DDL 来源统一在自定义同步中选择,不再占据顶层菜单的四个入口。`SchoolController.importDeadlines` 的可选 `source` 用于所选学校平台,省略时依次处理乐学与新延河课堂,保留逐平台错误处理、取消和登录状态修复。MOOC 使用独立的账号和控制器,不进入学校认证流程。大物实验为本地操作。

Expand Down
3 changes: 3 additions & 0 deletions docs/ui-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ Android 端保存这些设置,在应用关闭后刷新时读取当前系统颜
日程列表以顶部的“未完成/已完成”分段选择切换内容,不同时使用横滑切页;
时间轴不显示完成状态选择。学期切换、列表/时间轴切换和已删除 DDL 入口集中在
页头的“更多”菜单,标题行只保留类型筛选,避免手机端并排图标难以点击。
已删除 DDL 使用独立的全屏“DDL 回收站”,而不是在日程页内再叠一层可增长列表。
“更多”菜单中的入口显示待恢复数量;页面按截止日期分组、支持搜索与懒加载,并把
批量恢复固定为底部主操作。单条恢复使用明确的文字按钮,永久清空放在页面“更多”中。
条目横拖立即跟手:短滑露出可点击的操作按钮,长滑达到阈值后振动并显示松手提示。
左滑删除,右滑完成或恢复 DDL;松手前可以拖回取消。展开后再次拖动从当前位置继续,
点击条目先收起,点击外部、滚动或开始操作另一条也会收起。纵向和斜向拖动优先交给滚动,
Expand Down
2 changes: 1 addition & 1 deletion lib/agenda/ui/calendar_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ class _AgendaOverflowMenu extends StatelessWidget {
leadingIcon: const Icon(Icons.restore_from_trash_outlined),
trailingIcon: Text('$deletedDeadlineCount'),
onPressed: deletedDeadlinesEnabled ? onOpenDeletedDeadlines : null,
child: Text(l10n.deletedDeadlinesTitle),
child: Text(l10n.deletedDeadlinesRecycleBin),
),
const Divider(height: 9),
for (final term in values)
Expand Down
Loading
Loading