public List <Struct_Mensa_Display> getCurrentList() { List <Struct_Mensa_Display> ldi = new List <Struct_Mensa_Display>(); //Lsite zum anzeigen if (core._collection.item == null) { Struct_Mensa_Display di = new Struct_Mensa_Display(); di.Food = TextContainer.Mensa_Empty_Content; di.Description = ""; di.Category = TextContainer.Mensa_Empty_Title; di.Price_Standard = ""; di.Price_Student = ""; ldi.Add(di); return(ldi); } Struct_Mensa_Day mi = core._collection.item[index]; if (mi.isOk && mi.food != null) { foreach (Struct_Mensa_Food fd in mi.food) { Struct_Mensa_Display di = new Struct_Mensa_Display(); di.Food = fd.name; di.Description = ""; di.Category = fd.category; di.Price_Standard = buildPriceString(fd.prices.employees); di.Price_Student = buildPriceString(fd.prices.students); ldi.Add(di); } } else { Struct_Mensa_Display di = new Struct_Mensa_Display(); di.Food = "Nicht verfügbar"; di.Description = "Eventuell hat die Mensa geschlossen."; di.Category = "Nicht verfügbar"; di.Price_Standard = ""; di.Price_Student = ""; ldi.Add(di); } return(ldi); }
//Lädt den Mensaplan für den angegebenen Tag herunter public async Task <Struct_Mensa_Day> download(DateTime day) { //Temporären Eintrag anlegen Struct_Mensa_Day temp_item = new Struct_Mensa_Day(); //Eintrag als ungültig markieren temp_item.isOk = false; //Prüfen ob eine Internetverbindung besteht bool isInternetConnected = NetworkInterface.GetIsNetworkAvailable(); if (!isInternetConnected) { //Es besteht keine Verbindung, Abruf abbrechen und bisherigen ungültigen Eintrag //zurückgeben return(temp_item); } try { //Daten über HTTP Client und URL abrufen HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync(new Uri("http://openmensa.org/api/v2/canteens/129/days/" + day.Year + "-" + day.Month + "-" + day.Day + "/meals")); //JSON Antwort konvertieren var jsonString = await response.Content.ReadAsStringAsync(); Struct_Mensa_Food[] temp_meals = JsonConvert.DeserializeObject <Struct_Mensa_Food[]>(jsonString); //Heruntergeladene Gerichte dem Eintrag hinzufügen temp_item.food = temp_meals; //Eintrag als gültig markieren temp_item.isOk = true; } catch (Exception ex) { //Eine Ausnahme ist aufgetreten, Eintrag als ungültig annehmen temp_item.isOk = false; } //Erstellten Eintrag zurückgeben return(temp_item); }
// aktualsisiert und speichert die lokale Liste public async Task <bool> sync() { //Aktuellen Wochentag bestimmen int dayID = (int)DateTime.Now.DayOfWeek; //Anzahl der abzurufenden Tage int count = 0; //Es ist ein Samstag oder Sonntag, nur die Daten für die kommende //Woche herunterladen if (dayID == 0) { count = 6; } else if (dayID == 6) { count = 7; } //Es ist ein Werktag, verbleibende Tage der aktuellen Woche und komplette //nächste Woche herunterladen else { count = 12 - (dayID - 1); } //Neue temproräre Sammlung anlegen Struct_Mensa_Collection temp_collection = new Struct_Mensa_Collection(); //Datum der Atualisierung auf aktuelles Datum setzen temp_collection.date_update = DateTime.Now; //Array für Einträge in vorher bestimmter Größe anlegen Struct_Mensa_Day[] items = new Struct_Mensa_Day[count]; //Temporäres Datum anlegen, mit aktuellen Datum initialisieren DateTime temp_date = DateTime.Now; //Temp. Zähler für erfolgreiche Datenabrufe int temp_count_suc = 0; //Schleife für jeden abzurufenden Tag durchlaufen for (int i = 0; i < count; i++) { //Eintrag mit heruntergeladenen Daten füllen items[i] = await download(temp_date); //Größenangabe erhöhen temp_collection.count++; //Datum dem Eintrag hinzufügen items[i].day = temp_date; //Datum für Datenabruf erhöhen temp_date = temp_date.AddDays(1); //Einen Tag hinzurechnen //Prüfen ob Eintrag gültig if (items[i].isOk) { //Zähler für erfolgreiche Abrufe erhöhen temp_count_suc++; } } //Einträge dem Temp. Datensatz hinzufügen temp_collection.item = items; //Datensatz als gültig markieren temp_collection.isValid = true; //Wenn mehr als ein Datensatz erfolgreich abgerufen werden konnte if (temp_count_suc > 0) { //Temp. Datensatz als aktiven Datensatz übernehmen _collection = temp_collection; //Datensatz zur Offlinenutzung speichern writeCollection(_collection); //Erfolgreiche Aktualisierung zurückgeben return(true); } else { //Nicht erfolgreiche Aktualisierung zurückgeben return(false); } }