示例#1
0
        // 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));
        }
示例#2
0
        /// <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");
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }