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();
}
}
}