private TimetableVersion[] GetAvailableVersions(TimetableType type) { return(TimetableVersionExt.GetAllVersionInfos() .Where(c => c.Compatibility == TtVersionCompatType.ReadWrite && c.Type == type) .Select(c => c.Version) .ToArray()); }
/// <summary> /// Formats a given timetable to markdown representation. /// </summary> /// <param name="timetable">The HTML representation of the timetable.</param> /// <param name="timetableType">The type of the timetable to return.</param> /// <returns>The markdown representation of the given timetable.</returns> public static string Format(string timetable, TimetableType timetableType) { switch (timetableType) { case TimetableType.Session: return(FormatSessionTimetable(timetable)); default: return(FormatGeneralTimetable(timetable)); } }
internal void New(TimetableType type) { if (!NotifyIfUnsaved()) { return; } Timetable = new Timetable(type); FileState.Opened = true; FileState.Saved = false; FileState.FileName = null; undo.ClearHistory(); info.Logger.Info("Neue Datei erstellt"); FileOpened?.Invoke(this, null); }
private async Task OnTimetableAsync(long chatId, TimetableType timetableType) { try { var timetable = await TimetableParser.GetAsync(this.configuration.Login, this.configuration.Password, timetableType); timetable = TimetableFormatter.Format(timetable, timetableType); await this.ReplyAsync(chatId, (timetable.Length > 0)?timetable : "Расписание для студенческой группы отсутствует", timetableType); } catch (Exception e) { this.logger.LogError($"{nameof(WebhookClient)} OnTimetableAsync {e.Message}"); await this.ReplyAsync(chatId, "Не удалось получить информацию о расписании для студенческой группы", timetableType); } }
private async Task ReplyAsync(long chatId, string message, TimetableType timetableType) { var keyboard = new InlineKeyboardMarkup(new[] { new[] { new InlineKeyboardButton() { Text = "Повторить запрос", CallbackData = (timetableType == TimetableType.General) ? "timetable" : "session", }, }, }); await this.client.SendTextMessageAsync( chatId : chatId, text : message, replyMarkup : keyboard, parseMode : Telegram.Bot.Types.Enums.ParseMode.MarkdownV2, disableWebPagePreview : true).ConfigureAwait(false); }
private List<TimetableItem> ParseTable(HtmlDocument document, TimetableType type, StudyYear studyYear = StudyYear.None, HalfYear halfYear = HalfYear.None, string groupNumber = "") { List<TimetableItem> timetable = new List<TimetableItem>(); if (document.DocumentNode.Descendants("table").Count() > 0) { foreach (HtmlNode table in document.DocumentNode.Descendants("table")) { DayOfWeek day = DayOfWeek.Monday; foreach (HtmlNode tableRow in table.Descendants("tr")) { bool isDirty = false; if (tableRow.Attributes.Count == 0) { TimetableItem item = null; int index = 0; foreach (HtmlNode tableCell in tableRow.Descendants("td")) { string innerText = tableCell.InnerText.Trim(); if (tableCell.Attributes.Count > 0 && tableCell.Attributes[0].Value == "10") { day = new DayOfWeek(); day = GetDayFromCell(innerText); } else { switch (index) { case 0: item = new TimetableItem(); item.Day = day; int startHours; int startMinutes; if (Int32.TryParse(innerText.Substring(0, 2), out startHours) && Int32.TryParse(innerText.Substring(3, 2), out startMinutes)) { item.StartTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, startHours, startMinutes, 0); } break; case 1: int endHours; int endMinutes; if (Int32.TryParse(innerText.Substring(0, 2), out endHours) && Int32.TryParse(innerText.Substring(3, 2), out endMinutes)) { item.EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, endHours, endMinutes, 0); } break; case 2: if (type == TimetableType.Year) { item.StudyGroup = GetGroupFromCell(innerText); index--; type = TimetableType.Group; isDirty = true; } else { item.ClassName = innerText; if (item.StudyGroup == null) { item.StudyGroup = new Group { YearOfStudy = studyYear, HalfYearOfStudy = halfYear, Number = groupNumber }; } if (isDirty) type = TimetableType.Year; } break; case 3: item.TypeOfClass = GetClassTypeFromCell(innerText); break; case 4: item.TeacherName = innerText; break; case 5: item.RoomNumber = innerText; break; case 6: item.Frequency = GetFrequencyFromCell(innerText); break; case 7: item.OptionalPackage = GetOptionalPackageFromCell(innerText); break; } index++; } } if (item != null) timetable.Add(item); } } } } return timetable; }
public TimetableTypeNotSupportedException(TimetableType type, string feature, Exception innerException) : base("Timetable file of type " + type + " does not support the following feature: " + feature, innerException) { }
/// <summary> /// Parsers the web page and returns the string representation of the timetable for the first available day. /// </summary> /// <param name="login">The login to access the timetable data.</param> /// <param name="password">The password to access the timetable data.</param> /// <param name="timetableType">The type of the timetable to return.</param> /// <returns>The string representation of the timetable for the first available day.</returns> public static async Task <string> GetAsync(string login, string password, TimetableType timetableType) { var baseUrl = (timetableType == TimetableType.General) ? GeneralUrl : SesssionUrl; var formVariables = new List <KeyValuePair <string?, string?> > { new KeyValuePair <string?, string?>("AUTH_FORM", "Y"), new KeyValuePair <string?, string?>("TYPE", "AUTH"), new KeyValuePair <string?, string?>("backurl", "/cdb/schedule/student.php"), new KeyValuePair <string?, string?>("USER_LOGIN", login), new KeyValuePair <string?, string?>("USER_PASSWORD", password), new KeyValuePair <string?, string?>("Login", "%C2%EE%E9%F2%E8"), }; var cookieContainer = new CookieContainer(); var timetableUrl = string.Empty; var formContent = new FormUrlEncodedContent(formVariables); string timetable = string.Empty; using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) { using var client = new HttpClient(handler, false); { using var message = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri(baseUrl), Content = formContent }; using var response = await client.SendAsync(message); if (response.IsSuccessStatusCode) { var buffer = await response.Content.ReadAsByteArrayAsync(); var encoding = Encoding.GetEncoding("windows-1251"); var responseString = encoding.GetString(buffer, 0, buffer.Length); var document = new HtmlDocument(); document.LoadHtml(responseString); var timetableIFrame = document.DocumentNode.SelectNodes("(//iframe[@id='diploma-iframe'])"); if (timetableIFrame.Count > 0) { timetableUrl = timetableIFrame[0].Attributes["src"].Value; } } using var message2 = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri(timetableUrl), }; using var response2 = await client.SendAsync(message2); if (response2.IsSuccessStatusCode) { timetable = await response2.Content.ReadAsStringAsync(); } } } return(timetable); }
public TtVersionCompatAttribute(TtVersionCompatType compatType, TimetableType fileType) { CompatType = compatType; FileType = fileType; }