getTimeTable method

Future<TimeTable> getTimeTable(
  1. Login login,
  2. DateTime date, [
  3. bool clearCache = false
])

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