diff --git a/Orarend/API.cs b/Orarend/API.cs index e8546b1..2c2bac8 100644 --- a/Orarend/API.cs +++ b/Orarend/API.cs @@ -5,195 +5,209 @@ using System.Globalization; using System.IO; using System.Linq; using System.Net; +using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace Orarend { - public static class API + [DataContract] + public class API { //TODO: Beállítások: Téma (sötét, világos) (Android; platformfüggő beállítások), Előre megadott egyedi nevek használata + internal static API példány = new API(); + private API() + { + } + /// + /// A kulcs az óra azonosítója + /// + [DataMember(Order = 1)] + public Dictionary típusok { get; private set; } = new Dictionary(); + [DataMember] + public Osztály[] osztályok { get; private set; } + [DataMember(Order = 2)] + public List<Órarend> órarendek { get; private set; } = new List<Órarend>(); + [DataMember] + public Settings beállítások { get; private set; } = new Settings(); /// /// Visszatér az osztályok listájával. /// Lehet null, ha még nem volt sikeres . /// /// - public static Osztály[] Osztályok { get; private set; } - public static List<Órarend> Órarendek { get; } = new List<Órarend>(); - public static Settings Beállítások { get; private set; } = new Settings(); + public static Osztály[] Osztályok { get { return példány.osztályok; } private set { példány.osztályok = value; } } + public static List<Órarend> Órarendek { get { return példány.órarendek; } } + public static Settings Beállítások { get { return példány.beállítások; } private set { példány.beállítások = value; } } /// /// Frissíti az osztálylistát és az eredeti órarendet, első megnyitásnál, és egy órarend hozzáadásánál/szerkesztésénél, majd hetente elegendő meghívni - /// 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 + /// 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 Frissítés(Func órarendstream, Func osztálystream, Órarend ór = null) + public static async Task Frissítés(Func stream, Órarend ór = null) { - try + Func> load = async (url) => { - Func> load = async (url) => + HtmlDocument doc = new HtmlDocument(); + var req = WebRequest.CreateHttp(url); + var resp = await req.GetResponseAsync(); + await Task.Run(() => { - HtmlDocument doc = new HtmlDocument(); - var req = WebRequest.CreateHttp(url); - var resp = await req.GetResponseAsync(); - await Task.Run(() => + using (var sr = new StreamReader(resp.GetResponseStream())) { - 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"), "<(td)" + trtd, "<$1>$2"); - doc.LoadHtml(html); - } - }); - return doc; - }; - if (Órarendek.Count == 0) - { - var doc = await load("http://deri.enaplo.net/ajax/orarend/orarendoszt.php"); - await Task.Run(() => 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()); - } - Func<Órarend, Task> órarenda = async órarend => - { - var doc = await load("http://deri.enaplo.net/ajax/orarend/orarendoszt.php?p=" + Uri.EscapeDataString(órarend.Osztály.Azonosító)); - await Task.Run(() => + 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"), "<(td)" + trtd, "<$1>$2"); + doc.LoadHtml(html); + } + }); + return doc; + }; + if (Órarendek.Count == 0) + { + var doc = await load("http://deri.enaplo.net/ajax/orarend/orarendoszt.php"); + await Task.Run(() => 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()); + } + Func<Órarend, Task> órarenda = async órarend => + { + var doc = await load("http://deri.enaplo.net/ajax/orarend/orarendoszt.php?p=" + Uri.EscapeDataString(órarend.Osztály.Azonosító)); + await Task.Run(() => + { + lock (Órarendek) { - lock (Órarendek) + 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; + foreach (var node in doc.GetElementbyId("oda").FirstChild.FirstChild.ChildNodes[1].ChildNodes) { - 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; - foreach (var node in doc.GetElementbyId("oda").FirstChild.FirstChild.ChildNodes[1].ChildNodes) + switch (node.FirstChild.InnerText) { - 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; - ó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 + case "A": + ahét = true; + break; + case "B": + ahét = false; + break; + default: + { + int x = int.Parse(node.FirstChild.InnerText) - 1; + ó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 { - var óranode = node.ChildNodes[i + 1].FirstChild; - var óra = órák[i][x]; - if (óranode.ChildNodes.Count == 0) + var óranode = node.ChildNodes[i + 1].FirstChild; + var óra = órák[i][x]; + if (óranode.ChildNodes.Count == 0) + { + órák[i][x] = null; + continue; + } + for (int j = 0; j < óranode.ChildNodes.Count; j += 6) + { + var csoport = óranode.ChildNodes[j].InnerText.TrimEnd(':'); + if (csoport != "Egész osztály" && !órarend.Csoportok.Contains(csoport)) { órák[i][x] = null; continue; } - for (int j = 0; j < óranode.ChildNodes.Count; j += 6) - { - var csoport = óranode.ChildNodes[j].InnerText.TrimEnd(':'); - if (csoport != "Egész osztály" && !órarend.Csoportok.Contains(csoport)) - { - órák[i][x] = null; - continue; - } - if (óra == null) - órák[i][x] = óra = new Óra(); - óra.Csoportok = new string[] { csoport }; //Az állandó órarendben osztályonként csak egy csoport van egy órán + if (óra == null) + órák[i][x] = óra = new Óra(); + óra.Csoportok = new string[] { csoport }; //Az állandó órarendben osztályonként csak egy csoport van egy órán óra.Azonosító = óranode.ChildNodes[j + 2].InnerText; - óra.TeljesNév = óranode.ChildNodes[j + 2].Attributes["title"].Value; - óra.Terem = óranode.ChildNodes[j + 3].InnerText.Trim(' ', '(', ')'); - óra.Tanár = new Tanár - { - Azonosító = óranode.ChildNodes[j + 4].InnerText, - Név = óranode.ChildNodes[j + 4].Attributes["title"].Value - }; - break; - } + óra.TeljesNév = óranode.ChildNodes[j + 2].Attributes["title"].Value; + óra.Terem = óranode.ChildNodes[j + 3].InnerText.Trim(' ', '(', ')'); + óra.Tanár = new Tanár + { + Azonosító = óranode.ChildNodes[j + 4].InnerText, + Név = óranode.ChildNodes[j + 4].Attributes["title"].Value + }; + break; } - break; } - } + break; + } } - Java.Lang.Thread.Sleep(10); } - }); - }; - if (ór == null) - foreach (var órarend in Órarendek) - await órarenda(órarend); - else - await órarenda(ór); - } - finally - { - ÓrarendMentés(órarendstream()); - OsztályMentés(osztálystream()); - } + Java.Lang.Thread.Sleep(10); + } + }); + }; + if (ór == null) + foreach (var órarend in Órarendek) + await órarenda(órarend); + else + await órarenda(ór); + Mentés(stream()); } /// /// 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 ÓRARENDEKET, 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 órarendstream) + public static async Task HelyettesítésFrissítés(Func stream) { if (Órarendek.Count == 0 || Osztályok.Length == 0) return; - try + HtmlDocument doc = new HtmlDocument(); + var req = WebRequest.CreateHttp("http://deri.enaplo.net/ajax/print/htlista.php"); + var resp = await req.GetResponseAsync(); + await Task.Run(() => { - HtmlDocument doc = new HtmlDocument(); - var req = WebRequest.CreateHttp("http://deri.enaplo.net/ajax/print/htlista.php"); - var resp = await req.GetResponseAsync(); - await Task.Run(() => + lock (Órarendek) { - lock (Órarendek) + using (var sr = new StreamReader(resp.GetResponseStream())) + doc.LoadHtml(sr.ReadToEnd()); + foreach (var órarend in Órarendek) + órarend.Helyettesítések.Clear(); + foreach (var node in doc.DocumentNode.ChildNodes[2].ChildNodes[1].ChildNodes) { - using (var sr = new StreamReader(resp.GetResponseStream())) - doc.LoadHtml(sr.ReadToEnd()); - foreach (var órarend in Órarendek) - órarend.Helyettesítések.Clear(); - foreach (var node in doc.DocumentNode.ChildNodes[2].ChildNodes[1].ChildNodes) + DateTime dátum = DateTime.Parse(node.ChildNodes[0].InnerText.Substring(0, node.ChildNodes[0].InnerText.Length - 4)); + int hét = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(dátum, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday); + if (hét != Hét) + continue; + byte óraszám = byte.Parse(node.ChildNodes[1].InnerText); + var osztályok = node.ChildNodes[2].InnerText.Split(new string[] { ", " }, StringSplitOptions.None); + foreach (string osztálynév in osztályok) { - DateTime dátum = DateTime.Parse(node.ChildNodes[0].InnerText.Substring(0, node.ChildNodes[0].InnerText.Length - 4)); - int hét = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(dátum, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday); - if (hét != Hét) - continue; - byte óraszám = byte.Parse(node.ChildNodes[1].InnerText); - 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)); - 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); - string csoport = osztályok.Length == 1 ? csoportok : csoportok.Substring(névindex + osztálynév.Length + 1, végeindex - névindex - osztálynév.Length - 1); - string óraaz = node.ChildNodes[4].InnerText; - string terem = node.ChildNodes[5].InnerText.Split(new string[] { " -> " }, StringSplitOptions.None).Last(); //Mindig az új termet tárolja el, ha változott + Osztály osztály = Osztályok.Single(o => o.Azonosító.Contains(osztálynév)); + 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); + string csoport = osztályok.Length == 1 ? csoportok : csoportok.Substring(névindex + osztálynév.Length + 1, végeindex - névindex - osztálynév.Length - 1); + string óraaz = node.ChildNodes[4].InnerText; + string terem = node.ChildNodes[5].InnerText.Split(new string[] { " -> " }, StringSplitOptions.None).Last(); //Mindig az új termet tárolja el, ha változott string tanár = node.ChildNodes[7].InnerText; - string[] megj = node.ChildNodes[8].InnerText.Split(' '); - string óranév = node.ChildNodes[9].InnerText; - DayOfWeek újnap = dátum.DayOfWeek; - byte újsorszám = óraszám; - if (megj.Length > 2) - { - újnap = DateTime.Parse(megj[1]).DayOfWeek; - újsorszám = byte.Parse(megj[3].Trim('.')); - } - foreach (var órarend in (csoport == "Egész osztály" ? Órarendek : Órarendek.Where(ór => ór.Csoportok.Contains(csoport))).Where(ór => ór.Osztály == osztály)) - { - if (tanár == "") - tanár = órarend.Órák[(int)dátum.DayOfWeek - 1][óraszám - 1]?.Tanár.Név ?? ""; - var helyettesítés = new Helyettesítés { EredetiNap = dátum.DayOfWeek, EredetiSorszám = óraszám, ÚjÓra = tanár == "elmarad" ? null : new Óra { Azonosító = óraaz, Csoportok = new string[] { csoport }, Terem = terem, Tanár = new Tanár { Név = tanár }, TeljesNév = óranév }, ÚjNap = újnap, ÚjSorszám = újsorszám }; - órarend.Helyettesítések.Add(helyettesítés); - } + string[] megj = node.ChildNodes[8].InnerText.Split(' '); + string óranév = node.ChildNodes[9].InnerText; + DayOfWeek újnap = dátum.DayOfWeek; + byte újsorszám = óraszám; + if (megj.Length > 2) + { + újnap = DateTime.Parse(megj[1]).DayOfWeek; + újsorszám = byte.Parse(megj[3].Trim('.')); + } + foreach (var órarend in (csoport == "Egész osztály" ? Órarendek : Órarendek.Where(ór => ór.Csoportok.Contains(csoport))).Where(ór => ór.Osztály == osztály)) + { + if (tanár == "") + tanár = órarend.Órák[(int)dátum.DayOfWeek - 1][óraszám - 1]?.Tanár.Név ?? ""; + var helyettesítés = new Helyettesítés { EredetiNap = dátum.DayOfWeek, EredetiSorszám = óraszám, ÚjÓra = tanár == "elmarad" ? null : new Óra { Azonosító = óraaz, Csoportok = new string[] { csoport }, Terem = terem, Tanár = new Tanár { Név = tanár }, TeljesNév = óranév }, ÚjNap = újnap, ÚjSorszám = újsorszám }; + órarend.Helyettesítések.Add(helyettesítés); } } } - }); - } - finally - { - ÓrarendMentés(órarendstream()); - } + } + Mentés(stream()); + }); } - - private static T betöltés(Stream s, Action hibánál) + + [OnDeserializing] + private void betöltés(StreamingContext context) + { //Az órák azonosítójának beállításakor szükséges már + példány = this; + } + + /// + /// Betölti az adatokat, ha még nincsenek betöltve + /// + /// A stream, ahonnan betöltse az adatokat + /// Megadja, mi történjen egy hiba esetén + public static void Betöltés(Stream s, Action hibánál) { using (s) { @@ -205,61 +219,30 @@ namespace Orarend try { ms.Seek(0, SeekOrigin.Begin); - var serializer = new DataContractJsonSerializer(typeof(T)); - return (T)serializer.ReadObject(ms); + var serializer = new DataContractJsonSerializer(typeof(API)); + serializer.ReadObject(ms); //A példányt beállítja, mikor elkezdi, nem várja meg, hogy végezzen (betöltés()) + return; } catch (Exception e) { hibánál(e); } } - return default(T); } } - } - - public static void ÓrarendBetöltés(Stream s, Action hibánál) - { - Órarendek.AddRange(betöltés<Órarend[]>(s, hibánál) ?? new Órarend[0]); - } - - public static void OsztályBetöltés(Stream s, Action hibánál) - { - Osztályok = betöltés(s, hibánál) ?? new Osztály[0]; - } - - public static void BeállításBetöltés(Stream s, Action hibánál) - { - Beállítások = betöltés(s, hibánál); } //TODO: Tényleges órarendből állapítsa meg azt is, hogyha egyáltalán nincs ott egy óra, és máshol sincs, és ezt írja ki - private static void mentés(Stream s, T obj) + public static void Mentés(Stream s) { using (s) { - if (obj != null) + if (példány != null) { - var serializer = new DataContractJsonSerializer(typeof(T)); - serializer.WriteObject(s, obj); + var serializer = new DataContractJsonSerializer(példány.GetType()); + serializer.WriteObject(s, példány); } } } - - public static void ÓrarendMentés(Stream s) - { - mentés(s, Órarendek.ToArray()); - } - - private static void OsztályMentés(Stream s) - { - mentés(s, Osztályok); - } - - public static void BeállításMentés(Stream s) - { - mentés(s, Beállítások); - } - /// /// Visszatér a megjelenítendő héttel. Ez megegyezik a tényleges héttel, kivéve hétvégén, amikor a következő /// diff --git a/Orarend/Óra.cs b/Orarend/Óra.cs index 0e61d0e..e72bab9 100644 --- a/Orarend/Óra.cs +++ b/Orarend/Óra.cs @@ -10,7 +10,6 @@ namespace Orarend [DataContract] public class Óra { - [DataMember] private ÓraTípus Típus { get; set; } [DataMember] public Tanár Tanár { get; set; } @@ -21,7 +20,8 @@ namespace Orarend /// [DataMember] public string[] Csoportok { get; set; } - + + [DataMember] public string Azonosító { get diff --git a/Orarend/ÓraTípus.cs b/Orarend/ÓraTípus.cs index 54c6064..b5ca251 100644 --- a/Orarend/ÓraTípus.cs +++ b/Orarend/ÓraTípus.cs @@ -12,10 +12,10 @@ namespace Orarend public string Azonosító { get; set; } [DataMember] public string EgyediNév { get; set; } - + /// /// A kulcs az óra azonosítója /// - public static Dictionary Típusok { get; } = new Dictionary(); + public static Dictionary Típusok { get { return API.példány.típusok; } } } } diff --git a/OrarendAndroidApp/EditActivity.cs b/OrarendAndroidApp/EditActivity.cs index ea6d35e..467a636 100644 --- a/OrarendAndroidApp/EditActivity.cs +++ b/OrarendAndroidApp/EditActivity.cs @@ -67,7 +67,7 @@ namespace OrarendAndroidApp intent.PutExtra("deleted", true); ((AlertDialog)s).Dismiss(); ((AlertDialog)s).Dispose(); - API.rarendMents(OpenFileOutput("orarend", FileCreationMode.Private)); + API.Ments(OpenFileOutput(MainActivity.DATA_FILENAME, FileCreationMode.Private)); SetResult(Result.Ok, intent); Finish(); }).SetNegativeButton("Nem", (s, ea) => @@ -91,7 +91,7 @@ namespace OrarendAndroidApp } else API.rarendek.Add(new rarend(nv, osztly, csoportok)); - API.rarendMents(OpenFileOutput("orarend", FileCreationMode.Private)); + API.Ments(OpenFileOutput(MainActivity.DATA_FILENAME, FileCreationMode.Private)); SetResult(Result.Ok, Intent); Finish(); } diff --git a/OrarendAndroidApp/MainActivity.cs b/OrarendAndroidApp/MainActivity.cs index 49f2804..c5cdde4 100644 --- a/OrarendAndroidApp/MainActivity.cs +++ b/OrarendAndroidApp/MainActivity.cs @@ -24,6 +24,7 @@ namespace OrarendAndroidApp private Timer timer; private const int EDIT_ADD_ACT_REQUEST = 1; + public const string DATA_FILENAME = "data.json"; protected override void OnCreate(Bundle bundle) { @@ -33,12 +34,8 @@ namespace OrarendAndroidApp ActionBar.CustomView = FindViewById(Resource.Id.spinner); handler = new Handler(); string[] list = FileList(); - if (list.Contains("beallitasok")) - API.BeállításBetöltés(OpenFileInput("beallitasok"), e => Hiba("Hiba a beállítások betöltése során!\n" + e)); - if (list.Contains("orarend") && API.Órarendek.Count == 0) - API.ÓrarendBetöltés(OpenFileInput("orarend"), e => Hiba("Hiba az órarendek betöltése során!\n" + e)); - if (list.Contains("osztaly") && API.Osztályok == null) - API.OsztályBetöltés(OpenFileInput("osztaly"), e => Hiba("Hiba az osztályok betöltése során!\n" + e)); + if (list.Contains(DATA_FILENAME)) + API.Betöltés(OpenFileInput(DATA_FILENAME), e => Hiba("Hiba az adatok betöltése során!\n" + e)); timer = new Timer(CsengőTimer, null, new TimeSpan(0, 0, 0), new TimeSpan(0, 0, 5)); } @@ -98,7 +95,7 @@ namespace OrarendAndroidApp menu.Enabled = false; }; handler.Post(loadstart); - API.HelyettesítésFrissítés(() => OpenFileOutput("orarend", FileCreationMode.Private)).ContinueWith(t => + API.HelyettesítésFrissítés(() => OpenFileOutput(DATA_FILENAME, FileCreationMode.Private)).ContinueWith(t => { handler.RemoveCallbacks(loadstart); handler.Post(() => @@ -125,7 +122,7 @@ namespace OrarendAndroidApp menu.Enabled = false; }; handler.Post(loadstart); - API.Frissítés(() => OpenFileOutput("orarend", FileCreationMode.Private), () => OpenFileOutput("osztaly", FileCreationMode.Private), ór).ContinueWith(t => + API.Frissítés(() => OpenFileOutput(DATA_FILENAME, FileCreationMode.Private), ór).ContinueWith(t => { handler.RemoveCallbacks(loadstart); handler.Post(() => @@ -225,21 +222,26 @@ namespace OrarendAndroidApp helyettesítésInnen = innenide[0]; helyettesítésIde = innenide[1]; } - //if (ij == null || (óra = órarend.Órák[ij[0]][ij[1]] ?? ((helyettesítésIde = órarend.Helyettesítések.SingleOrDefault(h => (int)h.ÚjNap == ij[0] + 1 && h.ÚjSorszám == ij[1] + 1))?.ÚjÓra)) == null) - if (ij == null || (óra = órarend.Órák[ij[0]][ij[1]] ?? (helyettesítésIde?.ÚjÓra)) == null) - { //Ha az óra nincs beállítva, beállítja a helyettesítettre - TODO: Ne; rejtse el + if (ij == null || (óra = órarend.Órák[ij[0]][ij[1]]) == null && helyettesítésIde?.ÚjÓra == null) + { deselect(); return; } tv.SetBackgroundResource(Resource.Drawable.cell_shape_selected_light); selected = tv; var kivora = FindViewById(Resource.Id.kivoraTV); - kivora.Text = Napok[ij[0]] + " " + (ij[1] + 1) + ". óra" - + "\nNév: " + óra.TeljesNév - + "\nTerem: " + óra.Terem - + "\nTanár: " + óra.Tanár.Név - + "\nIdőtartam: " + órarend.Órakezdetek[ij[1]].ToString("hh\\:mm") + "-" + órarend.Órakezdetek[ij[1]].Add(new TimeSpan(0, 45, 0)).ToString("hh\\:mm") - + "\nCsoport: " + óra.Csoportok.Aggregate((a, b) => a + ", " + b); + if (óra == null) + kivora.Visibility = ViewStates.Gone; + else + { + kivora.Text = Napok[ij[0]] + " " + (ij[1] + 1) + ". óra" + + "\nNév: " + óra.TeljesNév + + "\nTerem: " + óra.Terem + + "\nTanár: " + óra.Tanár.Név + + "\nIdőtartam: " + órarend.Órakezdetek[ij[1]].ToString("hh\\:mm") + "-" + órarend.Órakezdetek[ij[1]].Add(new TimeSpan(0, 45, 0)).ToString("hh\\:mm") + + "\nCsoport: " + óra.Csoportok.Aggregate((a, b) => a + ", " + b); + kivora.Visibility = ViewStates.Visible; + } var hely = FindViewById(Resource.Id.helyTV); hely.Text = (helyettesítésInnen == null ? "" : helyettesítésInnen.EredetiNap != helyettesítésInnen.ÚjNap || helyettesítésInnen.EredetiSorszám != helyettesítésInnen.ÚjSorszám @@ -253,14 +255,13 @@ namespace OrarendAndroidApp : "Az óra elmarad") + (helyettesítésIde == null ? "" : helyettesítésIde.EredetiNap != helyettesítésIde.ÚjNap || helyettesítésIde.EredetiSorszám != helyettesítésIde.ÚjSorszám - ? "Áthelyezve: " + Napok[(int)helyettesítésInnen.EredetiNap - 1] + " " + helyettesítésIde.EredetiSorszám + ". óra --> ide" - + (helyettesítésIde.ÚjÓra.EgyediNév != óra.EgyediNév ? "\nÓra: " + helyettesítésIde.ÚjÓra.EgyediNév : "") - + (helyettesítésIde.ÚjÓra.Terem != óra.Terem ? "\nTerem: " + helyettesítésIde.ÚjÓra.Terem : "") - + ((óra.Tanár.Név != (helyettesítésIde.ÚjÓra.Tanár.Név == "" ? órarend.Órák[(int)helyettesítésIde.EredetiNap - 1][helyettesítésIde.EredetiSorszám - 1].Tanár.Név : helyettesítésIde.ÚjÓra.Tanár.Név)) ? "\nTanár: " + (óra.Tanár.Név == "" ? órarend.Órák[(int)helyettesítésIde.EredetiNap - 1][helyettesítésIde.EredetiSorszám - 1].Tanár.Név : helyettesítésIde.ÚjÓra.Tanár.Név) : "") - + (helyettesítésIde.ÚjÓra.Csoportok[0] != óra.Csoportok[0] ? "\nCsoport: " + helyettesítésIde.ÚjÓra.Csoportok.Aggregate((a, b) => a + ", " + b) : "") //ˇˇ De ha változott, akkor nem + ? "Áthelyezve: " + Napok[(int)helyettesítésIde.EredetiNap - 1] + " " + helyettesítésIde.EredetiSorszám + ". óra --> ide" + + (helyettesítésIde.ÚjÓra.EgyediNév != óra?.EgyediNév ? "\nÓra: " + helyettesítésIde.ÚjÓra.EgyediNév : "") + + (helyettesítésIde.ÚjÓra.Terem != óra?.Terem ? "\nTerem: " + helyettesítésIde.ÚjÓra.Terem : "") + + ((óra?.Tanár.Név != (helyettesítésIde.ÚjÓra.Tanár.Név == "" ? órarend.Órák[(int)helyettesítésIde.EredetiNap - 1][helyettesítésIde.EredetiSorszám - 1].Tanár.Név : helyettesítésIde.ÚjÓra.Tanár.Név)) ? "\nTanár: " + (óra?.Tanár.Név == "" ? órarend.Órák[(int)helyettesítésIde.EredetiNap - 1][helyettesítésIde.EredetiSorszám - 1].Tanár.Név : helyettesítésIde.ÚjÓra.Tanár.Név) : "") + + (helyettesítésIde.ÚjÓra.Csoportok[0] != óra?.Csoportok[0] ? "\nCsoport: " + helyettesítésIde.ÚjÓra.Csoportok.Aggregate((a, b) => a + ", " + b) : "") //ˇˇ De ha változott, akkor nem : "") //Ha a pozicíó nem változott, a fentebbi rész már kiírta az adatait ; - kivora.Visibility = ViewStates.Visible; hely.Visibility = ViewStates.Visible; } @@ -373,7 +374,6 @@ namespace OrarendAndroidApp { var vége = órarend.Órakezdetek[i].Add(new TimeSpan(0, 45, 0)); bool becsengetés; - //int x = (int)DateTime.Today.DayOfWeek - 2; //TODO: TMP int x = (int)DateTime.Today.DayOfWeek - 1; //TODO: A mai nap és ez az egész az API-ba Óra óra; var innenide = helyettesítésInnenIde(x, i); @@ -446,10 +446,9 @@ namespace OrarendAndroidApp private void MaiNaphozGörgetés() { - //var x = DateTime.Today.DayOfWeek - 1; //TODO: TMP var x = DateTime.Today.DayOfWeek; if (nincstöbbóra) x++; - x = x == DayOfWeek.Sunday ? DayOfWeek.Monday : x; + x = x > DayOfWeek.Saturday || x == DayOfWeek.Sunday ? DayOfWeek.Monday : x; var table = FindViewById(Resource.Id.tableLayout1); if (table.ChildCount == 0) return;