Pretty JSON and extended Webuntis Error Handling

This commit is contained in:
Elias Müller 2023-02-22 16:31:26 +01:00
parent 7cbae807e4
commit 4274393cd2
5 changed files with 47 additions and 14 deletions

View File

@ -555,6 +555,13 @@
</list> </list>
</value> </value>
</entry> </entry>
<entry key="pretty_json">
<value>
<list>
<option value="$USER_HOME$/.pub-cache/hosted/pub.dev/pretty_json-2.0.0/lib" />
</list>
</value>
</entry>
<entry key="process"> <entry key="process">
<value> <value>
<list> <list>
@ -964,6 +971,7 @@
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.3/lib" /> <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.3/lib" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/pointycastle-3.6.2/lib" /> <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/pointycastle-3.6.2/lib" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/pool-1.5.1/lib" /> <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/pool-1.5.1/lib" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/pretty_json-2.0.0/lib" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/process-4.2.4/lib" /> <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/process-4.2.4/lib" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/provider-6.0.5/lib" /> <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/provider-6.0.5/lib" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/pub_semver-2.1.3/lib" /> <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/pub_semver-2.1.3/lib" />

View File

@ -90,6 +90,7 @@ class _AppState extends State<App> {
const Icon(Icons.chat), const Icon(Icons.chat),
Consumer<ChatListProps>( Consumer<ChatListProps>(
builder: (context, value, child) { 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); int messages = value.getRoomsResponse.data.map((e) => e.unreadMessages).reduce((a, b) => a+b);
return Visibility( return Visibility(
visible: messages > 0, visible: messages > 0,

View File

@ -1,8 +1,10 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart'; import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/api/webuntis/queries/getHolidays/getHolidaysResponse.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 'package:timetable_view/timetable_view.dart';
import '../../../api/webuntis/queries/getHolidays/getHolidays.dart'; import '../../../api/webuntis/queries/getHolidays/getHolidays.dart';
@ -80,6 +82,20 @@ class _WeekViewState extends State<WeekView> {
ListTile( ListTile(
leading: const Icon(Icons.people), leading: const Icon(Icons.people),
title: Text("Klasse(n): ${timetableData.kl.map((e) => e['name']).join(", ")}"), 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")))
],
);
}),
) )
], ],
), ),
@ -144,6 +160,7 @@ class _WeekViewState extends State<WeekView> {
List<TableEvent> events = List<TableEvent>.generate( List<TableEvent> events = List<TableEvent>.generate(
timetable.result.where((element) => element.date == day).length, (index) { timetable.result.where((element) => element.date == day).length, (index) {
GetTimetableResponseObject tableEvent = timetable.result.where((element) => element.date == day).elementAt(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']); GetSubjectsResponseObject subject = subjects.result.firstWhere((subject) => subject.id == tableEvent.su[0]['id']);
return TableEvent( return TableEvent(
@ -158,8 +175,11 @@ class _WeekViewState extends State<WeekView> {
currentDay.add(Duration(hours: parseTime(tableEvent.startTime).hour, minutes: parseTime(tableEvent.startTime).minute)), 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)), 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));
}
} }
); );
@ -238,7 +258,7 @@ class CustomTableStyle extends TimetableStyle {
@override @override
double get timeItemHeight => MediaQuery.of(context).size.width > 1000 ? 60 : 90; double get timeItemHeight => MediaQuery.of(context).size.width > 1000 ? 60 : 90;
@override @override
double get timeItemWidth => 50; double get timeItemWidth => 40;
@override @override
double get laneHeight => 40; double get laneHeight => 40;
@override @override

View File

@ -59,16 +59,14 @@ class _DebugOverviewState extends State<DebugOverview> {
itemCount: files.length, itemCount: files.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
String filename = files[index].split("/").last; String filename = files[index].split("/").last;
//String data = getValue(index).toString().replaceAll("{", "{\n ").replaceAll("[", "[\n ").replaceAll(",", ",\n ");
String data = getValue(index).toString();
return ListTile( return ListTile(
leading: const Icon(Icons.text_snippet_outlined), 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, textColor: Colors.black,
onTap: () { onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) { Navigator.push(context, MaterialPageRoute(builder: (context) {
return JsonViewer(title: filename, data: data); return JsonViewer(title: filename, data: getValue(index));
},)); },));
}, },
); );

View File

@ -1,8 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pretty_json/pretty_json.dart';
class JsonViewer extends StatelessWidget { class JsonViewer extends StatelessWidget {
String title; String title;
String data; Map<String, dynamic> data;
JsonViewer({Key? key, required this.title, required this.data}) : super(key: key); JsonViewer({Key? key, required this.title, required this.data}) : super(key: key);
@ -14,8 +15,13 @@ class JsonViewer extends StatelessWidget {
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
child: Text(data.replaceAllMapped(RegExp(r'[{,}]'), (match) => "${match.group(0)}\n ")), child: Text(format(data)),
), ),
); );
} }
static String format(Map<String, dynamic> jsonInput) {
return prettyJson(jsonInput, indent: 2);
//return jsonInput.replaceAllMapped(RegExp(r'[{,}]'), (match) => "${match.group(0)}\n ");
}
} }