Added Nextcloud base

This commit is contained in:
2023-02-20 10:56:51 +01:00
parent e54ae9c2ff
commit fea36b9a6d
63 changed files with 1863 additions and 700 deletions

View File

@ -1,3 +0,0 @@
class ApiParams {
}

View File

@ -1,6 +0,0 @@
import 'package:http/http.dart' as http;
import 'package:json_annotation/json_annotation.dart';
abstract class ApiResponse {
@JsonKey(includeFromJson: false, includeToJson: false)
late http.Response rawResponse;
}

View File

@ -1,5 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:marianum_mobile/api/webuntis/apiParams.dart';
import 'package:marianum_mobile/api/apiParams.dart';
part 'authenticateParams.g.dart';

View File

@ -1,5 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
part 'authenticateResponse.g.dart';

View File

@ -1,6 +1,8 @@
import 'dart:convert';
import 'dart:developer';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:intl/intl.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
import 'package:marianum_mobile/api/webuntis/webuntisApi.dart';
import 'getHolidaysResponse.dart';
@ -14,4 +16,17 @@ class GetHolidays extends WebuntisApi {
return finalize(GetHolidaysResponse.fromJson(jsonDecode(rawAnswer)));
}
static GetHolidaysResponseObject? find(GetHolidaysResponse holidaysResponse, {DateTime? time}) {
time ??= DateTime.now();
time = DateTime(time.year, time.month, time.day, 0, 0, 0, 0, 0);
for (var element in holidaysResponse.result) {
DateTime start = DateTime.parse(element.startDate.toString());
DateTime end = DateTime.parse(element.endDate.toString());
if(!start.isAfter(time) && !end.isBefore(time)) return element;
}
return null;
}
}

View File

