import '../../data/json_schedule_import.dart'; import 'school_navigation_policy.dart'; class UnsupportedSchoolLayout implements Exception { @override String toString() => '学校课表识别待联调,当前课表保持不变。'; } class SchoolPageAdapter { ImportDraft extract(String html, Uri source) { // A real authenticated timetable fixture is required before registering a parser. // Unknown HTML must never erase the student's last valid imported timetable. throw UnsupportedSchoolLayout(); } } class SchoolReader { SchoolReader(this.adapter); final SchoolPageAdapter adapter; Future? _pending; bool get busy => _pending != null; Future read(Uri origin, Future Function() getHtml) { if (_pending != null) return _pending!; _pending = Future(() async { try { if (!SchoolNavigationPolicy.isTimetable(origin)) { throw UnsupportedSchoolLayout(); } return adapter.extract(await getHtml(), origin); } finally { _pending = null; } }); return _pending!; } }