Pretty JSON and extended Webuntis Error Handling
This commit is contained in:
parent
7cbae807e4
commit
4274393cd2
8
.idea/libraries/Dart_Packages.xml
generated
8
.idea/libraries/Dart_Packages.xml
generated
@ -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" />
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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));
|
||||||
},));
|
},));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -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 ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user