import 'dart:convert'; import 'dart:io'; import 'package:xml/xml.dart'; import 'package:http/http.dart' as http; import 'package:shared_preferences/shared_preferences.dart'; class FetchMenu { static var lastFetch = DateTime.now(); static var fetched = false; static Future> get() async { List menus = []; if (!fetched || DateTime.now().difference(lastFetch).inHours >= 2) { menus = await fromRequest(); fetched = true; } else { menus = await fromCache(); } return menus; } static Future> fromCache() async { return await loadCache(); } static Future> fromRequest() async { List menus = []; var now = DateTime.now(); var today = "${now.day.toString().padLeft(2, '0')}.${now.month.toString().padLeft(2, '0')}.${now.year}"; http.Response resp = await http.get(Uri.parse( "https://www.swfr.de/apispeiseplan?&type=98&tx_speiseplan_pi1[apiKey]=c3841e89a2c8c301b890723ecdb786ad&tx_speiseplan_pi1[ort]=677")); //Api Key lays here, modify this shit when you have time var xmlContent = XmlDocument.parse(utf8.decode(resp.bodyBytes)); for (var tagesplan in xmlContent.findAllElements("tagesplan")){ var datum = tagesplan.getAttribute('datum')?.trim(); if (datum == today){ for (var menu in tagesplan.findElements('menue')){ var name = menu.findElements('name').map((e) => e.text).join(", "); menus.add(name); } } } await storeCache(menus); lastFetch = DateTime.now(); return menus; } static Future storeCache(List menus) async { var prefs = await SharedPreferences.getInstance(); for (var i = 0; i < 4; i++) { prefs.setString("menuCache$i", ""); if (i < menus.length) { prefs.setString("menuCache$i", menus[i]); } } } static Future> loadCache() async { var prefs = await SharedPreferences.getInstance(); List menus = []; for (var i = 0; i < 4; i++) { var curr = prefs.getString("menuCache$i"); if (curr != "") { menus.add(curr!); } } return menus; } }