fix: import unpublished exam rooms and add opt-in school HTML feedback
This commit is contained in:
@@ -8,6 +8,8 @@ import '../../../data/json_schedule_import.dart';
|
||||
import '../../../domain/exam_schedule.dart';
|
||||
import '../../../domain/undergraduate_exam_query.dart';
|
||||
import '../../../services/diagnostic_log.dart';
|
||||
import '../../../services/school_page_diagnostic.dart';
|
||||
import 'activity_data.dart';
|
||||
import 'navigation_policy.dart';
|
||||
import 'page_probe.dart';
|
||||
import 'timetable_adapter.dart';
|
||||
@@ -206,6 +208,7 @@ class UndergraduateSession extends ChangeNotifier {
|
||||
),
|
||||
);
|
||||
Future<void> openTimetable() async {
|
||||
SchoolPageDiagnostic.instance.clear();
|
||||
DiagnosticLog.instance.add(
|
||||
'login_opened',
|
||||
fields: {'school': 'undergraduate', 'phase': 'timetable'},
|
||||
@@ -222,6 +225,7 @@ class UndergraduateSession extends ChangeNotifier {
|
||||
}
|
||||
|
||||
Future<void> openExams(UndergraduateExamQuery value) async {
|
||||
SchoolPageDiagnostic.instance.clear();
|
||||
DiagnosticLog.instance.add(
|
||||
'login_opened',
|
||||
fields: {
|
||||
@@ -434,6 +438,10 @@ class UndergraduateSession extends ChangeNotifier {
|
||||
return;
|
||||
}
|
||||
if (pages.length != 1) throw const FormatException('排考结果页面不明确');
|
||||
SchoolPageDiagnostic.instance.remember(
|
||||
pages.single.html,
|
||||
pages.single.url,
|
||||
);
|
||||
final part = UndergraduateExamAdapter.extract(
|
||||
pages.single.html,
|
||||
expectedTerm: query!.term,
|
||||
@@ -519,6 +527,10 @@ class UndergraduateSession extends ChangeNotifier {
|
||||
if (pages.length != 1) {
|
||||
throw const FormatException('请先在学校网页打开完整课表,再点击导入。');
|
||||
}
|
||||
SchoolPageDiagnostic.instance.remember(
|
||||
pages.single.html,
|
||||
pages.single.url,
|
||||
);
|
||||
final draft = UndergraduateTimetableAdapter.extract(
|
||||
pages.single.html,
|
||||
pages.single.url,
|
||||
@@ -531,6 +543,18 @@ class UndergraduateSession extends ChangeNotifier {
|
||||
_emit();
|
||||
} catch (error) {
|
||||
if (_valid(g) && d == _document) {
|
||||
DiagnosticLog.instance.add(
|
||||
'school_read_failed',
|
||||
fields: {
|
||||
'school': 'undergraduate',
|
||||
'phase': 'timetable',
|
||||
'code': error is UndergraduateActivityException
|
||||
? error.code
|
||||
: error.runtimeType.toString(),
|
||||
if (error is UndergraduateActivityException)
|
||||
'count': error.activityNumber,
|
||||
},
|
||||
);
|
||||
message = '导入未完成:$error';
|
||||
_emit();
|
||||
}
|
||||
@@ -554,6 +578,7 @@ class UndergraduateSession extends ChangeNotifier {
|
||||
}
|
||||
|
||||
Future<void> reauthenticate() async {
|
||||
SchoolPageDiagnostic.instance.clear();
|
||||
await _logoutFuture;
|
||||
if (_disposed) return;
|
||||
_reset();
|
||||
@@ -566,6 +591,7 @@ class UndergraduateSession extends ChangeNotifier {
|
||||
}
|
||||
|
||||
void invalidateAuthentication() {
|
||||
SchoolPageDiagnostic.instance.clear();
|
||||
_reset();
|
||||
_active = false;
|
||||
hasOpened = false;
|
||||
@@ -601,6 +627,7 @@ class UndergraduateSession extends ChangeNotifier {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
SchoolPageDiagnostic.instance.clear();
|
||||
_disposed = true;
|
||||
_active = false;
|
||||
_generation++;
|
||||
|
||||
Reference in New Issue
Block a user