101 lines
3.1 KiB
Dart
101 lines
3.1 KiB
Dart
import 'dart:collection';
|
|
import 'dart:convert';
|
|
import 'dart:developer';
|
|
|
|
import 'package:intl/intl.dart';
|
|
import 'package:marianum_mobile/api/apiResponse.dart';
|
|
import 'package:marianum_mobile/api/webuntis/queries/authenticate/authenticate.dart';
|
|
import 'package:marianum_mobile/api/webuntis/queries/authenticate/authenticateResponse.dart';
|
|
import 'package:marianum_mobile/api/webuntis/queries/getHolidays/getHolidaysCache.dart';
|
|
import 'package:marianum_mobile/api/webuntis/queries/getHolidays/getHolidaysResponse.dart';
|
|
import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRoomsCache.dart';
|
|
import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRoomsResponse.dart';
|
|
import 'package:marianum_mobile/api/webuntis/queries/getSubjects/getSubjectsCache.dart';
|
|
import 'package:marianum_mobile/api/webuntis/queries/getSubjects/getSubjectsResponse.dart';
|
|
import 'package:marianum_mobile/data/dataHolder.dart';
|
|
|
|
import '../../api/webuntis/queries/getTimetable/getTimetable.dart';
|
|
import '../../api/webuntis/queries/getTimetable/getTimetableCache.dart';
|
|
import '../../api/webuntis/queries/getTimetable/getTimetableParams.dart';
|
|
import '../../api/webuntis/queries/getTimetable/getTimetableResponse.dart';
|
|
|
|
class TimetableProps extends DataHolder {
|
|
late DateTime queryDate;
|
|
|
|
GetTimetableResponse? _getTimetableResponse;
|
|
GetTimetableResponse get getTimetableResponse => _getTimetableResponse!;
|
|
|
|
GetRoomsResponse? _getRoomsResponse;
|
|
GetRoomsResponse get getRoomsResponse => _getRoomsResponse!;
|
|
|
|
GetSubjectsResponse? _getSubjectsResponse;
|
|
GetSubjectsResponse get getSubjectsResponse => _getSubjectsResponse!;
|
|
|
|
GetHolidaysResponse? _getHolidaysResponse;
|
|
GetHolidaysResponse get getHolidaysResponse => _getHolidaysResponse!;
|
|
|
|
|
|
TimetableProps() {
|
|
nearest();
|
|
}
|
|
|
|
@override
|
|
List<ApiResponse?> properties() {
|
|
return [_getTimetableResponse, _getRoomsResponse, _getSubjectsResponse, _getHolidaysResponse];
|
|
}
|
|
|
|
@override
|
|
void run() {
|
|
GetTimetableCache(
|
|
day: int.parse(DateFormat("yyyyMMdd").format(queryDate)),
|
|
onUpdate: (GetTimetableResponse data) => {
|
|
_getTimetableResponse = data,
|
|
notifyListeners(),
|
|
}
|
|
);
|
|
|
|
GetRoomsCache(
|
|
onUpdate: (GetRoomsResponse data) => {
|
|
_getRoomsResponse = data,
|
|
notifyListeners(),
|
|
}
|
|
);
|
|
|
|
GetSubjectsCache(
|
|
onUpdate: (GetSubjectsResponse data) => {
|
|
_getSubjectsResponse = data,
|
|
notifyListeners(),
|
|
}
|
|
);
|
|
|
|
GetHolidaysCache(
|
|
onUpdate: (GetHolidaysResponse data) => {
|
|
_getHolidaysResponse = data,
|
|
notifyListeners(),
|
|
}
|
|
);
|
|
}
|
|
|
|
void nearest() {
|
|
queryDate = DateTime.now();
|
|
while(isWeekend(queryDate)) {
|
|
next();
|
|
}
|
|
run();
|
|
}
|
|
|
|
void next({previous = false}) {
|
|
do {
|
|
if(previous) {
|
|
queryDate = queryDate.subtract(const Duration(days: 1));
|
|
} else {
|
|
queryDate = queryDate.add(const Duration(days: 1));
|
|
}
|
|
} while(isWeekend(queryDate));
|
|
run();
|
|
}
|
|
|
|
bool isWeekend(DateTime queryDate) {
|
|
return queryDate.weekday == DateTime.saturday || queryDate.weekday == DateTime.sunday;
|
|
}
|
|
} |