- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构) - ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本) - 投喂指南、分卷、逐节文件 - 调研记录、一致性基线、生成与质检脚本
28 KiB
28 KiB
features(Part 06/07/08)分析备注
负责人:features。产出:parts/06-schedule-profile.md、parts/07-notifications.md、parts/08-automation.md。
本文件记录:已读源文件清单、关键枚举/默认值表(供 Lead 汇总时交叉校验)、未决问题与缺口。全部为静态阅读结论,未构建、未运行、未截图。
1. 已读文件清单(相对 D:\clword)
1.1 档案 / 课表 / 时间表(Part 06)
| 文件 | 说明 / 关键行 |
|---|---|
repos/ClassIsland/ClassIsland.Shared/Models/Profile/Profile.cs |
档案根模型(484 行):字段默认值 17-32,内置课表群 44-59,解散/删除群 104-137,科目编辑集合 139-217,临时层/临时课表/临时群 313-449,OrderedSchedules 468-477 |
repos/ClassIsland/ClassIsland.Shared/Models/Profile/ClassPlan.cs |
课表(608 行):默认值 15-27,ValidTimeLayoutItems 双向裁剪 54-98,RefreshClassesList 451-491,RefreshIsChangedClass 496-513,RemoveTimePointSafe 515-522 |
repos/ClassIsland/ClassIsland.Shared/Models/Profile/TimeLayout.cs |
时间表(298 行):默认名 17,增删时间点 188-235,Layouts 254-267 |
repos/ClassIsland/ClassIsland.Shared/Models/Profile/TimeLayoutItem.cs |
时间点(256 行):Start/End 62-93,TimeType 文档 119-138,BreakName 175-191,ActionSet 196-205,CompareTo 212-241 |
repos/ClassIsland/ClassIsland.Shared/Models/Profile/ClassInfo.cs |
课程项(122 行) |
repos/ClassIsland/ClassIsland.Shared/Models/Profile/Subject.cs |
科目(141 行):自动 Initial 19-30,三个内置科目 79-101,复姓表 14、GetFirstName 107-140 |
repos/ClassIsland/ClassIsland.Shared/Models/Profile/TimeRule.cs |
触发规则(70 行):默认 WeekDay=0 / Div=0 / DivTotal=2 |
repos/ClassIsland/ClassIsland.Shared/Models/Profile/ClassPlanGroup.cs |
课表群(50 行):两个内置 GUID |
repos/ClassIsland/ClassIsland.Shared/Models/Profile/OrderedSchedule.cs |
预定课表(25 行) |
repos/ClassIsland/ClassIsland.Shared/Enums/TempClassPlanGroupType.cs |
Override / Inherit |
repos/ClassIsland/ClassIsland.Shared/Enums/TimeState.cs |
None/OnClass/PrepareOnClass/Breaking/AfterSchool |
repos/ClassIsland/ClassIsland/Services/LessonsService.cs |
课程服务(646 行):50ms 计时器 39-45,课表选择 143-201,tick 主逻辑 373-527,LoadCurrentClassPlan 549-580,CheckClassPlan 582-607,周次计算 619-635,GetClassIndex 531-541 |
repos/ClassIsland/ClassIsland/Services/ProfileService.cs |
档案服务(438 行):路径 34-53,集控合并 78-137,加载/保存 139-227,临时层 235-328,转正 335-360,临时群 362-415,信任 417-422 |
repos/ClassIsland/ClassIsland/Services/ProfileAnalyzeService.cs |
对象图分析(212 行) |
repos/ClassIsland/ClassIsland/Views/ProfileSettingsWindow.axaml |
档案编辑窗(2004 行):窗口参数 23-30,课表信息面板 53-140,时间表面板 202-232,临时课表/临时层 235-338,课表群 342-413,换课 Flyout 415-446,临时层 Flyout 448+ |
repos/ClassIsland/ClassIsland/Views/ProfileSettingsWindow.axaml.cs |
交互逻辑(1671 行):Open 与页索引 186-262,保存于关闭 264-274,新增时间点 983-1099,调课 1414-1510,导入导出 1565-1668 |
repos/ClassIsland/ClassIsland/Views/ClassPlanDetailsWindow.axaml |
课表详细信息窗(199 行) |
repos/ClassIsland/ClassIsland/Controls/TimeRuleEditControl.axaml |
单双周/星期 Chip UI(54 行) |
repos/ClassIsland/ClassIsland/Controls/WeekOffsetSettingsControl.axaml.cs |
轮换偏移正/反算(132 行) |
repos/ClassIsland/ClassIsland.Shared/Extensions/CsesExtensions.cs |
CSES 双向转换(167 行) |
repos/ClassIsland/ClassIsland/Controls/ProfileTransferProviders/CsesImportProvider.cs |
CSES 导入(72 行) |
repos/ClassIsland/ClassIsland/Controls/ProfileTransferProviders/ClassIsland1ImportProvider.cs |
1.x 导入(58 行) |
repos/ClassIsland/ClassIsland/Views/ExcelImportWindow.xaml.cs |
整文件 #if false(1 行处),WPF 遗留(824 行) |
repos/ClassIsland/ClassIsland/Views/ExcelExportWindow.xaml.cs |
整文件 #if false(1-539 行) |
repos/ClassIsland/ClassIsland/App.Services.xaml.cs |
注册表:窗口 109/145/148/198/204,提醒提供方 198-202,触发器 240-251,规则 253-267,行动 269-276,导入导出 292-296 |
1.2 提醒(Part 07)
| 文件 | 说明 / 关键行 |
|---|---|
repos/ClassIsland/ClassIsland/Services/NotificationHostService.cs |
提醒主机(542 行):优先队列 41,提供方注册 79-114,Setup 128-155,Show 157-176,入队 178-191,链式 205-254,渠道注册 273-284,取消全部 322-335,推送/弹出 337-419,消费者注册 436-470,重新入队 488-522 |
repos/ClassIsland/ClassIsland/Services/NotificationWorkerService.cs |
播放会话(250 行):设置三层覆盖 109-124,计时 82-107,语音/音效 178-208,状态机 211-234 |
repos/ClassIsland/ClassIsland.Core/Models/Notification/NotificationRequest.cs |
v2 请求(200 行) |
repos/ClassIsland/ClassIsland.Core/Models/Notification/NotificationContent.cs |
内容与三个模板工厂(217 行) |
repos/ClassIsland/ClassIsland.Shared/Models/Notification/NotificationPriority.cs |
比较器(63 行,含 IsPriorityOverride 反常行为) |
repos/ClassIsland/ClassIsland.Shared/Models/Notification/NotificationSettings.cs |
提醒设置默认值(116 行) |
repos/ClassIsland/ClassIsland.Shared/Models/Notification/NotificationProviderRegisterInfo.cs |
提供方注册信息(57 行) |
repos/ClassIsland/ClassIsland.Shared/Models/Notification/NotificationRequest.cs |
旧版([Obsolete],249 行) |
repos/ClassIsland/ClassIsland.Core/Enums/Notification/NotificationState.cs |
播放状态(32 行) |
repos/ClassIsland/ClassIsland.Shared/Enums/NotificationModes.cs |
Disabled/EnabledForce/Default |
repos/ClassIsland/ClassIsland.Core/Abstractions/INotificationConsumer.cs |
消费者契约 |
repos/ClassIsland/ClassIsland.Core/Abstractions/Services/NotificationProviders/NotificationProviderBase.cs |
提供方基类(198 行) |
repos/ClassIsland/ClassIsland.Core/Abstractions/Services/NotificationProviders/NotificationChannel.cs |
渠道(104 行) |
repos/ClassIsland/ClassIsland.Shared/Interfaces/INotificationProvider.cs |
默认音效 Uri(37 行) |
repos/ClassIsland/ClassIsland.Core/Attributes/NotificationProviderInfo.cs / NotificationChannelInfo.cs |
特性定义 |
repos/ClassIsland/ClassIsland/Services/NotificationProviders/ClassNotificationProvider.cs |
上下课提醒(325 行) |
.../AfterSchoolNotificationProvider.cs |
放学提醒(61 行) |
.../WeatherNotificationProvider.cs |
天气提醒(173 行) |
.../ManagementNotificationProvider.cs |
集控提醒(81 行) |
.../ActionNotificationProvider.cs |
行动提醒(17 行,仅作为发送源) |
repos/ClassIsland/ClassIsland/Models/NotificationProviderSettings/ClassNotificationSettings.cs |
上下课设置默认值(199 行) |
.../WeatherNotificationProviderSettings.cs |
天气设置默认值(70 行) |
.../AfterSchoolNotificationProviderSettings.cs |
放学设置默认值(33 行) |
repos/ClassIsland/ClassIsland.Controls/NotificationProviders/*.axaml |
气泡内容布局:ClassNotificationProviderControl.axaml(104 行)、AfterSchoolNotificationProvider.axaml(30 行)、WeatherNotificationProviderControl.axaml(47 行) |
repos/ClassIsland/ClassIsland/Controls/MainWindowLine.cs |
消费者与播放流程(815 行):ReceiveNotifications 639-656,模板键解析 658-665,中心点 667-680,ProcessNotification 682-811,AcceptsNotificationRequests 814 |
repos/ClassIsland/ClassIsland/Controls/MainWindowLine.axaml |
行样式:IslandContainerHeight=40(16 行),进度绑定 77 |
repos/ClassIsland/ClassIsland/XamlThemes/FluentTheme/Styles.axaml |
气泡模板与动画(120-197、275-449);SlantedMaskControl 参数 175-180 |
repos/ClassIsland/ClassIsland/XamlThemes/ClassicTheme/Styles.axaml |
经典主题同类样式(136-330) |
repos/ClassIsland/ClassIsland/Controls/SlantedMaskControl.cs |
斜切遮罩(346 行,含 5 区域权重与绘制) |
repos/ClassIsland/ClassIsland/Controls/NotificationEffects/RippleEffect.axaml(.cs) |
强提醒涟漪(32/113 行) |
repos/ClassIsland/ClassIsland/Views/TopmostEffectWindow.axaml(.cs) |
特效窗口(35/135 行),UpdateWindowPos 100-109 |
repos/ClassIsland/ClassIsland/ViewModels/TopmostEffectWindowViewModel.cs |
特效控件集合(24 行) |
repos/ClassIsland/ClassIsland/MainWindow.axaml.cs |
置顶锁 1056-1092,清除全部 1171-1174 |
repos/ClassIsland/ClassIsland/MainWindow.axaml |
右键「清除全部提醒」86-94,行「此行可以显示提醒」425-433 |
repos/ClassIsland/ClassIsland/Views/ClearNotificationButtonWindow.xaml(.cs) |
#if false 遗留,仅 15/18 行 |
repos/ClassIsland/ClassIsland/Services/AudioService.cs |
音频设备共享与播放(143 行) |
repos/ClassIsland/ClassIsland/Services/SpeechService/SystemSpeechService.cs |
系统 TTS 音量映射 |
.../EdgeTtsService.cs |
Edge TTS 音色/缓存/音量 |
repos/ClassIsland/ClassIsland/Views/SettingPages/NotificationSettingsPage.axaml |
提醒设置页(497 行) |
1.3 自动化(Part 08)
| 文件 | 说明 / 关键行 |
|---|---|
repos/ClassIsland/ClassIsland/Services/AutomationService.cs |
自动化服务(465 行):时间点行动 84-108,触发 112-133,恢复 138-167,配置加载 173-233,工作流加载 237-328,触发器加载 334-436 |
repos/ClassIsland/ClassIsland/Services/ActionService.cs |
行动服务(277 行):Invoke/Revert/Interrupt 20-91,行动项执行 93-135,可变列表迭代 137-173,迁移 179-203,菜单树 208-260 |
repos/ClassIsland/ClassIsland/Services/RulesetService.cs |
规则求值(163 行) |
repos/ClassIsland/ClassIsland/Services/WeatherService.cs |
天气规则处理(460 行):规则注册 64-68,各规则 93-221,刷新与预警去重 236-403 |
repos/ClassIsland/ClassIsland/Services/WindowRuleService.cs |
窗口规则处理(111 行) |
repos/ClassIsland/ClassIsland.Core/Models/Automation/Workflow.cs |
工作流(33 行) |
.../TriggerSettings.cs |
触发器设置(61 行) |
repos/ClassIsland/ClassIsland.Shared/Models/Automation/ActionSet.cs |
行动组(128 行) |
.../ActionItem.cs |
行动项(99 行) |
repos/ClassIsland/ClassIsland.Core/Models/Ruleset/{Ruleset,RuleGroup,Rule,StringMatchingSettings}.cs |
规则集模型 |
repos/ClassIsland/ClassIsland.Core/Enums/RulesetLogicalMode.cs |
Or/And |
repos/ClassIsland/ClassIsland.Shared/Enums/ActionSetStatus.cs |
4 状态 |
repos/ClassIsland/ClassIsland.Core/Abstractions/Automation/{TriggerBase,ActionBase}.cs |
基类契约 |
repos/ClassIsland/ClassIsland.Core/Attributes/{TriggerInfo,ActionInfo}.cs |
注册特性 |
repos/ClassIsland/ClassIsland/Services/Automation/Triggers/*.cs |
12 个触发器(逐文件已读) |
repos/ClassIsland/ClassIsland/Services/Automation/Actions/*.cs |
7 个行动(逐文件已读) |
repos/ClassIsland/ClassIsland/Models/Automation/Triggers/*.cs |
5 个触发器设置模型 |
repos/ClassIsland/ClassIsland/Models/Actions/*.cs |
6 个行动设置模型 |
repos/ClassIsland/ClassIsland/Models/Rules/*.cs |
6 个规则设置模型 |
repos/ClassIsland/ClassIsland/Views/SettingPages/AutomationSettingsPage.axaml(.cs) |
自动化设置页(402/167 行) |
repos/ClassIsland/ClassIsland/Models/Settings.cs |
全局默认值(2655 行,按行号引用) |
2. 关键枚举 / 默认值总表(供交叉校验)
2.1 枚举
| 名称 | 值 | 证据 |
|---|---|---|
TimeLayoutItem.TimeType |
0 上课 / 1 课间 / 2 分割线 / 3 行动 | TimeLayoutItem.cs:120-138,246-253 |
TimeState |
0 None / 1 OnClass / 2 PrepareOnClass(预留) / 3 Breaking / 4 AfterSchool | TimeState.cs:6-27 |
TempClassPlanGroupType |
0 Override / 1 Inherit | TempClassPlanGroupType.cs:6-16 |
NotificationState |
None/Queued/Playing/Paused/Cancelled/Completed | NotificationState.cs:6-31 |
NotificationModes |
Disabled=0 / EnabledForce=1 / Default=2 | NotificationModes.cs:6-19 |
ActionSetStatus |
Normal / Invoking / IsOn / Reverting | ActionSetStatus.cs:6-24 |
RulesetLogicalMode |
Or / And | RulesetLogicalMode.cs:6-15 |
WindowStatusRuleSettings.State |
0 正常 / 1 最大化 / 2 最小化 / 3 全屏(默认 1) | WindowStatusRuleSettings.cs:7-27 |
RunActionRunType |
Application/Command/File/Folder/Url(字符串枚举) | RunActionSettings.cs:19-49 |
WeatherNotificationActionSettings.NotificationKind |
0 三天预报 / 1 预警 / 2 逐小时 | WeatherNotificationActionSettings.cs:7 |
2.2 固定 GUID / ID
- 默认课表群
ACAF4EF0-E261-4262-B941-34EA93CB4369;全局课表群00000000-0000-0000-0000-000000000000(ClassPlanGroup.cs:44-49)。 - 提醒提供方:上下课
08F0D9C3-C770-4093-A3D0-02F3D90C24BC、放学8FBC3A26-6D20-44DD-B895-B9411E3DDC51、天气7625DE96-38AA-4B71-B478-3F156DD9458D、集控0117fb4f-5374-434a-97fb-4f5374634a07、行动4B12F124-8585-43C7-AFC5-7BBB7CBE60D6。 - 渠道:准备上课
CDDFE7FF-B904-4C73-B458-82793B2F66E9、上课AFF5B9A4-037C-4A71-8563-C9EA87DDA75C、下课77C9F3FB-0A2A-4B22-BDDF-3C333462B2F9。 - 触发器 12 个 ID、行动 8 个 ID、规则 15 个 ID:见 Part 08 的表格(证据集中在
App.Services.xaml.cs:240-276与各触发器/行动源文件)。
2.3 关键默认值(Part 06/07/08 交叉引用)
| 设置 | 默认 | 证据 |
|---|---|---|
SelectedProfile |
"Default.json" |
Settings.cs:66 |
SingleWeekStartTime |
今天所在周的周日 | Settings.cs:37-42 |
MultiWeekRotationMaxCycle |
4 | Settings.cs:61 |
MultiWeekRotationOffset |
[-1,-1,0,0,0] |
Settings.cs:60 |
DefaultOnClassTimePointMinutes |
40 | Settings.cs:108 |
DefaultBreakingTimePointMinutes |
10 | Settings.cs:109 |
ClassPrepareNotifySeconds |
60 | Settings.cs:43 |
IsProfileEditorClassInfoSubjectAutoMoveNextEnabled |
true | Settings.cs:181 |
IsSwapMode |
true | Settings.cs:210 |
ExpIsExcelImportEnabled |
false | Settings.cs:113 |
| 档案窗口 | 1100×600,MinWidth 750 | ProfileSettingsWindow.axaml:27-28 |
| 课表详情窗口 | 800×500 | ClassPlanDetailsWindow.axaml:17 |
IsNotificationEnabled |
true | Settings.cs:91 |
AllowNotificationSpeech |
false | Settings.cs:153 |
AllowNotificationEffect |
true | Settings.cs:154 |
AllowNotificationSound |
false | Settings.cs:155 |
AllowNotificationTopmost |
true | Settings.cs:156 |
NotificationSoundVolume |
1.0 | Settings.cs:182 |
SpeechVolume |
1.0 | Settings.cs:136 |
EdgeTtsVoiceName |
zh-CN-XiaoxiaoNeural |
Settings.cs:138 |
IsNotificationSoundEnabled(全局兜底层) |
true | Settings.cs:144 |
NotificationEffectRenderingScale |
1.0 | Settings.cs:150 |
NotificationUseStandaloneEffectUiThread |
true | Settings.cs:1837 |
AnimationLevel |
1 | Settings.cs:1851 |
| 遮罩/正文默认时长 | 5s / 5s | NotificationContent.cs:22-23 |
行高 IslandContainerHeight |
40 | MainWindowLine.axaml:16 |
IsAutomationEnabled / IsAutomationWarningVisible / CurrentAutomationConfig |
false / true / "Default" |
Settings.cs:160-162 |
IsOnClassNotificationEnabled 等三个上下课开关 |
true | ClassNotificationSettings.cs:7-9 |
| 室内/户外提前量 | 60 / 600 秒 | ClassNotificationSettings.cs:10-11 |
WeatherAlertSpeed |
7.0 | WeatherNotificationProviderSettings.cs:14 |
| 天气显示模式(预警/预报) | Disabled / Disabled | WeatherNotificationProviderSettings.cs:10-11 |
放学提醒 IsEnabled / NotificationMsg |
true / "今天的课程已结束,请同学们有序离开。" |
AfterSchoolNotificationProviderSettings.cs:9-10 |
NotificationActionSettings.MaskDurationSeconds / ContentDurationSeconds |
5.0 / 10.0 | NotificationActionSettings.cs:14-15 |
SleepActionSettings.Value |
5 秒 | SleepActionSettings.cs:6 |
PreTimePointTriggerSettings |
TargetState=OnClass, TimeSeconds=60 |
PreTimePointTriggerSettings.cs:9-11 |
CronTriggerSettings.CronExpression |
"* * * * *" |
CronTriggerSettings.cs:7 |
ActionSet.Name / IsEnabled / IsRevertEnabled |
"新行动组" / true / false |
ActionSet.cs:77-93 |
3. 未决问题 / 缺口(需 Lead 决策或后续补读)
- 提醒优先级插队语义反常:
NotificationPriority.CompareTo在IsPriorityOverride=true时返回 1(NotificationPriority.cs:47-50),在 .NET 最小堆中意味着更晚出队,与「紧急插队」直觉相反。Part 07 已按「显式定义 + 标注【推断】为历史取反问题」处理;若 Lead 要求逐位一致,需在总纲统一说明。 ClearNotificationButtonWindow为#if false遗留:当前版本没有「清除提醒浮动按钮窗口」;Part 07 明确要求不得实现它,改用右键菜单「清除全部提醒」。若产品要求必须有,属新增功能。- Excel 导入/导出整体被
#if false屏蔽(两个窗口 + DI 注册 +ExpIsExcelImportEnabled=false)。Part 06 已把它标为非首版必做,并给出【推断】格式建议;当前可用的导入导出是 CSES / ClassIsland 1.x / Class Widgets 1.2 / 导出 CSES(App.Services.xaml.cs:292-296)。 - 「静音时段」不存在:Settings 与提醒链路中没有任何免打扰时段字段,只有
-q静默启动后 10 秒丢弃提醒(MainWindowLine.cs:698-704)。Part 07 已声明不得虚构,并给出可选扩展模型(标注【推断】)。 - 强提醒渲染缩放自动推算公式缺失:
IsNotificationEffectRenderingScaleAutoSet=true时的具体系数未在TopmostEffectWindow.cs中给出,Part 07 标【推断】。 - Class Widgets 1.2 导入转换逻辑未细读:
ClassWidgetsProfileTransferHelper.cs尚未逐行阅读,Part 06 只按注册表与通用导入契约要求实现(文件名/流程/失败提示),未写字段映射细则。若需要像素级导入转换,需补读该文件。 ClassIslandV1ProfileTransferHelper与ClassWidgetsProfileTransferHelper同样未逐行读;Part 06 只覆盖 CSES 的完整映射算法。- 时间线缩放常量缺失:
ProfileSettingsWindow.axaml.cs的 ZoomIn/ZoomOut 只做 UI 事件,未读取具体缩放范围常量,Part 06 标【推断】为 0.5x–3x / 步长 0.1。 - 档案 JSON 损坏的容错细节:
ConfigureFileHelper.LoadConfig未逐行读,Part 06 要求「回退空档案 + 保留 .bak」并标【推断】。 ScheduleDataGrid单元格渲染细节(科目简称/颜色/换课标记的视觉)未细读,Part 06 标【推断】,视觉规格建议归入 Part 04/05 由 ui-island 统一。ProfileSettingsWindow.axaml的 2004 行中仅精读约 500 行(结构、课表/时间表/临时/群/换课/导入导出区域)。剩余部分(约 900-1600 行为止的时间线列表模板、日程调整表格模板、附加设置项)只做了 outline 级 grep,像素细节若需要请 ui-island 或 windows part 补充。- 接口文件
ILessonsService/IProfileService未逐行读:只依据实现类与调用点推断契约;对外接口方法名(如GetCyclePositionsByDate、CreateTempClassPlan)已在 Part 06 使用实现类签名表述。 ActionSetRunningControl/TriggerSettingsControl/ActionControl/RulesetControl的内部 UI 未精读(仅确认存在与绑定方式),Part 08 只描述宿主页布局与行为契约;控件内部像素规格建议由 windows part 统一。- 天气图标模板 / WeatherInfo 数据结构(
ClassIsland.Core/Models/Weather)未展开,Part 07 只用到Alerts[].Title/Detail/Type/PubTime/Images、ForecastDaily.Weather/SunRiseSet、Minutely.Precipitation.RainRemainingMinutes、Current.Weather、UpdateTime。若需要完整天气数据 schema,需补读该目录(可能属 Part 05 天气组件范围)。 GetSettingsDeltaTime的附加设置来源:ClassNotificationProvider使用IAttachedSettingsHostService;附加设置体系(AttachedSettings)属跨 part 内容,Part 06/07 只按「按优先级取第一个启用项」描述,未定义完整附加设置模型,建议由 Lead 在总纲指定归属(可能在 Part 05 或 Part 13)。
3.1 裁决与修补(Lead 裁决,2026-11-12 修补轮)
本轮按 Lead 裁决修补 parts/06、parts/07、parts/08(不重写整篇),结论如下:
- Excel 导入/导出 = P1 必须实现:用
xlsx(SheetJS)重建,禁止依赖 ReoGrid/WPF/OfficeOpenXml。ClassIsland 2.1 源码两个窗口整体#if false,且ExcelImportViewModel/ExcelExportViewModel类型在仓库中已不存在(全仓检索无命中,属不可编译骨架),只能作布局参考。向导 UI 归 Part 11;Part 06 已新增6.9.1定义列格式、映射算法、往返一致性、预检规则与导出参数默认值(默认值标【推断】)。CSES 导入/导出标 P0。 - ClearNotificationButtonWindow:维持「不实现(
#if false遗留)」,清除提醒统一用右键菜单「清除全部提醒」→CancelAllNotifications。 - 静音时段:维持「ClassIsland 2.1 不存在、不得虚构」;可选扩展模型改为明确 P2、默认关闭,并要求命中时段时只屏蔽音效/语音/置顶/特效、不丢弃提醒。
- NotificationPriority = 最终确定语义:排序键
(提供方优先级下标升序) → (Level: Emergency>High>Normal>Low) → (入队序号升序);新增NotificationLevel字段(默认Normal);记录原比较器IsPriorityOverride取反的反常行为并声明按语义修正;旧字段兼容映射(读入 true→Emergency,写出 High/Emergency→true)。Part 07 §7.2 已删除互相矛盾的「逐位一致」表述。 - 附加设置 AttachedObjects = 2.x 现役机制:
ClassIsland.Shared/AttachableSettingsObject.cs:15定义Dictionary<Guid, object?> AttachedObjects;2.xAttachedSettingsControlPresenter读取:241、回写:361。Part 06 新增 §6.10(定义/注册表 GUID/读取优先级/写回纪律/1.7 兼容/与档案分析关系/边界),Part 07 补全提醒侧的数据来源、GUID 与字段。注意:实际继承AttachableSettingsObject的是ClassPlan/ClassInfo/TimeLayout/TimeLayoutItem/Subject;Profile不继承(Profile.cs:14),故附加设置不能挂档案根——已在 §6.10.1 按源码写明。 - 天气服务:Part 07 末尾新增 §7.14(刷新/缓存、定位与城市来源、完整 JSON schema、预警去重、图标主题、断网降级与重试、消费方分工、验收)。数据源证据为
Services/WeatherService.cs全文、ClassIsland.Core/Models/Weather/*全部 18 个模型、IWeatherService、ILocationService、WeatherSettingsPage.axaml、Assets/XiaomiWeather/xiaomi_weather_status.json。 - 其余未细读项(Class Widgets 1.2 / ClassIsland 1.x 导入 helper 的字段映射、
ScheduleDataGrid单元格视觉)按要求保持【推断】,本轮不补读。 - 原 §3 第 3、4、14、15 条已被上述裁决覆盖/关闭;第 1 条已由裁决 4 关闭;第 5、8、9、10、11、12、13 条仍为开放缺口,保留原描述。
3.1.1 本轮补读文件清单(新增证据)
| 文件 | 用途 |
|---|---|
repos/ClassIsland/ClassIsland.Shared/AttachableSettingsObject.cs(62 行) |
AttachedObjects 字段 15、GetAttachedObject 23-32、写入 39-42、默认值重载 51-61 |
repos/ClassIsland/ClassIsland.Shared/Interfaces/IAttachedSettings.cs(40 行) |
IsAttachSettingsEnabled 与 GetIsEnabled(含 JsonElement 兼容) |
repos/ClassIsland/ClassIsland.Core/Abstractions/Services/IAttachedSettingsHostService.cs(44 行) |
4 个注册集合(14-22)、GetAttachedSettingsByPriority 24-43 |
repos/ClassIsland/ClassIsland/Services/AttachedSettingsHostService.cs(13 行) |
实例侧集合 |
repos/ClassIsland/ClassIsland.Core/Attributes/AttachedSettingsControlInfo.cs / AttachedSettingsUsage.cs |
注册特性(GUID/名称/图标/hasEnabledState/targets) |
repos/ClassIsland/ClassIsland.Core/Enums/AttachedSettingsTargets.cs / AttachedSettingsControlState.cs |
Flags 目标值、节点状态 Disabled/Enabled/Override |
repos/ClassIsland/ClassIsland.Core/Controls/AttachedSettingsControlPresenter.axaml.cs(421 行) |
读取 241、目标类型映射 245-253、状态提示 272-341、写回纪律 354-362 |
repos/ClassIsland/ClassIsland/Helpers/AttachedSettingsControlHelper.cs(69 行) |
控件侧读写 helper |
repos/ClassIsland/ClassIsland/Controls/AttachedSettingsControls/*.axaml.cs(4 个) |
4 个附加设置的 GUID/名称/图标/targets/hasEnabledState |
repos/ClassIsland/ClassIsland/Models/AttachedSettings/{ClassNotification,AfterSchoolNotification,WeatherNotification}.cs、ClassIsland.Core/Models/AttachedSettings/LessonControlAttachedSettings.cs |
附加设置模型与默认值 |
repos/ClassIsland/ClassIsland/Models/AttachedSettingsNodeWithState.cs |
节点+状态模型 |
repos/ClassIsland/doc/AttachedSettings.md(88 行) |
官方优先级说明 Subject→TimeLayoutItem→ClassPlan→TimeLayout(50-57) |
repos/ClassIsland/ClassIsland.Core/Models/Weather/*.cs(18 个,36+23+22+14+9+8+40+9+8+18+33+29+21+9+12+10+32 行) |
天气完整 schema 与派生字段 |
repos/ClassIsland/ClassIsland.Core/Abstractions/Services/IWeatherService.cs、ClassIsland.Platforms.Abstractions/Services/ILocationService.cs |
天气服务契约、定位契约 |
repos/ClassIsland/ClassIsland/Views/SettingPages/WeatherSettingsPage.axaml(327 行) |
城市搜索/位置设置/图标包/排除预警/不使用 TLS 的 UI 文案 |
repos/ClassIsland/ClassIsland/Assets/XiaomiWeather/xiaomi_weather_status.json |
天气码→中文文案表(0-35、53、301、302、99) |
repos/ClassIsland/ClassIsland/Views/ExcelImportWindow.xaml.cs(824 行,#if false) |
时间点解析正则/数字个数 422-458、自动补课间 502-522、科目 Contains 匹配 587-639、完成导入 695-708 |
repos/ClassIsland/ClassIsland/Views/ExcelExportWindow.xaml.cs(539 行,#if false) |
星期名 340-350、单元格生成 352-473、列宽/行高/边框 446-472、保存/打开 486-516 |
4. 与其他 part 的边界约定(避免重复/冲突)
- 窗口/控件像素级细节:主界面行、组件、主题样式以 Part 04/05/03 为准;本三篇只给与业务强相关的数值(气泡动画、斜切遮罩、特效窗口、课表窗口尺寸),并已注明来源,便于交叉核对。
- 数据存储路径、备份、迁移、Settings/Profile JSON schema 总表:Part 13;本三篇给出的是业务字段语义与默认值,字段名保持一致(
Actions而非ActionItems、ClassPlans、OrderedSchedules等)。 - 动画总表:Part 14;本三篇提供气泡/涟漪的时长与曲线原始值,建议 Part 14 直接引用本节,勿另行估算。
- 设置中心页面树:Part 10;本三篇只描述「提醒」「自动化」两页的结构与文案,页面注册顺序由 Part 10 统一。
- Excel 导入/导出向导 UI 归 Part 11;数据契约/列格式/往返一致性/预检以 Part 06 §6.9.1 为准,Part 11 只做步骤机与表单,不得另定格式。
- 附加设置模型(AttachedObjects)以 Part 06 §6.10 为唯一事实源;Part 05(组件)/Part 13(存储 schema)如需引用,必须沿用同名字段与同一优先级链,不得另立模型。
- 天气服务与数据模型以 Part 07 §7.14 为准;Part 05 的天气组件只消费
LastWeatherInfo与SelectedWeatherIconTemplate,不得自行请求或另定义 schema。 - 提醒优先级语义(三级排序键 +
NotificationLevel)以 Part 07 §7.2 为准,Part 08 的「显示提醒」行动与集控提醒都按此映射,不得各自定义顺序。