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 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; } }