Skip to content

修复放学/课前时段无法获取课表及悬浮窗相关问题 - #282

Closed
CreeperAWA wants to merge 5 commits into
SECTL:masterfrom
CreeperAWA:fix278
Closed

CreeperAWA wants to merge 5 commits into
SECTL:masterfrom
CreeperAWA:fix278

Conversation

@CreeperAWA

Copy link
Copy Markdown
Contributor

调整了课表可用性校验逻辑,当处于上课或休息状态时,不再强制校验IsLessonConfirmed状态,解决放学和课前准备时段无法生成有效课表快照的问题。

fix #278

调整了课表可用性校验逻辑,当处于上课或休息状态时,不再强制校验IsLessonConfirmed状态,解决放学和课前准备时段无法生成有效课表快照的问题。
@CreeperAWA
CreeperAWA marked this pull request as draft September 17, 2026 15:34
当悬浮窗口不可见时先调用Show()显示窗口,再执行激活操作,避免激活隐藏窗口导致的异常或行为异常
@CreeperAWA
CreeperAWA marked this pull request as ready for review September 17, 2026 15:45
@CreeperAWA CreeperAWA changed the title fix(ClassIslandScheduleSource): 修复放学/课前时段无法获取课表的问题 修复放学/课前时段无法获取课表及悬浮窗相关问题 Sep 17, 2026
@CreeperAWA
CreeperAWA marked this pull request as draft September 17, 2026 15:48
将设置窗口展示逻辑拆分为独立的核心方法,提取授权失败后的预览显示逻辑,同时修复了联动隐藏后悬浮窗的显示判断问题,统一了异常提示信息
1.  删除了不再使用的 ClassIslandTimeUnconfirmed 错误码及其多语言资源
2.  简化了 ClassIsland 状态判断逻辑,移除基于未确认课程状态的错误返回
3.  添加课后时间跟踪逻辑以替代原有的时间未确认检查
1.  移除ISecurityVerificationPrompt接口中多余的TopLevel参数
2.  重构安全验证弹窗逻辑,使用专用宿主窗口替代全局临时窗口
3.  简化安全服务的接口调用,统一移除顶层窗口依赖
4.  调整测试用例以适配新的接口签名
5.  修复部分代码中的冗余逻辑和重复方法
@CreeperAWA
CreeperAWA marked this pull request as ready for review September 19, 2026 05:53
@lzy98276

Copy link
Copy Markdown
Member

感谢 @CreeperAWA 的修复 🙏 #278 的联动问题已经在 master 上落地,你提交的内容原样保留、作者仍是你:

6a8480aa  fix(ClassIslandScheduleSource): 修复放学/课前时段无法获取课表的问题      (author: CreeperAWA)
981413b5  refactor(linkage): remove unused ClassIslandTimeUnconfirmed error code  (author: CreeperAWA)
9981eb7c  test(linkage): 抽出 ClassIsland 状态映射并补充联动回归测试              (维护者补充的测试)

并入 master 的内容

  • 移除 IsLessonConfirmed 硬门槛:ClassIsland 只在当前时间落在上课/课间时间点内时才置 true,放学(AfterSchool)与开课前(None)必然为 false,不能再当作“状态不可信”而放行;今天没有课表(IsClassPlanLoaded == false)仍然放行
  • MapCurrentState 把 Breaking / AfterSchool / PrepareOnClass / None 统一映射为课间,与 CSES 源行为一致,再由课前解禁与课后延迟窗口决定豁免
  • _lastKnownCourseEnd 回填 TimeSincePreviousCourseEnd,让 PostClassDisableDelay 对 ClassIsland 真正生效
  • 新增 ClassIslandScheduleSourceTests(映射表 + 放学后 / 开课前 / 课前解禁窗口 / 课后延迟窗口 / 课表未加载仍放行),在有该提交的 master 上全量测试 533 通过、0 失败

没有一起合入的部分

本 PR 里的安全验证重构(移除 ISecurityService 的 TopLevel 参数、新增 SecurityDialogHost、删除 App.GetRootWindow())与 #278 无关,且与 master 上新增的设置文件防篡改(32c80f04)在 SecurityService.cs / SecurityServiceTests.cs 上冲突,因此保留在你的 fork 分支里没有动(原 head 为 0c027d9a)。这块还建议单独开 PR 推进,并重点验证验证弹窗的模态归属与居中位置——它目前以隐藏的 1×1 宿主窗口作为 owner。

为什么改在上游落地

你的分支与 master 存在冲突,而我们对该 fork 只有 pull 权限(maintainer_can_modify 虽为 true,但 git push 会被拒绝),无法直接在你的分支上解决冲突,所以改为在上游提交。如果你希望保留这个 PR 的形式,欢迎 rebase 后重开,我们再来 review。

另外提醒一个随之而来的行为变化:放学后现在也算确认非上课时段,因此开启「下课隐藏悬浮窗」时,悬浮窗会从放学到次日上课前保持隐藏(CSES 数据源本来就是这个行为)。

@lzy98276 lzy98276 closed this Sep 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

v3.0.0-alpha.2 非上课时段禁用功能在时间表未覆盖时段无效

2 participants