getTimeTable method
Implementation
Future<TimeTable> getTimeTable(
Login login,
DateTime date, [
bool clearCache = false,
]) async {
final cacheKey = date.extractDateWith().millisecondsSinceEpoch;
if (!clearCache && _cache.containsKey(cacheKey)) return _cache[cacheKey]!;
final weekStart = date.extractDateWith(day: date.day - date.weekday + 1);
final weekEnd = date.extractDateWith(day: date.day - date.weekday + 7);
final timetableRes = await auth_api.getTimeTable(weekStart, weekEnd, login);
final timetable = TimeTableAdapter.from(timetableRes);
for (var ttDay in timetableRes.dayTable) {
_cache[ttDay.date.millisecondsSinceEpoch] = TimeTable(
timetable.schoolHourEvents
.where((e) => e.timeFrom.isSameDate(ttDay.date)),
timetable.events.where((e) => e.timeFrom.isSameDate(ttDay.date)),
timetable.allDayEvents.where((e) => e.date.isSameDate(ttDay.date)),
);
}
for (int i = 0; i < 7; ++i) {
_cache.putIfAbsent(
weekStart
.extractDateWith(day: weekStart.day + i)
.millisecondsSinceEpoch,
() => TimeTable([], [], []),
);
}
return _cache[cacheKey]!;
}