diff --git a/Orarend/API.cs b/Orarend/API.cs
index 2e5a49e..7233f14 100644
--- a/Orarend/API.cs
+++ b/Orarend/API.cs
@@ -56,7 +56,7 @@ namespace Orarend
using (var sr = new StreamReader(resp.GetResponseStream()))
{
const string trtd = @"(?:\s\w+=(?:\""|\')?(?:\w|[áéóüöőúű.:;])+(?:\""|\')?)*>(?!.+?\
.+?)(.+?)(?=<\1(?:\s\w+=(?:\""|\')?(?:\w|[áéóüöőúű.:;])+(?:\""|\')?)*>)";
- string html = Regex.Replace(Regex.Replace(Regex.Replace(sr.ReadToEnd(), "]*)>((?:\\w|[áéóüöőúű.])+)(?=<)(?!\\/)", " | $2 | "), "<(tr)" + trtd, "<$1>$2$1>"), "<(td)" + trtd, "<$1>$2$1>");
+ string html = Regex.Replace(Regex.Replace(Regex.Replace(sr.ReadToEnd(), "]*)>((?:\\w|[áéóüöőúű./])+)(?=<)(?!\\/)", " | $2 | "), "<(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
///
/// 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)
- /// 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
///
+ /// 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
public static async Task HelyettesítésFrissítés(Func 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é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
diff --git a/Orarend/ÓraTípus.cs b/Orarend/ÓraTípus.cs
index b5ca251..1b90a18 100644
--- a/Orarend/ÓraTípus.cs
+++ b/Orarend/ÓraTípus.cs
@@ -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]
diff --git a/OrarendAndroidApp/MainActivity.cs b/OrarendAndroidApp/MainActivity.cs
index cffc7a4..903852e 100644
--- a/OrarendAndroidApp/MainActivity.cs
+++ b/OrarendAndroidApp/MainActivity.cs
@@ -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(Resource.Id.progressBar1);
//var menu = FindViewById(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
///
/// Ha igaz, kiírja a WebException-öket is
/// Igaz, ha nem volt hiba
- private bool TaskHiba(Task t, bool internethiba = true)
+ private bool TaskHibaNemVolt(Task t, bool internethiba = true)
{
bool ret = true;
foreach (var ex in (IEnumerable)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;