diff --git a/Orarend/API.cs b/Orarend/API.cs index 187a09a..5d201b6 100644 --- a/Orarend/API.cs +++ b/Orarend/API.cs @@ -1,8 +1,10 @@ using HtmlAgilityPack; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Xml; using System.Xml.Linq; @@ -25,15 +27,63 @@ namespace Orarend /// /// Visszatér az osztályok listájával, egy-egy kételemű tömbbel, az első elem az azonosító, a második a megjelenített név. + /// Lehet null, ha még nem volt sikeres . /// /// - public static async Task> Osztályok() - { //TODO: Tárolja el az adatokat, és csak külön hívásra frissítse; csak a frissítés legyen async, ezek nem + public static IEnumerable Osztályok { get; set; } + private static Órarend aktuálisÓrarend; + public static async Task Frissítés() + { + aktuálisÓrarend = new Órarend { OsztályID = "12.b|2" }; //TODO: TMP HtmlDocument doc = new HtmlDocument(); - var req = WebRequest.CreateHttp("http://deri.enaplo.net/ajax/orarend/orarendoszt.php"); + var req = WebRequest.CreateHttp("http://deri.enaplo.net/ajax/orarend/orarendoszt.php" + (aktuálisÓrarend == null ? "" : "?p=" + Uri.EscapeDataString(aktuálisÓrarend.OsztályID))); var resp = await req.GetResponseAsync(); - doc.Load(resp.GetResponseStream()); - return doc.GetElementbyId("uok").ChildNodes.Where(node => node.HasAttributes).Select(node => new string[] { node.GetAttributeValue("value", ""), node.InnerText }); + await Task.Run(() => + { + using (var sr = new StreamReader(resp.GetResponseStream())) + doc.LoadHtml(Regex.Replace(Regex.Replace(sr.ReadToEnd(), "]*)>((?:\\w|[áéóüöőúű.])+)(?=<)(?!\\/)", "$2<"), "(?)\\", "")); //TODO + Osztályok = doc.GetElementbyId("uok").ChildNodes.Where(node => node.HasAttributes).Select(node => new string[] { node.GetAttributeValue("value", ""), node.NextSibling.InnerText }); + if (aktuálisÓrarend != null) + { + bool ahét = true; + foreach (var node in doc.GetElementbyId("oda").FirstChild.FirstChild.ChildNodes[1].ChildNodes) + { + switch (node.FirstChild.InnerText) + { + case "A": + ahét = true; + break; + case "B": + ahét = false; + break; + default: + { + int x = int.Parse(node.FirstChild.InnerText) - 1; + aktuálisÓrarend.Órakezdetek[x] = TimeSpan.Parse(node.FirstChild.Attributes["title"].Value.Split('-')[0].Trim()); + for (int i = 0; i < 5; i++) //Napok + { //TODO: for ciklus az egy időben tartott órákhoz + var óranode = node.ChildNodes[i + 1].FirstChild; + var csoportok = óranode.FirstChild.InnerText.TrimEnd(':'); + var óra = (ahét ? aktuálisÓrarend.ÓrákAHét : aktuálisÓrarend.ÓrákBHét)[i, x]; + if (óra == null) + óra = new Óra(); + óra.Sorszám = x + 1; + óra.Csoportok = csoportok; + óra.Név = óranode.ChildNodes[2].Attributes["title"].Value; + óra.Azonosító = óranode.ChildNodes[2].InnerText; + óra.Terem = óranode.ChildNodes[3].InnerText.Trim(' ', '(', ')'); + óra.Tanár = new Tanár + { + Azonosító = óranode.ChildNodes[4].InnerText, + Név = óranode.ChildNodes[4].Attributes["title"].Value + }; + } + break; + } + } + } + } + }); } } } diff --git a/Orarend/Tanár.cs b/Orarend/Tanár.cs index 3ae50c2..512ff52 100644 --- a/Orarend/Tanár.cs +++ b/Orarend/Tanár.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Orarend { - public class Tanár + public struct Tanár { public string Azonosító { get; set; } public string Név { get; set; } diff --git a/Orarend/Óra.cs b/Orarend/Óra.cs index 6d0e54f..550e105 100644 --- a/Orarend/Óra.cs +++ b/Orarend/Óra.cs @@ -13,6 +13,9 @@ namespace Orarend public Tanár Tanár { get; set; } public int Sorszám { get; set; } public string Terem { get; set; } - public string Csoport { get; set; } + /// + /// Az órán résztvevő csoportok, pluszjelekkel elválasztva + /// + public string Csoportok { get; set; } } } diff --git a/Orarend/Órarend.cs b/Orarend/Órarend.cs index 894209a..71b7392 100644 --- a/Orarend/Órarend.cs +++ b/Orarend/Órarend.cs @@ -8,7 +8,18 @@ namespace Orarend { public class Órarend { - public Dictionary> Órák { get; set; } + /// + /// Egy 6x16 2D tömb, az első koordináta a nap indexe, a második az óráé + /// + public Óra[,] ÓrákAHét { get; } = new Óra[6, 16]; + public Óra[,] ÓrákBHét { get; } = new Óra[6, 16]; public string Név { get; set; } + public string OsztályID { get; set; } + public string OsztályNév { get; set; } + /// + /// Egy 16 elemű tömb az órák kezdő időpontjaival + /// + public TimeSpan[] Órakezdetek { get; } = new TimeSpan[16]; + public List Csoportok { get; } } } diff --git a/OrarendAndroidApp/MainActivity.cs b/OrarendAndroidApp/MainActivity.cs index 6d0abde..582baff 100644 --- a/OrarendAndroidApp/MainActivity.cs +++ b/OrarendAndroidApp/MainActivity.cs @@ -37,7 +37,7 @@ namespace OrarendAndroidApp table.AddView(tr1); }*/ TableRow tr = new TableRow(this); - API.Osztályok().ContinueWith(t => + /*API.Osztályok().ContinueWith(t => { handler.Post(() => { @@ -49,7 +49,8 @@ namespace OrarendAndroidApp addCell(osztály[0], Color.Aqua, tr); table.AddView(tr); }); - }); + });*/ + API.Frissítés(); } } }