Implement Webuntis HTTP Api and Display
This commit is contained in:
parent
7432972b3c
commit
2b6dc8e3e6
500
.idea/libraries/Dart_Packages.xml
generated
500
.idea/libraries/Dart_Packages.xml
generated
File diff suppressed because it is too large
Load Diff
36
.idea/libraries/Flutter_Plugins.xml
generated
36
.idea/libraries/Flutter_Plugins.xml
generated
@ -1,22 +1,26 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Flutter Plugins" type="FlutterPluginsLibraryType">
|
||||
<CLASSES>
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-2.0.4" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.1.3" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_windows-2.1.3" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_native_splash-2.2.17" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_android-2.0.15" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_linux-2.1.3" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-2.0.14" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_windows-3.0.3" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-2.0.17" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-3.0.2" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_linux-3.0.2" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_android-6.0.23" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_foundation-2.1.3" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.1.8" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.1.9" />
|
||||
<root url="file:///opt/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_ios-6.1.0" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/flutter_native_splash-2.2.17" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/url_launcher_macos-3.0.2" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/url_launcher_linux-3.0.2" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/path_provider-2.0.12" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/url_launcher_android-6.0.23" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/shared_preferences-2.0.17" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.1.3" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/url_launcher_web-2.0.14" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/url_launcher-6.1.9" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/url_launcher_windows-3.0.3" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/sqflite-2.2.4+1" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/path_provider_linux-2.1.8" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.1.3" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/url_launcher_ios-6.1.0" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/path_provider_foundation-2.1.1" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/path_provider_android-2.0.22" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.1.3" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/shared_preferences_web-2.0.4" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/path_provider_windows-2.1.3" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dev/shared_preferences_android-2.0.15" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
|
32
lib/api/requestCache.dart
Normal file
32
lib/api/requestCache.dart
Normal file
@ -0,0 +1,32 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:localstore/localstore.dart';
|
||||
|
||||
abstract class RequestCache<T> {
|
||||
int maxCacheTime;
|
||||
Function(T) onUpdate;
|
||||
|
||||
RequestCache(this.maxCacheTime, this.onUpdate);
|
||||
|
||||
void start(String file, String document) async {
|
||||
Map<String, dynamic>? 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<T> onLoad();
|
||||
}
|
23
lib/api/webuntis/queries/getRooms/getRoomsCache.dart
Normal file
23
lib/api/webuntis/queries/getRooms/getRoomsCache.dart
Normal file
@ -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<GetRoomsResponse> {
|
||||
GetRoomsCache({onUpdate}) : super(60 * 60, onUpdate) {
|
||||
start("rooms", "data");
|
||||
}
|
||||
|
||||
@override
|
||||
Future<GetRoomsResponse> onLoad() {
|
||||
return GetRooms().run();
|
||||
}
|
||||
|
||||
@override
|
||||
GetRoomsResponse onLocalData(String json) {
|
||||
return GetRoomsResponse.fromJson(jsonDecode(json));
|
||||
}
|
||||
|
||||
}
|
@ -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<GetRoomsResponseObject> result;
|
||||
|
||||
|
@ -16,7 +16,7 @@ GetRoomsResponse _$GetRoomsResponseFromJson(Map<String, dynamic> json) =>
|
||||
|
||||
Map<String, dynamic> _$GetRoomsResponseToJson(GetRoomsResponse instance) =>
|
||||
<String, dynamic>{
|
||||
'result': instance.result.toList(),
|
||||
'result': instance.result.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
|
||||
GetRoomsResponseObject _$GetRoomsResponseObjectFromJson(
|
||||
|
16
lib/api/webuntis/queries/getSubjects/getSubjects.dart
Normal file
16
lib/api/webuntis/queries/getSubjects/getSubjects.dart
Normal file
@ -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<GetSubjectsResponse> run() async {
|
||||
String rawAnswer = await query(this);
|
||||
return finalize(GetSubjectsResponse.fromJson(jsonDecode(rawAnswer)));
|
||||
}
|
||||
}
|
23
lib/api/webuntis/queries/getSubjects/getSubjectsCache.dart
Normal file
23
lib/api/webuntis/queries/getSubjects/getSubjectsCache.dart
Normal file
@ -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<GetSubjectsResponse> {
|
||||
GetSubjectsCache({onUpdate}) : super(60 * 60, onUpdate) {
|
||||
start("subjects", "data");
|
||||
}
|
||||
|
||||
@override
|
||||
Future<GetSubjectsResponse> onLoad() {
|
||||
return GetSubjects().run();
|
||||
}
|
||||
|
||||
@override
|
||||
onLocalData(String json) {
|
||||
return GetSubjectsResponse.fromJson(jsonDecode(json));
|
||||
}
|
||||
|
||||
}
|
@ -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<GetSubjectsResponseObject> result;
|
||||
|
||||
GetSubjectsResponse(this.result);
|
||||
|
||||
factory GetSubjectsResponse.fromJson(Map<String, dynamic> json) => _$GetSubjectsResponseFromJson(json);
|
||||
Map<String, dynamic> 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<String, dynamic> json) => _$GetSubjectsResponseObjectFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$GetSubjectsResponseObjectToJson(this);
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'getSubjectsResponse.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
GetSubjectsResponse _$GetSubjectsResponseFromJson(Map<String, dynamic> json) =>
|
||||
GetSubjectsResponse(
|
||||
(json['result'] as List<dynamic>)
|
||||
.map((e) =>
|
||||
GetSubjectsResponseObject.fromJson(e as Map<String, dynamic>))
|
||||
.toSet(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$GetSubjectsResponseToJson(
|
||||
GetSubjectsResponse instance) =>
|
||||
<String, dynamic>{
|
||||
'result': instance.result.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
|
||||
GetSubjectsResponseObject _$GetSubjectsResponseObjectFromJson(
|
||||
Map<String, dynamic> json) =>
|
||||
GetSubjectsResponseObject(
|
||||
json['id'] as int,
|
||||
json['name'] as String,
|
||||
json['longName'] as String,
|
||||
json['alternateName'] as String,
|
||||
json['active'] as bool,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$GetSubjectsResponseObjectToJson(
|
||||
GetSubjectsResponseObject instance) =>
|
||||
<String, dynamic>{
|
||||
'id': instance.id,
|
||||
'name': instance.name,
|
||||
'longName': instance.longName,
|
||||
'alternateName': instance.alternateName,
|
||||
'active': instance.active,
|
||||
};
|
@ -15,7 +15,6 @@ class GetTimetable extends WebuntisApi {
|
||||
@override
|
||||
Future<GetTimetableResponse> run() async {
|
||||
String rawAnswer = await query(this);
|
||||
log(rawAnswer);
|
||||
return finalize(GetTimetableResponse.fromJson(jsonDecode(rawAnswer)));
|
||||
}
|
||||
|
||||
|
40
lib/api/webuntis/queries/getTimetable/getTimetableCache.dart
Normal file
40
lib/api/webuntis/queries/getTimetable/getTimetableCache.dart
Normal file
@ -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<GetTimetableResponse> {
|
||||
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<GetTimetableResponse> onLoad() async {
|
||||
return GetTimetable(
|
||||
GetTimetableParams(
|
||||
options: GetTimetableParamsOptions(
|
||||
element: GetTimetableParamsOptionsElement(
|
||||
id: (await Authenticate.getSession()).personId,
|
||||
type: 5,
|
||||
keyType: GetTimetableParamsOptionsElementKeyType.id,
|
||||
),
|
||||
startDate: day,
|
||||
endDate: day,
|
||||
)
|
||||
)
|
||||
).run();
|
||||
}
|
||||
}
|
@ -20,7 +20,6 @@ abstract class WebuntisApi extends ApiRequest {
|
||||
|
||||
Future<String> query(WebuntisApi untis) async {
|
||||
String query = '{"id":"ID","method":"$method","params":${untis._body()},"jsonrpc":"2.0"}';
|
||||
log(query);
|
||||
|
||||
String sessionId = "0";
|
||||
if(authenticatedResponse) {
|
||||
|
@ -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<App> {
|
||||
PageView(
|
||||
controller: pageController,
|
||||
children: const [
|
||||
TestTimeTable(),
|
||||
StoredTimetable(),
|
||||
Talk(),
|
||||
Files(),
|
||||
Overhang(),
|
||||
|
11
lib/data/dataHolder.dart
Normal file
11
lib/data/dataHolder.dart
Normal file
@ -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<void> run();
|
||||
}
|
12
lib/data/timetable/persistantTimetable.dart
Normal file
12
lib/data/timetable/persistantTimetable.dart
Normal file
@ -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);
|
||||
}
|
60
lib/data/timetable/timetable.dart
Normal file
60
lib/data/timetable/timetable.dart
Normal file
@ -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<void> run() async {
|
||||
GetTimetableCache(
|
||||
day: day,
|
||||
onUpdate: (data) =>
|
||||
{
|
||||
_getTimetableResponse = data,
|
||||
notifyListeners(),
|
||||
}
|
||||
);
|
||||
|
||||
GetRoomsCache(
|
||||
onUpdate: (data) =>
|
||||
{
|
||||
_getRoomsResponse = data,
|
||||
notifyListeners(),
|
||||
}
|
||||
);
|
||||
|
||||
GetSubjectsCache(
|
||||
onUpdate: (data) =>
|
||||
{
|
||||
_getSubjectsResponse = data,
|
||||
notifyListeners(),
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
@ -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 {
|
||||
|
@ -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");
|
||||
|
@ -1,4 +1,5 @@
|
||||
import 'package:marianum_mobile/data/incomingPacket.dart';
|
||||
|
||||
import '../incomingPacket.dart';
|
||||
|
||||
class ErrorPacket extends IncomingPacket {
|
||||
ErrorPacket() : super("error", useJsonDecode: false);
|
@ -1,5 +1,5 @@
|
||||
|
||||
import 'package:marianum_mobile/data/incomingPacket.dart';
|
||||
import '../incomingPacket.dart';
|
||||
|
||||
class FileEntry {
|
||||
String name;
|
@ -1,7 +1,6 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:marianum_mobile/data/socketConnection.dart';
|
||||
|
||||
import '../incomingPacket.dart';
|
||||
|
@ -1,4 +1,5 @@
|
||||
import 'package:marianum_mobile/data/incomingPacket.dart';
|
||||
|
||||
import '../incomingPacket.dart';
|
||||
|
||||
class TalkMessage {
|
||||
bool self;
|
@ -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;
|
@ -1,4 +1,5 @@
|
||||
import 'package:marianum_mobile/data/incomingPacket.dart';
|
||||
|
||||
import '../incomingPacket.dart';
|
||||
|
||||
class TalkNotificationsPacket extends IncomingPacket {
|
||||
TalkNotificationsPacket() : super("talkNotifications");
|
@ -1,7 +1,6 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:marianum_mobile/data/socketConnection.dart';
|
||||
|
||||
import '../incomingPacket.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;
|
@ -1,4 +1,5 @@
|
||||
import 'package:marianum_mobile/data/outgoingPacket.dart';
|
||||
|
||||
import '../outgoingPacket.dart';
|
||||
|
||||
class TalkContactsAskPacket extends OutgoingPacket {
|
||||
TalkContactsAskPacket() : super(
|
@ -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<void> main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
@ -33,12 +33,13 @@ Future<void> 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(),
|
||||
)
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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';
|
||||
|
||||
|
@ -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);
|
||||
|
104
lib/screen/pages/timetable/storedTimetable.dart
Normal file
104
lib/screen/pages/timetable/storedTimetable.dart
Normal file
@ -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<StoredTimetable> createState() => _StoredTimetableState();
|
||||
}
|
||||
|
||||
class _StoredTimetableState extends State<StoredTimetable> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
|
||||
Provider.of<Timetable>(context, listen: false).run();
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<Timetable>(
|
||||
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<LaneEvents> _buildLaneEvents(Timetable data) {
|
||||
List<LaneEvents> laneEvents = List<LaneEvents>.empty(growable: true);
|
||||
Jiffy.locale("de"); // todo move outwards
|
||||
|
||||
GetTimetableResponse timetable = data.getTimetableResponse!;
|
||||
GetRoomsResponse rooms = data.getRoomsResponse!;
|
||||
GetSubjectsResponse subjects = data.getSubjectsResponse!;
|
||||
|
||||
List<int> 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<TableEvent>.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)));
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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);
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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"))
|
||||
}
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user