Added holidays viewer

This commit is contained in:
2023-06-12 17:17:22 +02:00
parent 38c0cfba9c
commit 7a791ef21f
14 changed files with 339 additions and 2 deletions

View File

@ -0,0 +1,13 @@
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'getHolidaysResponse.dart';
class GetHolidays {
Future<GetHolidaysResponse> query() async {
String response = (await http.get(Uri.parse("https://ferien-api.de/api/v1/holidays/HE"))).body;
List<dynamic> parsedListJson = jsonDecode(response);
return GetHolidaysResponse(List<GetHolidaysResponseObject>.from(parsedListJson.map<GetHolidaysResponseObject>((dynamic i) => GetHolidaysResponseObject.fromJson(i))));
}
}

View File

@ -0,0 +1,22 @@
import 'dart:convert';
import '../requestCache.dart';
import 'getHolidays.dart';
import 'getHolidaysResponse.dart';
class GetHolidaysCache extends RequestCache<GetHolidaysResponse> {
GetHolidaysCache({onUpdate, renew}) : super(RequestCache.cacheDay, onUpdate, renew: renew) {
start("MarianumMobile", "state-holidays");
}
@override
GetHolidaysResponse onLocalData(String json) {
List<dynamic> parsedListJson = jsonDecode(json)['data'];
return GetHolidaysResponse(List<GetHolidaysResponseObject>.from(parsedListJson.map<GetHolidaysResponseObject>((dynamic i) => GetHolidaysResponseObject.fromJson(i))));
}
@override
Future<GetHolidaysResponse> onLoad() {
return GetHolidays().query();
}
}

View File

@ -0,0 +1,38 @@
import 'package:json_annotation/json_annotation.dart';
import '../apiResponse.dart';
part 'getHolidaysResponse.g.dart';
@JsonSerializable(explicitToJson: true)
class GetHolidaysResponse extends ApiResponse {
List<GetHolidaysResponseObject> data;
GetHolidaysResponse(this.data);
factory GetHolidaysResponse.fromJson(Map<String, dynamic> json) => _$GetHolidaysResponseFromJson(json);
Map<String, dynamic> toJson() => _$GetHolidaysResponseToJson(this);
}
@JsonSerializable()
class GetHolidaysResponseObject {
String start;
String end;
int year;
String stateCode;
String name;
String slug;
GetHolidaysResponseObject({
required this.start,
required this.end,
required this.year,
required this.stateCode,
required this.name,
required this.slug
});
factory GetHolidaysResponseObject.fromJson(Map<String, dynamic> json) => _$GetHolidaysResponseObjectFromJson(json);
Map<String, dynamic> toJson() => _$GetHolidaysResponseObjectToJson(this);
}

View File

@ -0,0 +1,43 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'getHolidaysResponse.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
GetHolidaysResponse _$GetHolidaysResponseFromJson(Map<String, dynamic> json) =>
GetHolidaysResponse(
(json['data'] as List<dynamic>)
.map((e) =>
GetHolidaysResponseObject.fromJson(e as Map<String, dynamic>))
.toList(),
);
Map<String, dynamic> _$GetHolidaysResponseToJson(
GetHolidaysResponse instance) =>
<String, dynamic>{
'data': instance.data.map((e) => e.toJson()).toList(),
};
GetHolidaysResponseObject _$GetHolidaysResponseObjectFromJson(
Map<String, dynamic> json) =>
GetHolidaysResponseObject(
start: json['start'] as String,
end: json['end'] as String,
year: json['year'] as int,
stateCode: json['stateCode'] as String,
name: json['name'] as String,
slug: json['slug'] as String,
);
Map<String, dynamic> _$GetHolidaysResponseObjectToJson(
GetHolidaysResponseObject instance) =>
<String, dynamic>{
'start': instance.start,
'end': instance.end,
'year': instance.year,
'stateCode': instance.stateCode,
'name': instance.name,
'slug': instance.slug,
};

View File

@ -1,4 +1,5 @@
import 'dart:convert';
import 'dart:developer';
import '../../webuntisApi.dart';
import 'getRoomsResponse.dart';
@ -9,7 +10,14 @@ class GetRooms extends WebuntisApi {
@override
Future<GetRoomsResponse> run() async {
String rawAnswer = await query(this);
return finalize(GetRoomsResponse.fromJson(jsonDecode(rawAnswer)));
try {
return finalize(GetRoomsResponse.fromJson(jsonDecode(rawAnswer)));
} catch(e, trace) {
log(trace.toString());
log("Failed to parse getRoom data with server response: $rawAnswer");
}
throw Exception("Failed to parse getRoom server response");
}
}