feat: deliver Riverside Schedule seven-day grid and school HTML import
This commit is contained in:
@@ -35,6 +35,9 @@ class SchoolSession extends ChangeNotifier {
|
||||
return NavigationDecision.navigate;
|
||||
},
|
||||
onPageStarted: (_) {
|
||||
_pageGeneration++;
|
||||
_reader.invalidate();
|
||||
pendingDraft = null;
|
||||
if (!hasOpened) {
|
||||
return;
|
||||
}
|
||||
@@ -72,6 +75,7 @@ class SchoolSession extends ChangeNotifier {
|
||||
hasOpened = false,
|
||||
formReady = false;
|
||||
bool get busy => _loading || _submitting || _reader.busy;
|
||||
int _pageGeneration = 0;
|
||||
ImportDraft? pendingDraft;
|
||||
String message = '请通过学校统一身份认证登录。';
|
||||
String get statusLabel => switch (connectionState) {
|
||||
@@ -79,7 +83,7 @@ class SchoolSession extends ChangeNotifier {
|
||||
SchoolConnectionState.authenticating => '请在学校页面完成认证',
|
||||
SchoolConnectionState.connected => '学校认证已确认',
|
||||
SchoolConnectionState.expired => '学校登录已过期',
|
||||
SchoolConnectionState.unknown => '学校页面已打开 · 课表识别待联调',
|
||||
SchoolConnectionState.unknown => '学校页面已打开 · 等待完整课表',
|
||||
};
|
||||
static final authUrl = Uri.parse(
|
||||
'https://idas.uestc.edu.cn/authserver/login',
|
||||
@@ -134,26 +138,33 @@ class SchoolSession extends ChangeNotifier {
|
||||
return;
|
||||
}
|
||||
_loading = false;
|
||||
final generation = _pageGeneration;
|
||||
final uri = Uri.tryParse(url);
|
||||
if (uri != null && SchoolNavigationPolicy.canInjectCredentials(uri)) {
|
||||
connectionState = connectionState == SchoolConnectionState.connected
|
||||
? SchoolConnectionState.expired
|
||||
: SchoolConnectionState.authenticating;
|
||||
try {
|
||||
formReady = _truth(
|
||||
final ready = _truth(
|
||||
await web.runJavaScriptReturningResult(_readyScript),
|
||||
);
|
||||
if (!hasOpened || generation != _pageGeneration) return;
|
||||
formReady = ready;
|
||||
} catch (_) {
|
||||
if (!hasOpened || generation != _pageGeneration) return;
|
||||
formReady = false;
|
||||
}
|
||||
message = formReady ? '可以使用河畔界面登录;验证码会在学校页面完成。' : '请使用学校原页面完成认证。';
|
||||
message = formReady ? '可以使用应用界面登录;验证码会在学校页面完成。' : '请使用学校原页面完成认证。';
|
||||
} else if (uri != null && SchoolNavigationPolicy.isTimetable(uri)) {
|
||||
connectionState = SchoolConnectionState.unknown;
|
||||
message = '已打开课表页面,正在核对课程结构。';
|
||||
try {
|
||||
pendingDraft = await readTimetable();
|
||||
final draft = await readTimetable();
|
||||
if (!hasOpened || generation != _pageGeneration) return;
|
||||
pendingDraft = draft;
|
||||
connectionState = SchoolConnectionState.connected;
|
||||
} catch (error) {
|
||||
if (!hasOpened || generation != _pageGeneration) return;
|
||||
message = error is UnsupportedSchoolLayout
|
||||
? error.toString()
|
||||
: '课表读取未完成,已有课表保持不变。';
|
||||
@@ -238,6 +249,8 @@ class SchoolSession extends ChangeNotifier {
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
_pageGeneration++;
|
||||
_reader.invalidate();
|
||||
hasOpened = false;
|
||||
await WebViewCookieManager().clearCookies();
|
||||
await web.clearCache();
|
||||
|
||||
Reference in New Issue
Block a user