Hibajavítások

- Perjel támogatása osztálynévben
- Ha olyan osztályt talál a helyettesítésekben, amit nem ismer, frissít
- Beállítja az utolsó frissítés idejét, ha sikeres volt
- Törli az extra sorokat, ha nincs most ott egy óra sem, de előtte volt
- Üres óranevek esetében kiírja az azonosítót (új óráknál)
This commit is contained in:
Norbi Peti 2017-09-05 16:52:19 +02:00
parent 3733f54fb9
commit 55ab6467f4
3 changed files with 45 additions and 13 deletions

View file

@ -56,7 +56,7 @@ namespace Orarend
using (var sr = new StreamReader(resp.GetResponseStream()))
{
const string trtd = @"(?:\s\w+=(?:\""|\')?(?:\w|[áéóüöőúű.:;])+(?:\""|\')?)*>(?!.+?\<table(?:\s\w+?=\""?\w+\""?)*\>.+?)(.+?)(?=<\1(?:\s\w+=(?:\""|\')?(?:\w|[áéóüöőúű.:;])+(?:\""|\')?)*>)";
string html = Regex.Replace(Regex.Replace(Regex.Replace(sr.ReadToEnd(), "<th([^>]*)>((?:\\w|[áéóüöőúű.])+)(?=<)(?!\\/)", "<th$1>$2</th>"), "<(tr)" + trtd, "<$1>$2</$1>"), "<(td)" + trtd, "<$1>$2</$1>");
string html = Regex.Replace(Regex.Replace(Regex.Replace(sr.ReadToEnd(), "<th([^>]*)>((?:\\w|[áéóüöőúű./])+)(?=<)(?!\\/)", "<th$1>$2</th>"), "<(tr)" + trtd, "<$1>$2</$1>"), "<(td)" + trtd, "<$1>$2</$1>");
doc.LoadHtml(html);
}
});
@ -76,6 +76,7 @@ namespace Orarend
{
Osztályok = doc.GetElementbyId("uok").ChildNodes.Where(node => node.HasAttributes).Select(node => new Osztály { Azonosító = node.GetAttributeValue("value", ""), Név = node.NextSibling.InnerText }).ToArray();
bool ahét = true;
int maxx = 0;
foreach (var node in doc.GetElementbyId("oda").FirstChild.FirstChild.ChildNodes[1].ChildNodes)
{
switch (node.FirstChild.InnerText)
@ -89,6 +90,7 @@ namespace Orarend
default:
{
int x = int.Parse(node.FirstChild.InnerText) - 1;
maxx = x > maxx ? x : maxx;
órarend.Órakezdetek[x] = TimeSpan.Parse(node.FirstChild.Attributes["title"].Value.Split('-')[0].Trim());
var órák = (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét);
for (int i = 0; i < 5; i++) //Napok
@ -126,6 +128,9 @@ namespace Orarend
}
}
}
for (int i = maxx + 1; i < 16; i++) //Órák
for (int j = 0; j < 5; j++) //Napok
órarend.Órák[j][i] = null; //Kitörli a küldött órarendben nem szereplő órákat
}
});
await Task.Delay(10);
@ -140,8 +145,8 @@ namespace Orarend
/// <summary>
/// Frissíti a helyettesítéseket, naponta, indításkor vagy gombnyommásra frissítse (minden nap az első előtérbe kerüléskor)
/// <param name="stream">A file stream, ahova mentse az adatokat, hogy ne kelljen külön meghívni - Azért funkció, hogy elkerüljök az adatvesztést, mivel így csak a mentéskor nyitja meg</param>
/// </summary>
/// <param name="stream">A file stream, ahova mentse az adatokat, hogy ne kelljen külön meghívni - Azért funkció, hogy elkerüljök az adatvesztést, mivel így csak a mentéskor nyitja meg</param>
public static async Task<bool> HelyettesítésFrissítés(Func<Stream> stream)
{
if (Órarendek.Count == 0 || Osztályok.Length == 0)
@ -167,7 +172,13 @@ namespace Orarend
var osztályok = node.ChildNodes[2].InnerText.Split(new string[] { ", " }, StringSplitOptions.None);
foreach (string osztálynév in osztályok)
{
Osztály osztály = Osztályok.Single(o => o.Azonosító.Contains(osztálynév));
Osztály osztály = Osztályok.SingleOrDefault(o => o.Azonosító.Contains(osztálynév));
if (osztály == null)
{
var x = new InvalidOperationException($"A helyettesítésekben szereplő osztály \"{osztálynév}\" nem található.");
x.Data.Add("OERROR", "CLS_NOT_FOUND");
throw x;
}
var csoportok = node.ChildNodes[3].InnerText;
int névindex = csoportok.IndexOf(osztálynév);
int végeindex = csoportok.IndexOf(")", névindex >= 0 ? névindex : 0);
@ -296,12 +307,16 @@ namespace Orarend
}
private static DateTime utolsófrissítésplusz1óra = DateTime.MinValue;
public static event EventHandler Frissítéskor;
public static event EventHandler<FrissítésEventArgs> Frissítéskor;
public class FrissítésEventArgs { public bool Siker { get; set; } = false; }
private static void frissítésHa1ÓraEltelt()
{
if (utolsófrissítésplusz1óra > DateTime.Now)
return;
Frissítéskor?.Invoke(példány, null);
var args = new FrissítésEventArgs();
Frissítéskor?.Invoke(példány, args);
if (args.Siker)
utolsófrissítésplusz1óra = DateTime.Now + new TimeSpan(1, 0, 0);
}
public static DayOfWeek MaiNap

View file

@ -7,7 +7,21 @@ namespace Orarend
public class ÓraTípus
{
[DataMember]
public string TeljesNév { get; set; }
private string teljesnév;
public string TeljesNév
{
get
{
return teljesnév;
}
set
{
if ((value?.Trim()?.Length ?? 0) == 0)
teljesnév = "(" + Azonosító + ")";
else
teljesnév = value;
}
}
[DataMember]
public string Azonosító { get; set; }
[DataMember]

View file

@ -39,7 +39,7 @@ namespace OrarendAndroidApp
? API.Betöltés(OpenFileInput(DATA_FILENAME), e => Hiba("Hiba az adatok betöltése során!\n" + e)) : API.Betöltés())
{
API.CsengőTimerEvent += CsengőTimer;
API.Frissítéskor += (_, __) => HelyettesítésFrissítés(false);
API.Frissítéskor += (_, args) => HelyettesítésFrissítés(false, args);
}
}
@ -102,7 +102,7 @@ namespace OrarendAndroidApp
public void Deconstruct(out T1 first, out T2 second) => (first, second) = obj;
}
private void HelyettesítésFrissítés(bool internethiba = true)
private void HelyettesítésFrissítés(bool internethiba = true, API.FrissítésEventArgs args = null)
{
var bar = FindViewById<ProgressBar>(Resource.Id.progressBar1);
//var menu = FindViewById<ActionMenuView>(Resource.Id.actionMenuView1);
@ -114,12 +114,13 @@ namespace OrarendAndroidApp
handler.Post(() =>
{
bar.Visibility = ViewStates.Gone;
if (TaskHiba(t, internethiba))
if (TaskHibaNemVolt(t, internethiba) && t.Result)
{
órarendfrissítés();
if (t.Result)
Toast.MakeText(this, "Helyettesítések frissítve", ToastLength.Short).Show();
Toast.MakeText(this, "Helyettesítések frissítve", ToastLength.Short).Show();
if (args != null) args.Siker = true;
}
else if (!internethiba && args != null) args.Siker = true;
});
});
}
@ -137,7 +138,7 @@ namespace OrarendAndroidApp
bar.Visibility = ViewStates.Gone;
órarendlistafrissítés();
HelyettesítésFrissítés();
if (TaskHiba(t))
if (TaskHibaNemVolt(t))
{
if (ór == null || ór == API.Órarend)
órarendfrissítés();
@ -350,7 +351,7 @@ namespace OrarendAndroidApp
/// <param name="t"></param>
/// <param name="internethiba">Ha igaz, kiírja a WebException-öket is</param>
/// <returns>Igaz, ha nem volt hiba</returns>
private bool TaskHiba(Task t, bool internethiba = true)
private bool TaskHibaNemVolt(Task t, bool internethiba = true)
{
bool ret = true;
foreach (var ex in (IEnumerable<Exception>)t.Exception?.InnerExceptions ?? new Exception[0])
@ -362,6 +363,8 @@ namespace OrarendAndroidApp
else if (wex.Status == WebExceptionStatus.ConnectFailure)
Hiba("Nem sikerült csatlakozni az E-naplóhoz.\nHa van internet, próbáld újraindítani az alkalmazást.");
}
else if (ex is InvalidOperationException oex && oex.Data.Contains("OERROR") && (string)oex.Data["OERROR"] == "CLS_NOT_FOUND")
ÓrarendFrissítés();
else
Hiba(ex.ToString());
ret = false;