public async Task <(bool TokenExpired, List <ClassCache> classCaches)> UpdateTimetable(string accountId, string token, int reminderIndex, int weekCount = _DefaultWeekCount)
        {
            DateTime          startOfWeek = WeekHelper.GetStartDayOfWeek();
            DateTime          endOfWeek   = startOfWeek.AddDays(WeekHelper.Interval_EndOfWeek);
            List <ClassCache> caches      = new List <ClassCache>();

            for (int i = 0; i < weekCount; i++)
            {
                var result = await GetTimetable(startOfWeek, endOfWeek, accountId, token);

                if (result.TokenExpired)
                {
                    return(true, null);
                }

                ClassCache cache = await LoadCache(startOfWeek, accountId);

                if (result.Classes != null)
                {
                    cache = await UpdateTimetableInternal(result.Classes, cache, startOfWeek, accountId, reminderIndex);
                }
                caches.Add(cache);

                startOfWeek = startOfWeek.AddDays(WeekHelper.Interval_StartOfNextWeek);
                endOfWeek   = endOfWeek.AddDays(WeekHelper.Interval_StartOfNextWeek);
            }

            return(false, caches);
        }
        // To meet the Microsoft Store submission requirement.
        public static ClassCache LoadTestCache()
        {
            ClassCache ret      = new ClassCache(WeekHelper.GetStartDayOfWeek(), new List <Class>(), new FileInfo("test.json"));
            DateTime   baseTime = WeekHelper.GetStartDayOfWeek().AddDays(WeekHelper.Interval_StartOfNextWeek).AddHours(9);

            ret.ClassList.Add(new Class
            {
                ModuleCode = "EAP021",
                Location   = "Foundation Building-FB321",
                StartTime  = baseTime,
                EndTime    = baseTime.AddHours(2)
            });
            ret.ClassList.Add(new Class
            {
                ModuleCode = "MTH013",
                Location   = "Science Building Block B-SB222",
                StartTime  = baseTime.AddDays(1).AddHours(6),
                EndTime    = baseTime.AddDays(1).AddHours(8)
            });
            ret.ClassList.Add(new Class
            {
                ModuleCode = "CSE001",
                Location   = "Science Building Block A-SA101",
                StartTime  = baseTime.AddDays(2).AddHours(2),
                EndTime    = baseTime.AddDays(2).AddHours(4)
            });
            ret.ClassList.Add(new Class
            {
                ModuleCode = "EAP021",
                Location   = "Foundation Building-FB321",
                StartTime  = baseTime.AddDays(3).AddHours(2),
                EndTime    = baseTime.AddDays(3).AddHours(4)
            });
            ret.ClassList.Add(new Class
            {
                ModuleCode = "MTH013",
                Location   = "Science Building Block B-SB222",
                StartTime  = baseTime.AddDays(3).AddHours(6),
                EndTime    = baseTime.AddDays(3).AddHours(8)
            });
            ret.ClassList.Add(new Class
            {
                ModuleCode = "MTH007",
                Location   = "Science Building Block D-SD325",
                StartTime  = baseTime.AddDays(4).AddHours(2),
                EndTime    = baseTime.AddDays(4).AddHours(4)
            });
            return(ret);
        }