diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml
index 97f306b..307aa47 100644
--- a/.idea/libraries/Dart_Packages.xml
+++ b/.idea/libraries/Dart_Packages.xml
@@ -5,224 +5,224 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -236,21 +236,21 @@
-
+
-
+
-
+
@@ -271,329 +271,357 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -607,320 +635,348 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml
index 3e1b5a3..0ed35db 100644
--- a/.idea/libraries/Flutter_Plugins.xml
+++ b/.idea/libraries/Flutter_Plugins.xml
@@ -1,22 +1,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/api/requestCache.dart b/lib/api/requestCache.dart
new file mode 100644
index 0000000..5e716bb
--- /dev/null
+++ b/lib/api/requestCache.dart
@@ -0,0 +1,32 @@
+import 'dart:convert';
+
+import 'package:localstore/localstore.dart';
+
+abstract class RequestCache {
+ int maxCacheTime;
+ Function(T) onUpdate;
+
+ RequestCache(this.maxCacheTime, this.onUpdate);
+
+ void start(String file, String document) async {
+ Map? tableData = await Localstore.instance.collection(file).doc(document).get();
+ if(tableData != null) {
+ onUpdate(onLocalData(tableData['json']));
+ }
+
+ if(DateTime.now().millisecondsSinceEpoch - (maxCacheTime * 1000) < (tableData?['lastupdate'] ?? 0)) {
+ return;
+ }
+
+ T newValue = await onLoad();
+ onUpdate(newValue);
+
+ Localstore.instance.collection(file).doc(document).set({
+ "json": jsonEncode(newValue),
+ "lastupdate": DateTime.now().millisecondsSinceEpoch
+ });
+ }
+
+ T onLocalData(String json);
+ Future onLoad();
+}
\ No newline at end of file
diff --git a/lib/api/webuntis/queries/getRooms/getRoomsCache.dart b/lib/api/webuntis/queries/getRooms/getRoomsCache.dart
new file mode 100644
index 0000000..1104637
--- /dev/null
+++ b/lib/api/webuntis/queries/getRooms/getRoomsCache.dart
@@ -0,0 +1,23 @@
+import 'dart:convert';
+
+import 'package:marianum_mobile/api/requestCache.dart';
+import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRoomsResponse.dart';
+
+import 'getRooms.dart';
+
+class GetRoomsCache extends RequestCache {
+ GetRoomsCache({onUpdate}) : super(60 * 60, onUpdate) {
+ start("rooms", "data");
+ }
+
+ @override
+ Future onLoad() {
+ return GetRooms().run();
+ }
+
+ @override
+ GetRoomsResponse onLocalData(String json) {
+ return GetRoomsResponse.fromJson(jsonDecode(json));
+ }
+
+}
\ No newline at end of file
diff --git a/lib/api/webuntis/queries/getRooms/getRoomsResponse.dart b/lib/api/webuntis/queries/getRooms/getRoomsResponse.dart
index 37d8689..4f1cfe3 100644
--- a/lib/api/webuntis/queries/getRooms/getRoomsResponse.dart
+++ b/lib/api/webuntis/queries/getRooms/getRoomsResponse.dart
@@ -3,7 +3,7 @@ import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
part 'getRoomsResponse.g.dart';
-@JsonSerializable()
+@JsonSerializable(explicitToJson: true)
class GetRoomsResponse extends ApiResponse {
Set result;
diff --git a/lib/api/webuntis/queries/getRooms/getRoomsResponse.g.dart b/lib/api/webuntis/queries/getRooms/getRoomsResponse.g.dart
index f2c2825..7dbdf7a 100644
--- a/lib/api/webuntis/queries/getRooms/getRoomsResponse.g.dart
+++ b/lib/api/webuntis/queries/getRooms/getRoomsResponse.g.dart
@@ -16,7 +16,7 @@ GetRoomsResponse _$GetRoomsResponseFromJson(Map json) =>
Map _$GetRoomsResponseToJson(GetRoomsResponse instance) =>
{
- 'result': instance.result.toList(),
+ 'result': instance.result.map((e) => e.toJson()).toList(),
};
GetRoomsResponseObject _$GetRoomsResponseObjectFromJson(
diff --git a/lib/api/webuntis/queries/getSubjects/getSubjects.dart b/lib/api/webuntis/queries/getSubjects/getSubjects.dart
new file mode 100644
index 0000000..78a0a0f
--- /dev/null
+++ b/lib/api/webuntis/queries/getSubjects/getSubjects.dart
@@ -0,0 +1,16 @@
+import 'dart:convert';
+
+import 'package:marianum_mobile/api/webuntis/webuntisApi.dart';
+
+import '../../apiResponse.dart';
+import 'getSubjectsResponse.dart';
+
+class GetSubjects extends WebuntisApi {
+ GetSubjects() : super("getSubjects", null);
+
+ @override
+ Future run() async {
+ String rawAnswer = await query(this);
+ return finalize(GetSubjectsResponse.fromJson(jsonDecode(rawAnswer)));
+ }
+}
\ No newline at end of file
diff --git a/lib/api/webuntis/queries/getSubjects/getSubjectsCache.dart b/lib/api/webuntis/queries/getSubjects/getSubjectsCache.dart
new file mode 100644
index 0000000..8c4a6ba
--- /dev/null
+++ b/lib/api/webuntis/queries/getSubjects/getSubjectsCache.dart
@@ -0,0 +1,23 @@
+import 'dart:convert';
+
+import 'package:marianum_mobile/api/requestCache.dart';
+import 'package:marianum_mobile/api/webuntis/queries/getSubjects/getSubjectsResponse.dart';
+
+import 'getSubjects.dart';
+
+class GetSubjectsCache extends RequestCache {
+ GetSubjectsCache({onUpdate}) : super(60 * 60, onUpdate) {
+ start("subjects", "data");
+ }
+
+ @override
+ Future onLoad() {
+ return GetSubjects().run();
+ }
+
+ @override
+ onLocalData(String json) {
+ return GetSubjectsResponse.fromJson(jsonDecode(json));
+ }
+
+}
\ No newline at end of file
diff --git a/lib/api/webuntis/queries/getSubjects/getSubjectsResponse.dart b/lib/api/webuntis/queries/getSubjects/getSubjectsResponse.dart
new file mode 100644
index 0000000..897e2ae
--- /dev/null
+++ b/lib/api/webuntis/queries/getSubjects/getSubjectsResponse.dart
@@ -0,0 +1,28 @@
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marianum_mobile/api/webuntis/apiResponse.dart';
+
+part 'getSubjectsResponse.g.dart';
+
+@JsonSerializable(explicitToJson: true)
+class GetSubjectsResponse extends ApiResponse {
+ Set result;
+
+ GetSubjectsResponse(this.result);
+
+ factory GetSubjectsResponse.fromJson(Map json) => _$GetSubjectsResponseFromJson(json);
+ Map toJson() => _$GetSubjectsResponseToJson(this);
+}
+
+@JsonSerializable(explicitToJson: true)
+class GetSubjectsResponseObject {
+ int id;
+ String name;
+ String longName;
+ String alternateName;
+ bool active;
+
+ GetSubjectsResponseObject(this.id, this.name, this.longName, this.alternateName, this.active);
+
+ factory GetSubjectsResponseObject.fromJson(Map json) => _$GetSubjectsResponseObjectFromJson(json);
+ Map toJson() => _$GetSubjectsResponseObjectToJson(this);
+}
\ No newline at end of file
diff --git a/lib/api/webuntis/queries/getSubjects/getSubjectsResponse.g.dart b/lib/api/webuntis/queries/getSubjects/getSubjectsResponse.g.dart
new file mode 100644
index 0000000..05e5626
--- /dev/null
+++ b/lib/api/webuntis/queries/getSubjects/getSubjectsResponse.g.dart
@@ -0,0 +1,41 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'getSubjectsResponse.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+GetSubjectsResponse _$GetSubjectsResponseFromJson(Map json) =>
+ GetSubjectsResponse(
+ (json['result'] as List)
+ .map((e) =>
+ GetSubjectsResponseObject.fromJson(e as Map))
+ .toSet(),
+ );
+
+Map _$GetSubjectsResponseToJson(
+ GetSubjectsResponse instance) =>
+ {
+ 'result': instance.result.map((e) => e.toJson()).toList(),
+ };
+
+GetSubjectsResponseObject _$GetSubjectsResponseObjectFromJson(
+ Map json) =>
+ GetSubjectsResponseObject(
+ json['id'] as int,
+ json['name'] as String,
+ json['longName'] as String,
+ json['alternateName'] as String,
+ json['active'] as bool,
+ );
+
+Map _$GetSubjectsResponseObjectToJson(
+ GetSubjectsResponseObject instance) =>
+ {
+ 'id': instance.id,
+ 'name': instance.name,
+ 'longName': instance.longName,
+ 'alternateName': instance.alternateName,
+ 'active': instance.active,
+ };
diff --git a/lib/api/webuntis/queries/getTimetable/getTimetable.dart b/lib/api/webuntis/queries/getTimetable/getTimetable.dart
index e1e1885..6d75057 100644
--- a/lib/api/webuntis/queries/getTimetable/getTimetable.dart
+++ b/lib/api/webuntis/queries/getTimetable/getTimetable.dart
@@ -15,7 +15,6 @@ class GetTimetable extends WebuntisApi {
@override
Future run() async {
String rawAnswer = await query(this);
- log(rawAnswer);
return finalize(GetTimetableResponse.fromJson(jsonDecode(rawAnswer)));
}
diff --git a/lib/api/webuntis/queries/getTimetable/getTimetableCache.dart b/lib/api/webuntis/queries/getTimetable/getTimetableCache.dart
new file mode 100644
index 0000000..48290ca
--- /dev/null
+++ b/lib/api/webuntis/queries/getTimetable/getTimetableCache.dart
@@ -0,0 +1,40 @@
+import 'dart:convert';
+import 'dart:developer';
+
+import 'package:localstore/localstore.dart';
+import 'package:marianum_mobile/api/requestCache.dart';
+
+import '../authenticate/authenticate.dart';
+import 'getTimetable.dart';
+import 'getTimetableParams.dart';
+import 'getTimetableResponse.dart';
+
+class GetTimetableCache extends RequestCache {
+ int day;
+
+ GetTimetableCache({required onUpdate, required this.day}) : super(30, onUpdate) {
+ start("timetable", "$day");
+ }
+
+ @override
+ GetTimetableResponse onLocalData(String json) {
+ return GetTimetableResponse.fromJson(jsonDecode(json));
+ }
+
+ @override
+ Future onLoad() async {
+ return GetTimetable(
+ GetTimetableParams(
+ options: GetTimetableParamsOptions(
+ element: GetTimetableParamsOptionsElement(
+ id: (await Authenticate.getSession()).personId,
+ type: 5,
+ keyType: GetTimetableParamsOptionsElementKeyType.id,
+ ),
+ startDate: day,
+ endDate: day,
+ )
+ )
+ ).run();
+ }
+}
\ No newline at end of file
diff --git a/lib/api/webuntis/webuntisApi.dart b/lib/api/webuntis/webuntisApi.dart
index 5efae62..1df6327 100644
--- a/lib/api/webuntis/webuntisApi.dart
+++ b/lib/api/webuntis/webuntisApi.dart
@@ -20,7 +20,6 @@ abstract class WebuntisApi extends ApiRequest {
Future query(WebuntisApi untis) async {
String query = '{"id":"ID","method":"$method","params":${untis._body()},"jsonrpc":"2.0"}';
- log(query);
String sessionId = "0";
if(authenticatedResponse) {
diff --git a/lib/app.dart b/lib/app.dart
index 9066fa0..b4133b2 100644
--- a/lib/app.dart
+++ b/lib/app.dart
@@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
-import 'package:marianum_mobile/data/incommingPackets/talkNotificationsPacket.dart';
+import 'package:marianum_mobile/screen/pages/timetable/storedTimetable.dart';
import 'package:marianum_mobile/screen/pages/timetable/testTimetable.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import 'data/accountModel.dart';
+import 'dataOld/incommingPackets/talkNotificationsPacket.dart';
import 'screen/pages/files/files.dart';
import 'screen/pages/more/overhang.dart';
import 'screen/pages/talk/chatOverview.dart';
@@ -43,7 +43,7 @@ class _AppState extends State {
PageView(
controller: pageController,
children: const [
- TestTimeTable(),
+ StoredTimetable(),
Talk(),
Files(),
Overhang(),
diff --git a/lib/data/dataHolder.dart b/lib/data/dataHolder.dart
new file mode 100644
index 0000000..08e140e
--- /dev/null
+++ b/lib/data/dataHolder.dart
@@ -0,0 +1,11 @@
+import 'package:flutter/cupertino.dart';
+import 'package:localstore/localstore.dart';
+
+abstract class DataHolder extends ChangeNotifier {
+
+ CollectionRef storage(String path) {
+ return Localstore.instance.collection(path);
+ }
+
+ Future run();
+}
\ No newline at end of file
diff --git a/lib/data/timetable/persistantTimetable.dart b/lib/data/timetable/persistantTimetable.dart
new file mode 100644
index 0000000..27af2c7
--- /dev/null
+++ b/lib/data/timetable/persistantTimetable.dart
@@ -0,0 +1,12 @@
+import 'dart:async';
+
+import 'package:flutter/widgets.dart';
+import 'package:path/path.dart';
+import 'package:sqflite/sqflite.dart';
+
+class PersistantTimetable {
+ final int id;
+ final String json;
+
+ PersistantTimetable(this.id, this.json);
+}
\ No newline at end of file
diff --git a/lib/data/timetable/timetable.dart b/lib/data/timetable/timetable.dart
new file mode 100644
index 0000000..082a631
--- /dev/null
+++ b/lib/data/timetable/timetable.dart
@@ -0,0 +1,60 @@
+import 'dart:collection';
+import 'dart:convert';
+import 'dart:developer';
+
+import 'package:intl/intl.dart';
+import 'package:marianum_mobile/api/webuntis/queries/authenticate/authenticate.dart';
+import 'package:marianum_mobile/api/webuntis/queries/authenticate/authenticateResponse.dart';
+import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRoomsCache.dart';
+import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRoomsResponse.dart';
+import 'package:marianum_mobile/api/webuntis/queries/getSubjects/getSubjectsCache.dart';
+import 'package:marianum_mobile/api/webuntis/queries/getSubjects/getSubjectsResponse.dart';
+import 'package:marianum_mobile/data/dataHolder.dart';
+
+import '../../api/webuntis/queries/getTimetable/getTimetable.dart';
+import '../../api/webuntis/queries/getTimetable/getTimetableCache.dart';
+import '../../api/webuntis/queries/getTimetable/getTimetableParams.dart';
+import '../../api/webuntis/queries/getTimetable/getTimetableResponse.dart';
+
+class Timetable extends DataHolder {
+ int day = int.parse(DateFormat("yyyyMMdd").format(DateTime.now()));
+
+ Timetable() : super();
+
+ GetTimetableResponse? _getTimetableResponse;
+ GetTimetableResponse? get getTimetableResponse => _getTimetableResponse;
+
+ GetRoomsResponse? _getRoomsResponse;
+ GetRoomsResponse? get getRoomsResponse => _getRoomsResponse;
+
+ GetSubjectsResponse? _getSubjectsResponse;
+ GetSubjectsResponse? get getSubjectsResponse => _getSubjectsResponse;
+
+ @override
+ Future run() async {
+ GetTimetableCache(
+ day: day,
+ onUpdate: (data) =>
+ {
+ _getTimetableResponse = data,
+ notifyListeners(),
+ }
+ );
+
+ GetRoomsCache(
+ onUpdate: (data) =>
+ {
+ _getRoomsResponse = data,
+ notifyListeners(),
+ }
+ );
+
+ GetSubjectsCache(
+ onUpdate: (data) =>
+ {
+ _getSubjectsResponse = data,
+ notifyListeners(),
+ }
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/data/accountModel.dart b/lib/dataOld/accountModel.dart
similarity index 100%
rename from lib/data/accountModel.dart
rename to lib/dataOld/accountModel.dart
diff --git a/lib/data/incomingPacket.dart b/lib/dataOld/incomingPacket.dart
similarity index 94%
rename from lib/data/incomingPacket.dart
rename to lib/dataOld/incomingPacket.dart
index 72e1ecc..29f4dc0 100644
--- a/lib/data/incomingPacket.dart
+++ b/lib/dataOld/incomingPacket.dart
@@ -3,7 +3,7 @@ import 'dart:convert';
import 'dart:developer';
import 'package:flutter/cupertino.dart';
-import 'package:marianum_mobile/data/socketConnection.dart';
+import 'package:marianum_mobile/dataOld/socketConnection.dart';
class IncomingPacket extends ChangeNotifier {
diff --git a/lib/data/incommingPackets/authenticatePacket.dart b/lib/dataOld/incommingPackets/authenticatePacket.dart
similarity index 87%
rename from lib/data/incommingPackets/authenticatePacket.dart
rename to lib/dataOld/incommingPackets/authenticatePacket.dart
index 9e718a0..6a999d2 100644
--- a/lib/data/incommingPackets/authenticatePacket.dart
+++ b/lib/dataOld/incommingPackets/authenticatePacket.dart
@@ -1,9 +1,10 @@
import 'dart:developer';
-import 'package:marianum_mobile/data/incomingPacket.dart';
import 'package:shared_preferences/shared_preferences.dart';
+import '../incomingPacket.dart';
+
class AuthenticatePacket extends IncomingPacket {
AuthenticatePacket() : super("authenticate");
diff --git a/lib/data/incommingPackets/errorPacket.dart b/lib/dataOld/incommingPackets/errorPacket.dart
similarity index 87%
rename from lib/data/incommingPackets/errorPacket.dart
rename to lib/dataOld/incommingPackets/errorPacket.dart
index 588f4b6..83b8576 100644
--- a/lib/data/incommingPackets/errorPacket.dart
+++ b/lib/dataOld/incommingPackets/errorPacket.dart
@@ -1,4 +1,5 @@
-import 'package:marianum_mobile/data/incomingPacket.dart';
+
+import '../incomingPacket.dart';
class ErrorPacket extends IncomingPacket {
ErrorPacket() : super("error", useJsonDecode: false);
diff --git a/lib/data/incommingPackets/fileListPacket.dart b/lib/dataOld/incommingPackets/fileListPacket.dart
similarity index 91%
rename from lib/data/incommingPackets/fileListPacket.dart
rename to lib/dataOld/incommingPackets/fileListPacket.dart
index fe2976a..48722f8 100644
--- a/lib/data/incommingPackets/fileListPacket.dart
+++ b/lib/dataOld/incommingPackets/fileListPacket.dart
@@ -1,5 +1,5 @@
-import 'package:marianum_mobile/data/incomingPacket.dart';
+import '../incomingPacket.dart';
class FileEntry {
String name;
diff --git a/lib/data/incommingPackets/serverInfoPacket.dart b/lib/dataOld/incommingPackets/serverInfoPacket.dart
similarity index 91%
rename from lib/data/incommingPackets/serverInfoPacket.dart
rename to lib/dataOld/incommingPackets/serverInfoPacket.dart
index ecbb3cc..8a0649d 100644
--- a/lib/data/incommingPackets/serverInfoPacket.dart
+++ b/lib/dataOld/incommingPackets/serverInfoPacket.dart
@@ -1,7 +1,6 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
-import 'package:marianum_mobile/data/socketConnection.dart';
import '../incomingPacket.dart';
diff --git a/lib/data/incommingPackets/talkChatPacket.dart b/lib/dataOld/incommingPackets/talkChatPacket.dart
similarity index 91%
rename from lib/data/incommingPackets/talkChatPacket.dart
rename to lib/dataOld/incommingPackets/talkChatPacket.dart
index d53d0a2..1b99429 100644
--- a/lib/data/incommingPackets/talkChatPacket.dart
+++ b/lib/dataOld/incommingPackets/talkChatPacket.dart
@@ -1,4 +1,5 @@
-import 'package:marianum_mobile/data/incomingPacket.dart';
+
+import '../incomingPacket.dart';
class TalkMessage {
bool self;
diff --git a/lib/data/incommingPackets/talkContactsPacket.dart b/lib/dataOld/incommingPackets/talkContactsPacket.dart
similarity index 95%
rename from lib/data/incommingPackets/talkContactsPacket.dart
rename to lib/dataOld/incommingPackets/talkContactsPacket.dart
index c414f6d..f06015d 100644
--- a/lib/data/incommingPackets/talkContactsPacket.dart
+++ b/lib/dataOld/incommingPackets/talkContactsPacket.dart
@@ -2,7 +2,8 @@ import 'dart:convert';
import 'package:intl/intl.dart';
import 'package:jiffy/jiffy.dart';
-import 'package:marianum_mobile/data/incomingPacket.dart';
+
+import '../incomingPacket.dart';
class TalkContact {
String name;
diff --git a/lib/data/incommingPackets/talkNotificationsPacket.dart b/lib/dataOld/incommingPackets/talkNotificationsPacket.dart
similarity index 79%
rename from lib/data/incommingPackets/talkNotificationsPacket.dart
rename to lib/dataOld/incommingPackets/talkNotificationsPacket.dart
index 2e99e59..43f5b41 100644
--- a/lib/data/incommingPackets/talkNotificationsPacket.dart
+++ b/lib/dataOld/incommingPackets/talkNotificationsPacket.dart
@@ -1,4 +1,5 @@
-import 'package:marianum_mobile/data/incomingPacket.dart';
+
+import '../incomingPacket.dart';
class TalkNotificationsPacket extends IncomingPacket {
TalkNotificationsPacket() : super("talkNotifications");
diff --git a/lib/data/incommingPackets/timetablePacket.dart b/lib/dataOld/incommingPackets/timetablePacket.dart
similarity index 96%
rename from lib/data/incommingPackets/timetablePacket.dart
rename to lib/dataOld/incommingPackets/timetablePacket.dart
index b8826b0..642fbac 100644
--- a/lib/data/incommingPackets/timetablePacket.dart
+++ b/lib/dataOld/incommingPackets/timetablePacket.dart
@@ -1,7 +1,6 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
-import 'package:marianum_mobile/data/socketConnection.dart';
import '../incomingPacket.dart';
diff --git a/lib/data/outgoingPacket.dart b/lib/dataOld/outgoingPacket.dart
similarity index 78%
rename from lib/data/outgoingPacket.dart
rename to lib/dataOld/outgoingPacket.dart
index 8579537..d2ad0dd 100644
--- a/lib/data/outgoingPacket.dart
+++ b/lib/dataOld/outgoingPacket.dart
@@ -1,6 +1,7 @@
import 'dart:convert';
-import 'package:marianum_mobile/data/socketConnection.dart';
+import 'package:marianum_mobile/dataOld/socketConnection.dart';
+
class OutgoingPacket {
final String command;
diff --git a/lib/data/outgoingPackets/talkContactsAskPacket.dart b/lib/dataOld/outgoingPackets/talkContactsAskPacket.dart
similarity index 69%
rename from lib/data/outgoingPackets/talkContactsAskPacket.dart
rename to lib/dataOld/outgoingPackets/talkContactsAskPacket.dart
index 54bd0f6..beacb17 100644
--- a/lib/data/outgoingPackets/talkContactsAskPacket.dart
+++ b/lib/dataOld/outgoingPackets/talkContactsAskPacket.dart
@@ -1,4 +1,5 @@
-import 'package:marianum_mobile/data/outgoingPacket.dart';
+
+import '../outgoingPacket.dart';
class TalkContactsAskPacket extends OutgoingPacket {
TalkContactsAskPacket() : super(
diff --git a/lib/data/socketConnection.dart b/lib/dataOld/socketConnection.dart
similarity index 100%
rename from lib/data/socketConnection.dart
rename to lib/dataOld/socketConnection.dart
diff --git a/lib/main.dart b/lib/main.dart
index 9f6a147..7497568 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -2,23 +2,23 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
-import 'package:marianum_mobile/data/accountModel.dart';
-import 'package:marianum_mobile/data/incommingPackets/authenticatePacket.dart';
-import 'package:marianum_mobile/data/incommingPackets/errorPacket.dart';
-import 'package:marianum_mobile/data/incommingPackets/fileListPacket.dart';
-import 'package:marianum_mobile/data/incommingPackets/talkChatPacket.dart';
-import 'package:marianum_mobile/data/incommingPackets/talkNotificationsPacket.dart';
+import 'package:marianum_mobile/data/timetable/timetable.dart';
import 'package:marianum_mobile/screen/login/login.dart';
-import 'package:marianum_mobile/screen/pages/timetable/timetable.dart';
import 'package:marianum_mobile/widget/loadingSpinner.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
import 'app.dart';
-import 'data/incommingPackets/serverInfoPacket.dart';
-import 'data/incommingPackets/talkContactsPacket.dart';
-import 'data/incommingPackets/timetablePacket.dart';
+import 'dataOld/accountModel.dart';
+import 'dataOld/incommingPackets/authenticatePacket.dart';
+import 'dataOld/incommingPackets/errorPacket.dart';
+import 'dataOld/incommingPackets/fileListPacket.dart';
+import 'dataOld/incommingPackets/serverInfoPacket.dart';
+import 'dataOld/incommingPackets/talkChatPacket.dart';
+import 'dataOld/incommingPackets/talkContactsPacket.dart';
+import 'dataOld/incommingPackets/talkNotificationsPacket.dart';
+import 'dataOld/incommingPackets/timetablePacket.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
@@ -33,12 +33,13 @@ Future main() async {
providers: [
ChangeNotifierProvider(create: (context) => AccountModel()),
ChangeNotifierProvider(create: (context) => ErrorPacket()),
- ChangeNotifierProvider(create: (context) => ServerInfoPacket()),
- ChangeNotifierProvider(create: (context) => TalkContactsPaket()),
+ // ChangeNotifierProvider(create: (context) => ServerInfoPacket()),
+ // ChangeNotifierProvider(create: (context) => TalkContactsPaket()),
ChangeNotifierProvider(create: (context) => TalkNotificationsPacket()),
- ChangeNotifierProvider(create: (context) => FileListPacket()),
- ChangeNotifierProvider(create: (context) => TalkChatPacket()),
- ChangeNotifierProvider(create: (context) => TimetablePacket()),
+ // ChangeNotifierProvider(create: (context) => FileListPacket()),
+ // ChangeNotifierProvider(create: (context) => TalkChatPacket()),
+ // ChangeNotifierProvider(create: (context) => TimetablePacket()),
+ ChangeNotifierProvider(create: (context) => Timetable()),
],
child: const Main(),
)
diff --git a/lib/screen/login/login.dart b/lib/screen/login/login.dart
index c333634..4785d15 100644
--- a/lib/screen/login/login.dart
+++ b/lib/screen/login/login.dart
@@ -11,8 +11,7 @@ import 'package:shared_preferences/shared_preferences.dart';
import '../../api/webuntis/queries/authenticate/authenticateParams.dart';
import '../../api/webuntis/queries/authenticate/authenticate.dart';
-import '../../data/accountModel.dart';
-
+import '../../dataOld/accountModel.dart';
class Login extends StatefulWidget {
const Login({Key? key}) : super(key: key);
diff --git a/lib/screen/pages/files/files.dart b/lib/screen/pages/files/files.dart
index ddf46ee..1104312 100644
--- a/lib/screen/pages/files/files.dart
+++ b/lib/screen/pages/files/files.dart
@@ -1,11 +1,10 @@
import 'package:flutter/material.dart';
-import 'package:marianum_mobile/data/incommingPackets/fileListPacket.dart';
import 'package:marianum_mobile/widget/loadingPacket.dart';
import 'package:provider/provider.dart';
import 'package:webdav_client/webdav_client.dart';
-import '../../../data/accountModel.dart';
+import '../../../dataOld/incommingPackets/fileListPacket.dart';
import '../../../widget/loadingSpinner.dart';
class Files extends StatefulWidget {
diff --git a/lib/screen/pages/talk/chatOverview.dart b/lib/screen/pages/talk/chatOverview.dart
index 4e22bc9..be89182 100644
--- a/lib/screen/pages/talk/chatOverview.dart
+++ b/lib/screen/pages/talk/chatOverview.dart
@@ -3,12 +3,10 @@ import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
-import 'package:marianum_mobile/data/outgoingPackets/talkContactsAskPacket.dart';
import 'package:marianum_mobile/widget/loadingPacket.dart';
import 'package:provider/provider.dart';
-import '../../../data/accountModel.dart';
-import '../../../data/incommingPackets/talkContactsPacket.dart';
+import '../../../dataOld/incommingPackets/talkContactsPacket.dart';
import '../../../widget/loadingSpinner.dart';
import 'chatView.dart';
diff --git a/lib/screen/pages/talk/chatView.dart b/lib/screen/pages/talk/chatView.dart
index 44e126f..0da55cf 100644
--- a/lib/screen/pages/talk/chatView.dart
+++ b/lib/screen/pages/talk/chatView.dart
@@ -1,10 +1,11 @@
import 'package:bubble/bubble.dart';
import 'package:flutter/material.dart';
-import 'package:marianum_mobile/data/incommingPackets/talkChatPacket.dart';
import 'package:marianum_mobile/widget/loadingPacket.dart';
import 'package:provider/provider.dart';
+import '../../../dataOld/incommingPackets/talkChatPacket.dart';
+
class ChatView extends StatefulWidget {
final String userToken;
const ChatView({Key? key, required this.userToken}) : super(key: key);
diff --git a/lib/screen/pages/timetable/storedTimetable.dart b/lib/screen/pages/timetable/storedTimetable.dart
new file mode 100644
index 0000000..0a63e79
--- /dev/null
+++ b/lib/screen/pages/timetable/storedTimetable.dart
@@ -0,0 +1,104 @@
+import 'dart:developer';
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:jiffy/jiffy.dart';
+import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRoomsResponse.dart';
+import 'package:marianum_mobile/api/webuntis/queries/getSubjects/getSubjectsResponse.dart';
+import 'package:marianum_mobile/data/timetable/timetable.dart';
+import 'package:marianum_mobile/screen/pages/timetable/testTimetable.dart';
+import 'package:marianum_mobile/widget/loadingSpinner.dart';
+import 'package:provider/provider.dart';
+import 'package:timetable_view/timetable_view.dart';
+
+import '../../../api/webuntis/queries/getTimetable/getTimetableResponse.dart';
+
+class StoredTimetable extends StatefulWidget {
+ const StoredTimetable({Key? key}) : super(key: key);
+
+ @override
+ State createState() => _StoredTimetableState();
+}
+
+class _StoredTimetableState extends State {
+ @override
+ void initState() {
+ super.initState();
+
+ WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
+ Provider.of(context, listen: false).run();
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Consumer(
+ builder: (context, value, child) {
+ if(value.getTimetableResponse == null) {
+ return const LoadingSpinner();
+ }
+
+ return TimetableView(
+ laneEventsList: _buildLaneEvents(value),
+ onEventTap: (TableEvent event) {},
+ timetableStyle: CustomTableStyle(context),
+ onEmptySlotTap: (int laneIndex, TableEventTime start, TableEventTime end) => {},
+ );
+ },
+ );
+ }
+
+
+ List _buildLaneEvents(Timetable data) {
+ List laneEvents = List.empty(growable: true);
+ Jiffy.locale("de"); // todo move outwards
+
+ GetTimetableResponse timetable = data.getTimetableResponse!;
+ GetRoomsResponse rooms = data.getRoomsResponse!;
+ GetSubjectsResponse subjects = data.getSubjectsResponse!;
+
+ List dayList = timetable.result.map((e) => e.date).toSet().toList();
+ dayList.sort((a, b) => a-b);
+ dayList.forEach((day) {
+ //Every Day
+
+ laneEvents.add(
+ LaneEvents(
+ lane: Lane(
+ laneIndex: day,
+ name: "${Jiffy(day.toString()).format("dd.MM.yy")}\n${Jiffy(day.toString()).format("EEEE")}",
+ textStyle: TextStyle(
+ color: Theme.of(context).primaryColor,
+ fontWeight: FontWeight.bold,
+ fontSize: 14
+ )
+ ),
+ events: List.generate(
+ timetable.result.where((element) => element.date == day).length,
+ (index) {
+ GetTimetableResponseObject tableEvent = timetable.result.where((element) => element.date == day).elementAt(index);
+ return TableEvent(
+ title: subjects.result.firstWhere((subject) => subject.id == tableEvent.su[0]['id']).longName,
+ eventId: tableEvent.id,
+ laneIndex: day,
+ startTime: parseTime(tableEvent.startTime),
+ endTime: parseTime(tableEvent.endTime),
+ padding: const EdgeInsets.all(5),
+ backgroundColor: Theme.of(context).primaryColor,
+ location: "\n${rooms.result.firstWhere((room) => room.id == tableEvent.ro[0]['id']).name}",
+ );
+ }
+ )
+ )
+ );
+
+ });
+
+ return laneEvents;
+ }
+
+ TableEventTime parseTime(int input) {
+ String time = input.toString().length < 4 ? "0$input" : input.toString();
+ return TableEventTime(hour: int.parse(time.substring(0, 2)), minute: int.parse(time.substring(2, 4)));
+ }
+}
diff --git a/lib/screen/pages/timetable/testTimetable.dart b/lib/screen/pages/timetable/testTimetable.dart
index 35f7b8d..3023a8c 100644
--- a/lib/screen/pages/timetable/testTimetable.dart
+++ b/lib/screen/pages/timetable/testTimetable.dart
@@ -4,7 +4,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/api/webuntis/queries/getRooms/getRooms.dart';
-import 'package:marianum_mobile/data/incommingPackets/timetablePacket.dart';
import 'package:marianum_mobile/widget/loadingSpinner.dart';
import 'package:marianum_mobile/widget/offlineError.dart';
import 'package:timetable_view/timetable_view.dart';
@@ -132,14 +131,14 @@ class CustomTableStyle extends TimetableStyle {
@override
int get endHour => 17;
@override
- double get laneWidth => 100;
+ double get laneWidth => 300;
@override
Color get cornerColor => Theme.of(context).primaryColor;
@override
Color get timeItemTextColor => Theme.of(context).primaryColor;
@override
- double get timeItemHeight => 60;
+ double get timeItemHeight => 80;
@override
- double get timeItemWidth => 40;
+ double get timeItemWidth => 70;
}
\ No newline at end of file
diff --git a/lib/screen/pages/timetable/timetable.dart b/lib/screen/pages/timetable/timetable.dart
index 6e756a6..9beb944 100644
--- a/lib/screen/pages/timetable/timetable.dart
+++ b/lib/screen/pages/timetable/timetable.dart
@@ -3,11 +3,12 @@ import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:marianum_mobile/data/incommingPackets/timetablePacket.dart';
import 'package:marianum_mobile/widget/loadingPacket.dart';
import 'package:provider/provider.dart';
import 'package:timetable_view/timetable_view.dart';
+import '../../../dataOld/incommingPackets/timetablePacket.dart';
+
class Timetable extends StatefulWidget {
const Timetable({Key? key}) : super(key: key);
diff --git a/lib/screen/settings/settings.dart b/lib/screen/settings/settings.dart
index 47caa2c..f269c99 100644
--- a/lib/screen/settings/settings.dart
+++ b/lib/screen/settings/settings.dart
@@ -3,8 +3,8 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import '../../data/accountModel.dart';
-import '../../data/incommingPackets/serverInfoPacket.dart';
+import '../../dataOld/accountModel.dart';
+import '../../dataOld/incommingPackets/serverInfoPacket.dart';
import '../../widget/ListItem.dart';
class Settings extends StatefulWidget {
diff --git a/lib/widget/loadingPacket.dart b/lib/widget/loadingPacket.dart
index 58878c5..807e509 100644
--- a/lib/widget/loadingPacket.dart
+++ b/lib/widget/loadingPacket.dart
@@ -1,8 +1,9 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:marianum_mobile/data/incomingPacket.dart';
import 'package:provider/provider.dart';
+import '../dataOld/incomingPacket.dart';
+
class LoadingPacket extends StatefulWidget {
final Widget child;
final IncomingPacket packet;
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index 997e35d..63ad0d1 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -5,10 +5,14 @@
import FlutterMacOS
import Foundation
+import path_provider_foundation
import shared_preferences_foundation
+import sqflite
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
+ PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
+ SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 64a8842..8da3b6d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -47,6 +47,9 @@ dependencies:
jiffy: ^5.0.0
timetable_view: ^0.3.0
json_annotation: ^4.8.0
+ sqflite: ^2.2.4+1
+ localstore: ^1.2.3
+ intl: ^0.17.0
dev_dependencies:
flutter_test: