From ace4506bfcffc06415cb4aa20e322560b3593167 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 17 Feb 2017 23:45:47 +0100 Subject: [PATCH] =?UTF-8?q?A=20bet=C3=B6lt=C3=A9ssel=20=C3=A9s=20a=20ment?= =?UTF-8?q?=C3=A9ssel=20kapcsolatos=20jav=C3=ADt=C3=A1sok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Orarend/API.cs | 179 +++++++++--------- OrarendAndroidApp/MainActivity.cs | 55 +++--- .../Resources/Resource.Designer.cs | 57 +++--- .../Resources/layout/MainLayout.axml | 5 - 4 files changed, 146 insertions(+), 150 deletions(-) diff --git a/Orarend/API.cs b/Orarend/API.cs index d8da4b3..dade9ba 100644 --- a/Orarend/API.cs +++ b/Orarend/API.cs @@ -24,9 +24,10 @@ namespace Orarend public static List Helyettesítések { get; } = new List(); /// /// 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 + /// A file stream, ahova mentse az adatokat, hogy ne kelljen külön meghívni + /// A file stream, ahova mentse az adatokat, hogy ne kelljen külön meghívni /// - public static async Task Frissítés(Stream s) + public static async Task Frissítés(Stream órarendstream, Stream osztálystream, Órarend ór = null) { Func> load = async (url) => { @@ -49,57 +50,62 @@ namespace Orarend 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()); } - foreach (var órarend in Órarendek) - { - var doc = await load("http://deri.enaplo.net/ajax/orarend/orarendoszt.php?p=" + Uri.EscapeDataString(órarend.Osztály.Azonosító)); - 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(); - 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; - ó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 óra = (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[i, x]; - if (óranode.ChildNodes.Count == 0) - continue; - var csoport = óranode.FirstChild.InnerText.TrimEnd(':'); - if (csoport != "Egész osztály" && !órarend.Csoportok.Contains(csoport)) - continue; - if (óra == null) - (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[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[2].InnerText; - óra.TeljesNév = óranode.ChildNodes[2].Attributes["title"].Value; - ó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; - } - } - } - ÓrarendMentés(s); - OsztályMentés(s); - Thread.Sleep(10); - }); - } + 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(() => + { + 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) + { + 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()); + 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 óra = (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[i, x]; + if (óranode.ChildNodes.Count == 0) + continue; + var csoport = óranode.FirstChild.InnerText.TrimEnd(':'); + if (csoport != "Egész osztály" && !órarend.Csoportok.Contains(csoport)) + continue; + if (óra == null) + (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[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[2].InnerText; + óra.TeljesNév = óranode.ChildNodes[2].Attributes["title"].Value; + ó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; + } + } + } + Thread.Sleep(10); + }); + }; + if (ór == null) + foreach (var órarend in Órarendek) + await órarenda(órarend); + else + await órarenda(ór); + ÓrarendMentés(órarendstream); + OsztályMentés(osztálystream); } /// @@ -118,76 +124,73 @@ namespace Orarend }); //TODO } - public static void ÓrarendBetöltés(Stream s) + private static T betöltés(Stream s) { using (s) { - var serializer = new DataContractJsonSerializer(typeof(Órarend[])); - Órarendek.AddRange((Órarend[])serializer.ReadObject(s)); + using (var ms = new MemoryStream()) + { + s.CopyTo(ms); + if (ms.Length > 2) + { + var serializer = new DataContractJsonSerializer(typeof(T)); + return (T)serializer.ReadObject(ms); + } + return default(T); + } } } + public static void ÓrarendBetöltés(Stream s) + { + Órarendek.AddRange(betöltés<Órarend[]>(s) ?? new Órarend[0]); + } + public static void OsztályBetöltés(Stream s) { - using (s) - { - var serializer = new DataContractJsonSerializer(typeof(Osztály[])); - Osztályok = ((Osztály[])serializer.ReadObject(s)); - } + Osztályok = betöltés(s); } public static void BeállításBetöltés(Stream s) { - using (s) - { - var serializer = new DataContractJsonSerializer(typeof(Settings)); - Beállítások = ((Settings)serializer.ReadObject(s)); - } + Beállítások = betöltés(s); } public static void HelyettesítésBetöltés(Stream s) + { //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 + Helyettesítések.AddRange(betöltés(s) ?? new Helyettesítés[0]); + } + + private static void mentés(Stream s, T obj) { using (s) { - var serializer = new DataContractJsonSerializer(typeof(Helyettesítés[])); //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 - Helyettesítések.AddRange((Helyettesítés[])serializer.ReadObject(s)); + if (obj != null) + { + var serializer = new DataContractJsonSerializer(typeof(T)); + serializer.WriteObject(s, obj); + } } } private static void ÓrarendMentés(Stream s) { - using (s) - { - var serializer = new DataContractJsonSerializer(typeof(Órarend[])); - serializer.WriteObject(s, Órarendek); - } + mentés(s, Órarendek.ToArray()); } private static void OsztályMentés(Stream s) { - using (s) - { - var serializer = new DataContractJsonSerializer(typeof(Osztály[])); - serializer.WriteObject(s, Osztályok); - } + mentés(s, Osztályok); } public static void BeállításMentés(Stream s) { - using (s) - { - var serializer = new DataContractJsonSerializer(typeof(Settings)); - serializer.WriteObject(s, Beállítások); - } + mentés(s, Beállítások); } private static void HelyettesítésMentés(Stream s) { - using (s) - { - var serializer = new DataContractJsonSerializer(typeof(Helyettesítés[])); - serializer.WriteObject(s, Helyettesítések); - } + mentés(s, Helyettesítések.ToArray()); } } } diff --git a/OrarendAndroidApp/MainActivity.cs b/OrarendAndroidApp/MainActivity.cs index d124186..e9e3778 100644 --- a/OrarendAndroidApp/MainActivity.cs +++ b/OrarendAndroidApp/MainActivity.cs @@ -28,7 +28,8 @@ namespace OrarendAndroidApp SetContentView(Resource.Layout.MainLayout); ActionBar.SetDisplayShowTitleEnabled(false); ActionBar.CustomView = FindViewById(Resource.Id.spinner); - handler = new Handler(); + handler = new Handler(); + new StreamReader(OpenFileInput("osztaly")).ReadToEnd(); //TODO: TMP, fix "[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]" string[] list = FileList(); if (list.Contains("beallitasok")) API.BeállításBetöltés(OpenFileInput("beallitasok")); @@ -58,21 +59,31 @@ namespace OrarendAndroidApp private void HelyettesítésFrissítés() { - API.HelyettesítésFrissítés().ContinueWith(t => - { //TODO: Ezt ne itt, ne így - }); //TODO: Tárolja el a helyettesített órarendeket is valahogyan, akár külön osztály, hogy csak a változásokat tárolja - } - - private void ÓrarendFrissítés() - { //TODO: Meghívni minden tervezett alkalommal; hozzáadásnál csak a hozzáadott órarendet frissítse - API.Frissítés(OpenFileOutput("orarend", FileCreationMode.Private)).ContinueWith(t => + var bar = FindViewById(Resource.Id.progressBar1); + handler.Post(() => bar.Visibility = ViewStates.Visible); + API.HelyettesítésFrissítés(OpenFileOutput("helyettesites", FileCreationMode.Private)).ContinueWith(t => { handler.Post(() => { - if(TaskHiba(t)) + bar.Visibility = ViewStates.Gone; + Toast.MakeText(this, "Helyettesítések frissítve", ToastLength.Short); + }); + }); + } + + private void ÓrarendFrissítés(Órarend ór = null) + { //TODO: Meghívni minden tervezett alkalommal; hozzáadásnál csak a hozzáadott órarendet frissítse + var bar = FindViewById(Resource.Id.progressBar1); + handler.Post(() => bar.Visibility = ViewStates.Visible); + API.Frissítés(OpenFileOutput("orarend", FileCreationMode.Private), OpenFileOutput("osztaly", FileCreationMode.Private), ór).ContinueWith(t => + { + handler.Post(() => + { + if (TaskHiba(t) && órarend != null && (ór == null || ór == órarend)) { var table = FindViewById(Resource.Id.tableLayout1); - table.RemoveViews(0, table.ChildCount); //TODO: Test + if (table.ChildCount > 1) + table.RemoveViews(1, table.ChildCount); TableRow tr = new TableRow(this); addCell("", Color.Black, tr); addCell("Hétfő", Color.Black, tr); @@ -103,6 +114,8 @@ namespace OrarendAndroidApp } } } + bar.Visibility = ViewStates.Gone; + Toast.MakeText(this, "Órarend és osztálylista frissítve", ToastLength.Long); }); }); } @@ -146,12 +159,7 @@ namespace OrarendAndroidApp { case Resource.Id.menu_refresh: { - var bar = FindViewById(Resource.Id.progressBar1); - handler.Post(() => bar.Visibility = ViewStates.Visible); - API.HelyettesítésFrissítés().ContinueWith(t => //TODO: Megjelenítés frissítése - { - handler.Post(() => bar.Visibility = ViewStates.Gone); - }); + HelyettesítésFrissítés(); break; } case Resource.Id.menu_add: //TODO @@ -160,16 +168,9 @@ namespace OrarendAndroidApp break; case Resource.Id.menu_preferences: //TODO break; - case Resource.Id.menu_fullrefresh: - { - var bar = FindViewById(Resource.Id.progressBar1); - handler.Post(() => bar.Visibility = ViewStates.Visible); - API.Frissítés().ContinueWith(t => //TODO: Megjelenítés frissítése - { - API.ÓrarendMentés(OpenFileOutput("orarend", FileCreationMode.Private)); - API.OsztályMentés(OpenFileOutput("osztaly", FileCreationMode.Private)); //TODO: Beállítások mentése - handler.Post(() => bar.Visibility = ViewStates.Gone); - }); + case Resource.Id.menu_fullrefresh: //TODO: Megjelenítés frissítése + { //TODO: Beállítások mentése + ÓrarendFrissítés(); break; } } diff --git a/OrarendAndroidApp/Resources/Resource.Designer.cs b/OrarendAndroidApp/Resources/Resource.Designer.cs index 589c816..ab352b2 100644 --- a/OrarendAndroidApp/Resources/Resource.Designer.cs +++ b/OrarendAndroidApp/Resources/Resource.Designer.cs @@ -93,53 +93,50 @@ namespace OrarendAndroidApp // aapt resource value: 0x7f060001 public const int horizontalView = 2131099649; + // aapt resource value: 0x7f060009 + public const int idoTV = 2131099657; + // aapt resource value: 0x7f06000a - public const int idoTV = 2131099658; + public const int kezdvegTV = 2131099658; // aapt resource value: 0x7f06000b - public const int kezdvegTV = 2131099659; - - // aapt resource value: 0x7f06000c - public const int kovoraTV = 2131099660; - - // aapt resource value: 0x7f06000f - public const int menu_add = 2131099663; - - // aapt resource value: 0x7f060010 - public const int menu_edit = 2131099664; - - // aapt resource value: 0x7f060012 - public const int menu_fullrefresh = 2131099666; - - // aapt resource value: 0x7f060011 - public const int menu_preferences = 2131099665; + public const int kovoraTV = 2131099659; // aapt resource value: 0x7f06000e - public const int menu_refresh = 2131099662; + public const int menu_add = 2131099662; - // aapt resource value: 0x7f060007 - public const int nevTV = 2131099655; + // aapt resource value: 0x7f06000f + public const int menu_edit = 2131099663; + + // aapt resource value: 0x7f060011 + public const int menu_fullrefresh = 2131099665; + + // aapt resource value: 0x7f060010 + public const int menu_preferences = 2131099664; + + // aapt resource value: 0x7f06000d + public const int menu_refresh = 2131099661; // aapt resource value: 0x7f060006 - public const int pozTV = 2131099654; + public const int nevTV = 2131099654; + + // aapt resource value: 0x7f060005 + public const int pozTV = 2131099653; // aapt resource value: 0x7f060003 public const int progressBar1 = 2131099651; - // aapt resource value: 0x7f060005 - public const int spiner_id = 2131099653; - - // aapt resource value: 0x7f06000d - public const int spinner = 2131099661; + // aapt resource value: 0x7f06000c + public const int spinner = 2131099660; // aapt resource value: 0x7f060002 public const int tableLayout1 = 2131099650; - // aapt resource value: 0x7f060009 - public const int tanarTV = 2131099657; - // aapt resource value: 0x7f060008 - public const int teremTV = 2131099656; + public const int tanarTV = 2131099656; + + // aapt resource value: 0x7f060007 + public const int teremTV = 2131099655; static Id() { diff --git a/OrarendAndroidApp/Resources/layout/MainLayout.axml b/OrarendAndroidApp/Resources/layout/MainLayout.axml index bebb739..52b65a1 100644 --- a/OrarendAndroidApp/Resources/layout/MainLayout.axml +++ b/OrarendAndroidApp/Resources/layout/MainLayout.axml @@ -43,11 +43,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/actionMenuView1" /> -