From 4274393cd2bafd56f7b9537e239736088b71ba97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Wed, 22 Feb 2023 16:31:26 +0100 Subject: [PATCH] Pretty JSON and extended Webuntis Error Handling --- .idea/libraries/Dart_Packages.xml | 8 +++++ lib/app.dart | 1 + lib/screen/pages/timetable/weekView.dart | 36 +++++++++++++++----- lib/screen/settings/debug/debugOverview.dart | 6 ++-- lib/screen/settings/debug/jsonViewer.dart | 10 ++++-- 5 files changed, 47 insertions(+), 14 deletions(-) diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index eaf8ef7..8959fcc 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -555,6 +555,13 @@ + + + + + + @@ -964,6 +971,7 @@ + diff --git a/lib/app.dart b/lib/app.dart index 3185cb5..8aa19d5 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -90,6 +90,7 @@ class _AppState extends State { const Icon(Icons.chat), Consumer( builder: (context, value, child) { + if(value.primaryLoading()) return const SizedBox.shrink(); int messages = value.getRoomsResponse.data.map((e) => e.unreadMessages).reduce((a, b) => a+b); return Visibility( visible: messages > 0, diff --git a/lib/screen/pages/timetable/weekView.dart b/lib/screen/pages/timetable/weekView.dart index d594905..157b55c 100644 --- a/lib/screen/pages/timetable/weekView.dart +++ b/lib/screen/pages/timetable/weekView.dart @@ -1,8 +1,10 @@ import 'package:flutter/cupertino.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:marianum_mobile/api/webuntis/queries/getHolidays/getHolidaysResponse.dart'; +import 'package:marianum_mobile/screen/settings/debug/jsonViewer.dart'; import 'package:timetable_view/timetable_view.dart'; import '../../../api/webuntis/queries/getHolidays/getHolidays.dart'; @@ -80,6 +82,20 @@ class _WeekViewState extends State { ListTile( leading: const Icon(Icons.people), title: Text("Klasse(n): ${timetableData.kl.map((e) => e['name']).join(", ")}"), + ), + ListTile( + leading: const Icon(Icons.bug_report_outlined), + title: const Text("Webuntis Rohdaten zeigen"), + onTap: () => showDialog(context: context, builder: (context) { + return AlertDialog( + scrollable: true, + title: const Text("Rohdaten"), + content: Text(JsonViewer.format(timetableData.toJson())), + actions: [ + TextButton(onPressed: () => Navigator.of(context).pop(), child: const SingleChildScrollView(child: Text("Schließen"))) + ], + ); + }), ) ], ), @@ -142,8 +158,9 @@ class _WeekViewState extends State { //Every Day List events = List.generate( - timetable.result.where((element) => element.date == day).length, (index) { - GetTimetableResponseObject tableEvent = timetable.result.where((element) => element.date == day).elementAt(index); + timetable.result.where((element) => element.date == day).length, (index) { + GetTimetableResponseObject tableEvent = timetable.result.where((element) => element.date == day).elementAt(index); + try { GetSubjectsResponseObject subject = subjects.result.firstWhere((subject) => subject.id == tableEvent.su[0]['id']); return TableEvent( @@ -158,9 +175,12 @@ class _WeekViewState extends State { currentDay.add(Duration(hours: parseTime(tableEvent.startTime).hour, minutes: parseTime(tableEvent.startTime).minute)), currentDay.add(Duration(hours: parseTime(tableEvent.endTime).hour, minutes: parseTime(tableEvent.endTime).minute)), ), - location: "\n${rooms.result.firstWhere((room) => room.id == tableEvent.ro[0]['id']).name} - ${tableEvent.te[0]['longname']} (${tableEvent.te[0]['name']})", + location: "\n${rooms.result.firstWhereOrNull((room) => room.id == tableEvent.ro[0]['id'])?.name ?? "?"} - ${tableEvent.te[0]['longname']} (${tableEvent.te[0]['name']})", ); + } on Error { + return TableEvent(title: "Unbekannt", eventId: index, laneIndex: day, startTime: parseTime(tableEvent.startTime), endTime: parseTime(tableEvent.endTime)); } + } ); //Timepointer @@ -176,10 +196,10 @@ class _WeekViewState extends State { } laneEvents.add( - LaneEvents( - lane: currentLane, - events: events - ) + LaneEvents( + lane: currentLane, + events: events + ) ); } @@ -238,7 +258,7 @@ class CustomTableStyle extends TimetableStyle { @override double get timeItemHeight => MediaQuery.of(context).size.width > 1000 ? 60 : 90; @override - double get timeItemWidth => 50; + double get timeItemWidth => 40; @override double get laneHeight => 40; @override diff --git a/lib/screen/settings/debug/debugOverview.dart b/lib/screen/settings/debug/debugOverview.dart index e706190..3843adc 100644 --- a/lib/screen/settings/debug/debugOverview.dart +++ b/lib/screen/settings/debug/debugOverview.dart @@ -59,16 +59,14 @@ class _DebugOverviewState extends State { itemCount: files.length, itemBuilder: (context, index) { String filename = files[index].split("/").last; - //String data = getValue(index).toString().replaceAll("{", "{\n ").replaceAll("[", "[\n ").replaceAll(",", ",\n "); - String data = getValue(index).toString(); return ListTile( leading: const Icon(Icons.text_snippet_outlined), - title: Text("(${data.length} z) [$filename] ${Jiffy.unixFromMillisecondsSinceEpoch(getValue(index)['lastupdate']).fromNow()}"), + title: Text("(${getValue(index).toString().length} z) [$filename] ${Jiffy.unixFromMillisecondsSinceEpoch(getValue(index)['lastupdate']).fromNow()}"), textColor: Colors.black, onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) { - return JsonViewer(title: filename, data: data); + return JsonViewer(title: filename, data: getValue(index)); },)); }, ); diff --git a/lib/screen/settings/debug/jsonViewer.dart b/lib/screen/settings/debug/jsonViewer.dart index 7bd1211..616dda7 100644 --- a/lib/screen/settings/debug/jsonViewer.dart +++ b/lib/screen/settings/debug/jsonViewer.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:pretty_json/pretty_json.dart'; class JsonViewer extends StatelessWidget { String title; - String data; + Map data; JsonViewer({Key? key, required this.title, required this.data}) : super(key: key); @@ -14,8 +15,13 @@ class JsonViewer extends StatelessWidget { ), body: SingleChildScrollView( scrollDirection: Axis.vertical, - child: Text(data.replaceAllMapped(RegExp(r'[{,}]'), (match) => "${match.group(0)}\n ")), + child: Text(format(data)), ), ); } + + static String format(Map jsonInput) { + return prettyJson(jsonInput, indent: 2); + //return jsonInput.replaceAllMapped(RegExp(r'[{,}]'), (match) => "${match.group(0)}\n "); + } }