From 7b97640ce5af31eda1378364f209ebf85c45b313 Mon Sep 17 00:00:00 2001 From: Sergey Karmanov Date: Thu, 25 Sep 2025 18:34:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=20=D0=B8=D0=BD=D1=84=D0=BE?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B2=20ICS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SfeduSchedule/Services/ModeusService.cs | 96 ++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/SfeduSchedule/Services/ModeusService.cs b/SfeduSchedule/Services/ModeusService.cs index 5a8a463..9cd100c 100644 --- a/SfeduSchedule/Services/ModeusService.cs +++ b/SfeduSchedule/Services/ModeusService.cs @@ -125,10 +125,102 @@ namespace SfeduSchedule.Services foreach (var e in scheduleJson.Embedded.Events) { + // Получение названия аудитории для события + string? roomName = null; + if (scheduleJson.Embedded.EventLocations != null && scheduleJson.Embedded.Rooms != null && + scheduleJson.Embedded.EventRooms != null) + { + var eventLocation = scheduleJson.Embedded.EventLocations.FirstOrDefault(el => el.EventId == e.Id); + if (eventLocation != null + && eventLocation.Links != null + && eventLocation.Links.EventRooms != null + && eventLocation.Links.EventRooms.Href != null) + { + var eventRoomId = eventLocation.Links.EventRooms.Href.Split('/').Last(); + var EventRoom = + scheduleJson.Embedded.EventRooms.FirstOrDefault(er => + er.Id.ToString().ToLower() == eventRoomId); + if (EventRoom != null) + { + var roomId = EventRoom.Links.Room.Href.Split('/').Last(); + var room = scheduleJson.Embedded.Rooms.FirstOrDefault(r => + r.Id.ToString().ToLower() == roomId); + if (room != null) + roomName = room.Name; + } + } + } + + // Получение преподавателей для события + string teachersNames = ""; + if (scheduleJson.Embedded.EventOrganizers != null && scheduleJson.Embedded.EventAttendees != null && + scheduleJson.Embedded.Persons != null) + { + // Получаем eventOrganizer + var eventOrganizers = + scheduleJson.Embedded.EventOrganizers.FirstOrDefault(eo => eo.EventId == e.Id); + if (eventOrganizers != null && + eventOrganizers.Links.EventAttendees != null) + { + // Получаем eventAttendee id + // Тут может прийти массив или 1 объект + Self[] eventAttendeeIds = Array.Empty(); + if (eventOrganizers.Links.EventAttendees.Value.Self != null) + eventAttendeeIds = new[] { eventOrganizers.Links.EventAttendees.Value.Self }; + else if (eventOrganizers.Links.EventAttendees.Value.SelfArray != null) + eventAttendeeIds = eventOrganizers.Links.EventAttendees.Value.SelfArray; + + if (eventAttendeeIds.Length > 0) + { + foreach (var eventAttendeeId in eventAttendeeIds) + { + var attendeeId = eventAttendeeId.Href.Split('/').Last(); + // Получаем eventAttendee + var eventAttendee = + scheduleJson.Embedded.EventAttendees.FirstOrDefault(ea => + ea.Id.ToString().ToLower() == attendeeId); + if (eventAttendee != null) + { + var personId = eventAttendee.Links.Person.Href.Split('/').Last(); + // Получаем person + var teacher = scheduleJson.Embedded.Persons.FirstOrDefault(p => + p.Id.ToString().ToLower() == personId); + if (teacher != null) + teachersNames += (string.IsNullOrEmpty(teachersNames) ? "" : ", ") + + teacher.FullName; + } + } + } + } + } + + // Получение короткого названия для события + string shortNameCourse = ""; + if (scheduleJson.Embedded.CourseUnitRealizations != null) + { + try + { + var courseUnitRealizationsLinks = e.Links["course-unit-realization"]; + var courseUnitRealizationId = courseUnitRealizationsLinks.Href.Split('/').Last(); + if (!string.IsNullOrEmpty(courseUnitRealizationId)) + { + var courseUnitRealization = scheduleJson.Embedded.CourseUnitRealizations + .FirstOrDefault(cu => cu.Id.ToString().ToLower() == courseUnitRealizationId); + if (courseUnitRealization != null) + shortNameCourse = courseUnitRealization.NameShort ?? ""; + } + } + catch (Exception ex) + { + // Ignored + } + } + calendar.Events.Add(new CalendarEvent { - Summary = e.Name, - Description = e.NameShort, + Summary = (string.IsNullOrEmpty(shortNameCourse) ? "" : shortNameCourse + " / ") + e.Name, + Description = e.NameShort + (string.IsNullOrEmpty(roomName) ? "" : $"\nАудитория: {roomName}") + + (string.IsNullOrEmpty(teachersNames) ? "" : $"\nПреподаватели: {teachersNames}"), Start = new CalDateTime(e.StartsAtLocal, _configuration["TZ"]!), End = new CalDateTime(e.EndsAtLocal, _configuration["TZ"]!), });