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:
parent
3733f54fb9
commit
55ab6467f4
3 changed files with 45 additions and 13 deletions
|
@ -56,7 +56,7 @@ namespace Orarend
|
||||||
using (var sr = new StreamReader(resp.GetResponseStream()))
|
using (var sr = new StreamReader(resp.GetResponseStream()))
|
||||||
{
|
{
|
||||||
const string trtd = @"(?:\s\w+=(?:\""|\')?(?:\w|[áéóüöőúű.:;])+(?:\""|\')?)*>(?!.+?\<table(?:\s\w+?=\""?\w+\""?)*\>.+?)(.+?)(?=<\1(?:\s\w+=(?:\""|\')?(?:\w|[áéóüöőúű.:;])+(?:\""|\')?)*>)";
|
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);
|
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();
|
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;
|
bool ahét = true;
|
||||||
|
int maxx = 0;
|
||||||
foreach (var node in doc.GetElementbyId("oda").FirstChild.FirstChild.ChildNodes[1].ChildNodes)
|
foreach (var node in doc.GetElementbyId("oda").FirstChild.FirstChild.ChildNodes[1].ChildNodes)
|
||||||
{
|
{
|
||||||
switch (node.FirstChild.InnerText)
|
switch (node.FirstChild.InnerText)
|
||||||
|
@ -89,6 +90,7 @@ namespace Orarend
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
int x = int.Parse(node.FirstChild.InnerText) - 1;
|
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());
|
ó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);
|
var órák = (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét);
|
||||||
for (int i = 0; i < 5; i++) //Napok
|
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);
|
await Task.Delay(10);
|
||||||
|
@ -140,8 +145,8 @@ namespace Orarend
|
||||||
|
|
||||||
/// <summary>
|
/// <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)
|
/// 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>
|
/// </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)
|
public static async Task<bool> HelyettesítésFrissítés(Func<Stream> stream)
|
||||||
{
|
{
|
||||||
if (Órarendek.Count == 0 || Osztályok.Length == 0)
|
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);
|
var osztályok = node.ChildNodes[2].InnerText.Split(new string[] { ", " }, StringSplitOptions.None);
|
||||||
foreach (string osztálynév in osztályok)
|
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;
|
var csoportok = node.ChildNodes[3].InnerText;
|
||||||
int névindex = csoportok.IndexOf(osztálynév);
|
int névindex = csoportok.IndexOf(osztálynév);
|
||||||
int végeindex = csoportok.IndexOf(")", névindex >= 0 ? névindex : 0);
|
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;
|
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()
|
private static void frissítésHa1ÓraEltelt()
|
||||||
{
|
{
|
||||||
if (utolsófrissítésplusz1óra > DateTime.Now)
|
if (utolsófrissítésplusz1óra > DateTime.Now)
|
||||||
return;
|
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
|
public static DayOfWeek MaiNap
|
||||||
|
|
|
@ -7,7 +7,21 @@ namespace Orarend
|
||||||
public class ÓraTípus
|
public class ÓraTípus
|
||||||
{
|
{
|
||||||
[DataMember]
|
[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]
|
[DataMember]
|
||||||
public string Azonosító { get; set; }
|
public string Azonosító { get; set; }
|
||||||
[DataMember]
|
[DataMember]
|
||||||
|
|
|
@ -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.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.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;
|
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 bar = FindViewById<ProgressBar>(Resource.Id.progressBar1);
|
||||||
//var menu = FindViewById<ActionMenuView>(Resource.Id.actionMenuView1);
|
//var menu = FindViewById<ActionMenuView>(Resource.Id.actionMenuView1);
|
||||||
|
@ -114,12 +114,13 @@ namespace OrarendAndroidApp
|
||||||
handler.Post(() =>
|
handler.Post(() =>
|
||||||
{
|
{
|
||||||
bar.Visibility = ViewStates.Gone;
|
bar.Visibility = ViewStates.Gone;
|
||||||
if (TaskHiba(t, internethiba))
|
if (TaskHibaNemVolt(t, internethiba) && t.Result)
|
||||||
{
|
{
|
||||||
órarendfrissítés();
|
ó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;
|
bar.Visibility = ViewStates.Gone;
|
||||||
órarendlistafrissítés();
|
órarendlistafrissítés();
|
||||||
HelyettesítésFrissítés();
|
HelyettesítésFrissítés();
|
||||||
if (TaskHiba(t))
|
if (TaskHibaNemVolt(t))
|
||||||
{
|
{
|
||||||
if (ór == null || ór == API.Órarend)
|
if (ór == null || ór == API.Órarend)
|
||||||
órarendfrissítés();
|
órarendfrissítés();
|
||||||
|
@ -350,7 +351,7 @@ namespace OrarendAndroidApp
|
||||||
/// <param name="t"></param>
|
/// <param name="t"></param>
|
||||||
/// <param name="internethiba">Ha igaz, kiírja a WebException-öket is</param>
|
/// <param name="internethiba">Ha igaz, kiírja a WebException-öket is</param>
|
||||||
/// <returns>Igaz, ha nem volt hiba</returns>
|
/// <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;
|
bool ret = true;
|
||||||
foreach (var ex in (IEnumerable<Exception>)t.Exception?.InnerExceptions ?? new Exception[0])
|
foreach (var ex in (IEnumerable<Exception>)t.Exception?.InnerExceptions ?? new Exception[0])
|
||||||
|
@ -362,6 +363,8 @@ namespace OrarendAndroidApp
|
||||||
else if (wex.Status == WebExceptionStatus.ConnectFailure)
|
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.");
|
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
|
else
|
||||||
Hiba(ex.ToString());
|
Hiba(ex.ToString());
|
||||||
ret = false;
|
ret = false;
|
||||||
|
|
Loading…
Reference in a new issue