// ReSharper disable once UnusedMember.Global public IActionResult OnGet() { if (string.IsNullOrWhiteSpace(Request.QueryString.Value)) { throw new Exception("Неверный запрос на получение календаря."); } var encodedModel = Request.QueryString.Value.Substring(1); SettingsModel = CalendarSettingsModel.Deserialize(encodedModel); var schedule = GetSchedule(SettingsModel); var events = schedule.Matrix .Cast <CalendarDayModel>() .SelectMany(x => x.Events) .ToArray(); var hiddenLessonIds = events.Where(x => x.IsHiddenByUser) .Select(x => x.Color.ToString() + x.Date.ToString()) .Distinct() .ToArray(); var filteredEvents = events .DistinctBy(x => x.Color.ToString() + x.Date.ToString()) .Where(x => !hiddenLessonIds.Contains(x.Color.ToString() + x.Date.ToString())) .ToArray(); var resultIcal = GetIcalContent(filteredEvents); return(Content(resultIcal, "text/plain", Encoding.UTF8)); }
/// <summary>Обработчик запросов пользоателя.</summary> // ReSharper disable once UnusedMember.Global public void OnGet() { var encodedModel = Request.QueryString.Value == string.Empty ? string.Empty : Request.QueryString.Value.Substring(1); encodedModel = encodedModel.Replace("g=", ""); // поддержка старого формата ссылок. if (encodedModel.Length < 3 && Request.Cookies.TryGetValue("link", out var link)) { Response.Redirect(link); } SettingsModel = CalendarSettingsModel.Deserialize(encodedModel); //todo: shadow legend toggler CalendarModel = GetSchedule(SettingsModel); if (SettingsModel.Items.Any()) { Response.Cookies.Append("link", Request.GetDisplayUrl(), new CookieOptions { MaxAge = TimeSpan.FromDays(365) }); } else { Response.Cookies.Delete("link"); } }
private CalendarPageViewModel GetSchedule(CalendarSettingsModel settingsModel) { var queryModel = new GetCalendarQueryModel { ItemHashes = settingsModel.Items, HiddenEvents = _mapper.Map <List <HidableEventEntity> >(settingsModel.HiddenEvents).ToArray(), ShowWindows = settingsModel.ShowWindows, CountOfWeeksAfterCurrent = settingsModel.CountOfWeeksAfterCurrent }; var queryResult = _getCalendarQuery.Execute(queryModel); var calendarModel = queryResult.IsSuccessful ? _mapper.Map <CalendarPageViewModel>(queryResult.Data) : new CalendarPageViewModel(); if (settingsModel.Items.Length > calendarModel.Legend.Count) { calendarModel.ErrorMessage = "Сайт расписания ТПУ не вернул расписание для одной или нескольких групп. " + "Подождите 30 секунд или пару минут и повторите попытку..."; } var newMatrix = new CalendarDayModel[2, 6]; for (var i = 0; i < 2; i++) { for (var j = 0; j < 6; j++) { newMatrix[i, j] = calendarModel.Matrix[i, j]; newMatrix[i, j].Events = newMatrix[i, j].Events .GroupBy(x => (x.Date, x.Type, x.Name, x.Color)) .Select(gr => { var model = gr.First(); model.Summary = gr.Select(x => (x.Place, x.Teacher)).ToArray(); return(model); }) .OrderBy(x => x.Date) .ThenBy(x => x.Color.ToArgb()) .ToList(); } } calendarModel.Matrix = newMatrix; return(calendarModel); }
private CalendarPageViewModel GetSchedule(CalendarSettingsModel settingsModel) { var queryModel = new GetCalendarQueryModel { ItemHashes = settingsModel.Items, HiddenEvents = _mapper.Map <List <HidableEventEntity> >(settingsModel.HiddenEvents).ToArray(), ShowWindows = settingsModel.ShowWindows, CountOfWeeksAfterCurrent = settingsModel.CountOfWeeksAfterCurrent }; var queryResult = _getCalendarQuery.Execute(queryModel); var calendarModel = queryResult.IsSuccessful ? _mapper.Map <CalendarPageViewModel>(queryResult.Data) : new CalendarPageViewModel(); return(calendarModel); }