45 lines
1.4 KiB
Dart
45 lines
1.4 KiB
Dart
import '../../../../api/marianumconnect/queries/timetable_get_week/timetable_get_week_response.dart';
|
|
|
|
enum LessonStatus {
|
|
cancelled,
|
|
event,
|
|
irregular,
|
|
teacherChanged,
|
|
duty,
|
|
past,
|
|
ongoing,
|
|
regular,
|
|
}
|
|
|
|
class LessonStatusClassifier {
|
|
/// Mirrors the legacy Webuntis classifier: cancelled trumps everything,
|
|
/// then event (subject-less lessons such as Wandertag), then irregular
|
|
/// (status from the backend or a slot without an assigned teacher), then
|
|
/// teacherChanged when the backend reports a substitution swap, then
|
|
/// duty (Aufsicht/Sprechstunde/…) so they stand out from regular
|
|
/// classroom lessons, then the time-based past/ongoing/regular states.
|
|
static LessonStatus classify(
|
|
McTimetableEntry entry,
|
|
DateTime startTime,
|
|
DateTime endTime,
|
|
DateTime now, {
|
|
bool isEvent = false,
|
|
bool isDuty = false,
|
|
}) {
|
|
if (entry.status == 'CANCELLED') return LessonStatus.cancelled;
|
|
if (isEvent) return LessonStatus.event;
|
|
if (entry.status == 'IRREGULAR' || entry.teachers.isEmpty) {
|
|
return LessonStatus.irregular;
|
|
}
|
|
if (entry.teachers.any((t) => (t.originalShortName ?? '').isNotEmpty)) {
|
|
return LessonStatus.teacherChanged;
|
|
}
|
|
if (isDuty) return LessonStatus.duty;
|
|
if (endTime.isBefore(now)) return LessonStatus.past;
|
|
if (startTime.isBefore(now) && endTime.isAfter(now)) {
|
|
return LessonStatus.ongoing;
|
|
}
|
|
return LessonStatus.regular;
|
|
}
|
|
}
|