From 9f56a9db923d43225eba56fed3a87b3f7d5090ba Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Fri, 31 Jan 2020 14:49:23 +0300 Subject: [PATCH] =?UTF-8?q?-=20Fixed=20cases=20when=20app=20crashes=20on?= =?UTF-8?q?=20the=20second=20launch=20after=20entered=20credentials=20-=20?= =?UTF-8?q?Fixed=20export=20errors=20-=20Professors'=20schedule=20is=20now?= =?UTF-8?q?=20marked=20with=20=F0=9F=93=9A=20-=20You=20can=20now=20add=20y?= =?UTF-8?q?our=20group=20number=20to=20event=20title=20when=20using=20cabi?= =?UTF-8?q?net=20authorization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GUT.Schedule/Activities/ExportActivity.cs | 4 ++-- .../GUT.Schedule/Activities/MainActivity.cs | 8 +++----- GUT.Schedule/GUT.Schedule/Calendar.cs | 3 ++- .../GUT.Schedule/Models/CabinetSubject.cs | 4 +++- GUT.Schedule/GUT.Schedule/Parser.cs | 20 +++++++++++-------- .../Resources/layout/activity_main.xml | 6 ++++++ changelog.md | 6 +++++- 7 files changed, 33 insertions(+), 18 deletions(-) diff --git a/GUT.Schedule/GUT.Schedule/Activities/ExportActivity.cs b/GUT.Schedule/GUT.Schedule/Activities/ExportActivity.cs index 73121ca..2200c97 100644 --- a/GUT.Schedule/GUT.Schedule/Activities/ExportActivity.cs +++ b/GUT.Schedule/GUT.Schedule/Activities/ExportActivity.cs @@ -40,11 +40,11 @@ namespace GUT.Schedule { List schedule = new List(); - for (DateTime d = Data.StartDate; int.Parse($"{d.Year}{d.Month:00}") <= int.Parse($"{Data.EndDate.Year}{Data.EndDate.Month:00}"); d = d.AddMonths(1)) + for(DateTime d = Data.StartDate; d <= Data.EndDate; d = d.AddMonths(1)) schedule.AddRange(await Parser.GetCabinetSchedule(Data.DataSet.HttpClient, d, false)); // Even though the user can be professor he can be also PhD student (and have his student schedule) if(Data.DataSet.IsProfessor == true) - for (DateTime d = Data.StartDate; int.Parse($"{d.Year}{d.Month:00}") <= int.Parse($"{Data.EndDate.Year}{Data.EndDate.Month:00}"); d = d.AddMonths(1)) + for (DateTime d = Data.StartDate; d <= Data.EndDate; d = d.AddMonths(1)) schedule.AddRange(await Parser.GetCabinetSchedule(Data.DataSet.HttpClient, d, true)); schedule = schedule.FindAll(i => i.StartTime.Date >= Data.StartDate && i.StartTime.Date <= Data.EndDate); // Filtering schedule according to export range diff --git a/GUT.Schedule/GUT.Schedule/Activities/MainActivity.cs b/GUT.Schedule/GUT.Schedule/Activities/MainActivity.cs index c6ba450..cd721be 100644 --- a/GUT.Schedule/GUT.Schedule/Activities/MainActivity.cs +++ b/GUT.Schedule/GUT.Schedule/Activities/MainActivity.cs @@ -128,7 +128,7 @@ namespace GUT.Schedule HttpResponseMessage verificationResponse = await client.GetAsync("https://cabs.itut.ru/cabinet/?login=yes"); export.Enabled = true; IHtmlDocument doc = new HtmlParser().ParseDocument(await verificationResponse.GetString()); - if (doc.QuerySelectorAll("nobr").Any(i => i.TextContent.Contains("Ведомости"))) + if (doc.QuerySelectorAll("option").Any(i => i.TextContent.Contains("Сотрудник"))) isProf = true; else isProf = false; @@ -142,8 +142,8 @@ namespace GUT.Schedule // что творится на серверах Бонча (я не шучу, там все ОЧЕНЬ плохо) // Ну и в-третьих: Андроид - это пиздец и настоящий ад разработчика. И если бы была моя воля, я бы под него никогда не писал #FuckAndroid // З.Ы. Помнишь про второй пункт? Так вот, если ты используешь такой же пароль как в ЛК где-то еще, настоятельно рекомендую его поменять - PreferenceManager.GetDefaultSharedPreferences(this).Edit().PutBoolean("email", groupTitle.Checked).Apply(); - PreferenceManager.GetDefaultSharedPreferences(this).Edit().PutBoolean("password", groupTitle.Checked).Apply(); + PreferenceManager.GetDefaultSharedPreferences(this).Edit().PutString("email", email.Text).Apply(); + PreferenceManager.GetDefaultSharedPreferences(this).Edit().PutString("password", password.Text).Apply(); } else { @@ -249,13 +249,11 @@ namespace GUT.Schedule if (e.IsChecked) { studentParams.Visibility = ViewStates.Gone; - groupTitle.Visibility = ViewStates.Gone; profParams.Visibility = ViewStates.Visible; } else { studentParams.Visibility = ViewStates.Visible; - groupTitle.Visibility = ViewStates.Visible; profParams.Visibility = ViewStates.Gone; } }; diff --git a/GUT.Schedule/GUT.Schedule/Calendar.cs b/GUT.Schedule/GUT.Schedule/Calendar.cs index 8bc23c1..bfb147d 100644 --- a/GUT.Schedule/GUT.Schedule/Calendar.cs +++ b/GUT.Schedule/GUT.Schedule/Calendar.cs @@ -95,7 +95,8 @@ namespace GUT.Schedule eventValues.Put(CalendarContract.Events.InterfaceConsts.CalendarId, data.Calendar); - eventValues.Put(CalendarContract.Events.InterfaceConsts.Title, string.Format("{0}. {1} ({2})", + eventValues.Put(CalendarContract.Events.InterfaceConsts.Title, string.Format("{0}{1}. {2} ({3})", + item.ProfessorSchedule ? "📚 " : (data.AddGroupToTitle ? $"[{data.Group}] " : ""), item.Order, item.Name, item.Type)); diff --git a/GUT.Schedule/GUT.Schedule/Models/CabinetSubject.cs b/GUT.Schedule/GUT.Schedule/Models/CabinetSubject.cs index fd39e8a..22a8472 100644 --- a/GUT.Schedule/GUT.Schedule/Models/CabinetSubject.cs +++ b/GUT.Schedule/GUT.Schedule/Models/CabinetSubject.cs @@ -11,13 +11,15 @@ namespace GUT.Schedule.Models public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } public string Opponent { get; set; } + public bool ProfessorSchedule { get; set; } - public CabinetSubject(string name, string type, string cabinet, string opponent, int year, int month, int day, string schedule) + public CabinetSubject(string name, string type, string cabinet, string opponent, int year, int month, int day, string schedule, bool profSchedule) { Name = name; Type = type; Cabinet = cabinet; Opponent = opponent; + ProfessorSchedule = profSchedule; string[] time = schedule.Split('-'); diff --git a/GUT.Schedule/GUT.Schedule/Parser.cs b/GUT.Schedule/GUT.Schedule/Parser.cs index 9f3e196..9d7f3cb 100644 --- a/GUT.Schedule/GUT.Schedule/Parser.cs +++ b/GUT.Schedule/GUT.Schedule/Parser.cs @@ -126,7 +126,7 @@ namespace GUT.Schedule { using HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"https://cabs.itut.ru/cabinet/project/cabinet/forms/{(checkProfSchedule ? "pr_" : "")}raspisanie_kalendar.php"); request.SetContent( - ("month", date.Month.ToString("0:00")), + ("month", date.Month.ToString()), ("year", date.Year.ToString()), ("type_z", "0")); @@ -138,19 +138,23 @@ namespace GUT.Schedule IHtmlDocument doc = new HtmlParser().ParseDocument(responseContent); List schedule = new List(); - foreach(var i in doc.QuerySelectorAll("td").Where(i => i.GetAttribute("style") == "text-align: center; vertical-align: top")) + + if(!checkProfSchedule) + Data.DataSet.Group = doc.QuerySelector(".style_gr b").TextContent; + + foreach (var i in doc.QuerySelectorAll("td").Where(i => i.GetAttribute("style") == "text-align: center; vertical-align: top")) for (int k = 0; k < i.QuerySelectorAll("i").Length; k++) { CabinetSubject item = new CabinetSubject( name: i.QuerySelectorAll("b")[k * 2 + 1].TextContent, type: i.QuerySelectorAll("i")[k].TextContent, - cabinet: i.ChildNodes[k * 13 + 11].TextContent, - opponent: i.ChildNodes[k * 13 + 6].TextContent, + cabinet: i.ChildNodes[checkProfSchedule ? (k * 13 + 12) : (k * 12 + 11)].TextContent, + opponent: i.ChildNodes[checkProfSchedule ? (k * 13 + 7) : (k * 12 + 6)].TextContent, year: date.Year, month: date.Month, day: int.Parse(i.ChildNodes[0].TextContent), - schedule: i.QuerySelectorAll("b")[k * 2 + 2].TextContent - ); + schedule: i.QuerySelectorAll("b")[k * 2 + 2].TextContent, + checkProfSchedule); schedule.Add(item); } @@ -161,8 +165,8 @@ namespace GUT.Schedule schedule[k - 1].Name == schedule[k].Name && schedule[k - 1].Type == schedule[k].Type) { - schedule[k - 1].Opponent += "; " + schedule[k].Opponent; - schedule[k - 1].Cabinet += ";\n" + schedule[k].Cabinet; + schedule[k - 1].Opponent += ";\n" + schedule[k].Opponent; + schedule[k - 1].Cabinet += "; " + schedule[k].Cabinet; schedule.RemoveAt(k--); } diff --git a/GUT.Schedule/GUT.Schedule/Resources/layout/activity_main.xml b/GUT.Schedule/GUT.Schedule/Resources/layout/activity_main.xml index dee7050..c0c21e7 100644 --- a/GUT.Schedule/GUT.Schedule/Resources/layout/activity_main.xml +++ b/GUT.Schedule/GUT.Schedule/Resources/layout/activity_main.xml @@ -190,6 +190,12 @@ android:layout_height="wrap_content" android:text="Добавить номер группы в заголовок"/> + + +