@ -5,8 +5,8 @@ import 'package:marianum_mobile/api/webuntis/queries/getHolidays/getHolidays.dar
import 'package:marianum_mobile/api/webuntis/queries/getHolidays/getHolidaysResponse.dart';
class GetHolidaysCache extends RequestCache<GetHolidaysResponse> {
GetHolidaysCache({onUpdate}) : super(60 * 60, onUpdate) {
start("holidays", "data");
GetHolidaysCache({onUpdate}) : super(RequestCache.cacheDay, onUpdate) {
start("MarianumMobile", "wu-holidays");
}
@override

View File

@ -1,5 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
part 'getHolidaysResponse.g.dart';

View File

@ -1,6 +1,6 @@
import 'dart:convert';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
import 'package:marianum_mobile/api/webuntis/webuntisApi.dart';
import 'getRoomsResponse.dart';

View File

@ -6,8 +6,8 @@ import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRoomsResponse.d
import 'getRooms.dart';
class GetRoomsCache extends RequestCache<GetRoomsResponse> {
GetRoomsCache({onUpdate}) : super(60 * 60, onUpdate) {
start("rooms", "data");
GetRoomsCache({onUpdate}) : super(RequestCache.cacheHour, onUpdate) {
start("MarianumMobile", "wu-rooms");
}
@override

View File

@ -1,5 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
part 'getRoomsResponse.g.dart';
@ -21,7 +21,6 @@ class GetRoomsResponseObject {
bool active;
String building;
GetRoomsResponseObject(this.id, this.name, this.longName, this.active, this.building);
factory GetRoomsResponseObject.fromJson(Map<String, dynamic> json) => _$GetRoomsResponseObjectFromJson(json);

View File

@ -2,7 +2,7 @@ import 'dart:convert';
import 'package:marianum_mobile/api/webuntis/webuntisApi.dart';
import '../../apiResponse.dart';
import '../../../apiResponse.dart';
import 'getSubjectsResponse.dart';
class GetSubjects extends WebuntisApi {

View File

@ -6,8 +6,8 @@ import 'package:marianum_mobile/api/webuntis/queries/getSubjects/getSubjectsResp
import 'getSubjects.dart';
class GetSubjectsCache extends RequestCache<GetSubjectsResponse> {
GetSubjectsCache({onUpdate}) : super(60 * 60, onUpdate) {
start("subjects", "data");
GetSubjectsCache({onUpdate}) : super(RequestCache.cacheHour, onUpdate) {
start("MarianumMobile", "wu-subjects");
}
@override

View File

@ -1,5 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
part 'getSubjectsResponse.g.dart';

View File

@ -1,7 +1,7 @@
import 'dart:convert';
import 'dart:developer';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
import 'package:marianum_mobile/api/webuntis/webuntisApi.dart';
import 'getTimetableParams.dart';

View File

@ -12,8 +12,8 @@ import 'getTimetableResponse.dart';
class GetTimetableCache extends RequestCache<GetTimetableResponse> {
int day;
GetTimetableCache({required onUpdate, required this.day}) : super(30, onUpdate) {
start("timetable", "$day");
GetTimetableCache({required onUpdate, required this.day}) : super(RequestCache.cacheMinute, onUpdate) {
start("MarianumMobile", "wu-timetable-$day");
}
@override
@ -25,14 +25,18 @@ class GetTimetableCache extends RequestCache<GetTimetableResponse> {
Future<GetTimetableResponse> onLoad() async {
return GetTimetable(
GetTimetableParams(
options: GetTimetableParamsOptions(
element: GetTimetableParamsOptionsElement(
id: (await Authenticate.getSession()).personId,
type: 5,
keyType: GetTimetableParamsOptionsElementKeyType.id,
),
startDate: day,
endDate: day,
options: GetTimetableParamsOptions(
element: GetTimetableParamsOptionsElement(
id: (await Authenticate.getSession()).personId,
type: 5,
keyType: GetTimetableParamsOptionsElementKeyType.id,
),
startDate: day,
endDate: day,
teacherFields: GetTimetableParamsOptionsFields.all,
subjectFields: GetTimetableParamsOptionsFields.all,
roomFields: GetTimetableParamsOptionsFields.all,
klasseFields: GetTimetableParamsOptionsFields.all,
)
)
).run();

View File

@ -1,5 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:marianum_mobile/api/webuntis/apiParams.dart';
import 'package:marianum_mobile/api/apiParams.dart';
part 'getTimetableParams.g.dart';
@ -36,13 +36,13 @@ class GetTimetableParamsOptions {
@JsonKey(includeIfNull: false)
bool? showStudentgroup;
@JsonKey(includeIfNull: false)
GetTimetableParamsOptionsFields? klasseFields;
List<GetTimetableParamsOptionsFields>? klasseFields;
@JsonKey(includeIfNull: false)
GetTimetableParamsOptionsFields? roomFields;
List<GetTimetableParamsOptionsFields>? roomFields;
@JsonKey(includeIfNull: false)
GetTimetableParamsOptionsFields? subjectFields;
List<GetTimetableParamsOptionsFields>? subjectFields;
@JsonKey(includeIfNull: false)
GetTimetableParamsOptionsFields? teacherFields;
List<GetTimetableParamsOptionsFields>? teacherFields;
GetTimetableParamsOptions({
required this.element,
@ -69,7 +69,9 @@ enum GetTimetableParamsOptionsFields {
@JsonValue("id") id,
@JsonValue("name") name,
@JsonValue("longname") longname,
@JsonValue("externalkey") externalkey,
@JsonValue("externalkey") externalkey;
static List<GetTimetableParamsOptionsFields> all = [id, name, longname, externalkey];
}
@JsonSerializable()

View File

@ -31,14 +31,18 @@ GetTimetableParamsOptions _$GetTimetableParamsOptionsFromJson(
showLsText: json['showLsText'] as bool?,
showLsNumber: json['showLsNumber'] as bool?,
showStudentgroup: json['showStudentgroup'] as bool?,
klasseFields: $enumDecodeNullable(
_$GetTimetableParamsOptionsFieldsEnumMap, json['klasseFields']),
roomFields: $enumDecodeNullable(
_$GetTimetableParamsOptionsFieldsEnumMap, json['roomFields']),
subjectFields: $enumDecodeNullable(
_$GetTimetableParamsOptionsFieldsEnumMap, json['subjectFields']),
teacherFields: $enumDecodeNullable(
_$GetTimetableParamsOptionsFieldsEnumMap, json['teacherFields']),
klasseFields: (json['klasseFields'] as List<dynamic>?)
?.map((e) => $enumDecode(_$GetTimetableParamsOptionsFieldsEnumMap, e))
.toList(),
roomFields: (json['roomFields'] as List<dynamic>?)
?.map((e) => $enumDecode(_$GetTimetableParamsOptionsFieldsEnumMap, e))
.toList(),
subjectFields: (json['subjectFields'] as List<dynamic>?)
?.map((e) => $enumDecode(_$GetTimetableParamsOptionsFieldsEnumMap, e))
.toList(),
teacherFields: (json['teacherFields'] as List<dynamic>?)
?.map((e) => $enumDecode(_$GetTimetableParamsOptionsFieldsEnumMap, e))
.toList(),
);
Map<String, dynamic> _$GetTimetableParamsOptionsToJson(
@ -62,14 +66,26 @@ Map<String, dynamic> _$GetTimetableParamsOptionsToJson(
writeNotNull('showLsText', instance.showLsText);
writeNotNull('showLsNumber', instance.showLsNumber);
writeNotNull('showStudentgroup', instance.showStudentgroup);
writeNotNull('klasseFields',
_$GetTimetableParamsOptionsFieldsEnumMap[instance.klasseFields]);
writeNotNull('roomFields',
_$GetTimetableParamsOptionsFieldsEnumMap[instance.roomFields]);
writeNotNull('subjectFields',
_$GetTimetableParamsOptionsFieldsEnumMap[instance.subjectFields]);
writeNotNull('teacherFields',
_$GetTimetableParamsOptionsFieldsEnumMap[instance.teacherFields]);
writeNotNull(
'klasseFields',
instance.klasseFields
?.map((e) => _$GetTimetableParamsOptionsFieldsEnumMap[e]!)
.toList());
writeNotNull(
'roomFields',
instance.roomFields
?.map((e) => _$GetTimetableParamsOptionsFieldsEnumMap[e]!)
.toList());
writeNotNull(
'subjectFields',
instance.subjectFields
?.map((e) => _$GetTimetableParamsOptionsFieldsEnumMap[e]!)
.toList());
writeNotNull(
'teacherFields',
instance.teacherFields
?.map((e) => _$GetTimetableParamsOptionsFieldsEnumMap[e]!)
.toList());
return val;
}

View File

@ -1,5 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
part 'getTimetableResponse.g.dart';

View File

@ -3,19 +3,20 @@ import 'dart:developer';
import 'package:marianum_mobile/api/apiRequest.dart';
import 'package:http/http.dart' as http;
import 'package:marianum_mobile/api/webuntis/webuntisError.dart';
import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
import 'apiParams.dart';
import '../apiParams.dart';
import 'queries/authenticate/authenticate.dart';
abstract class WebuntisApi extends ApiRequest {
Uri endpoint = Uri.parse("https://peleus.webuntis.com/WebUntis/jsonrpc.do?school=marianum-fulda");
String method;
ApiParams? genericParam;
http.Response? response;
bool authenticatedResponse;
WebuntisApi(this.method, this.genericParam, {this.authenticatedResponse = true}) : super(Uri.parse("https://peleus.webuntis.com/WebUntis/jsonrpc.do?school=marianum-fulda"));
WebuntisApi(this.method, this.genericParam, {this.authenticatedResponse = true});
Future<String> query(WebuntisApi untis) async {
@ -50,4 +51,14 @@ abstract class WebuntisApi extends ApiRequest {
String _body() {
return genericParam == null ? "{}" : jsonEncode(genericParam);
}
Future<http.Response> post(String data, Map<String, String>? headers) async {
log("POST: $endpoint\n$data");
return await http
.post(endpoint, body: data, headers: headers)
.timeout(
const Duration(seconds: 10),
onTimeout: () => throw WebuntisError("Timeout", 1)
);
}
}

View File

@ -4,6 +4,7 @@ class WebuntisError {
WebuntisError(this.message, this.code);
@override
String toString() {
return "WebUntis ($code): $message";
}