Implement Webuntis HTTP Api and Display

This commit is contained in:
2023-02-15 20:33:05 +01:00
parent 7432972b3c
commit 2b6dc8e3e6
42 changed files with 746 additions and 287 deletions

View File

@ -0,0 +1,20 @@
import 'dart:developer';
import 'package:shared_preferences/shared_preferences.dart';
import '../incomingPacket.dart';
class AuthenticatePacket extends IncomingPacket {
AuthenticatePacket() : super("authenticate");
@override
void handle(data) {
SharedPreferences.getInstance().then((value) => {
invoke(data: {
'username': value.getString("username"),
'password': value.getString("password")
})
});
}
}

View File

@ -0,0 +1,22 @@
import '../incomingPacket.dart';
class ErrorPacket extends IncomingPacket {
ErrorPacket() : super("error", useJsonDecode: false);
bool _errorDismissed = true;
bool get errorDismissed => _errorDismissed;
set errorDismissed(bool value) {
_errorDismissed = value;
notifyListeners();
}
String _errorText = "";
String get errorText => _errorText;
@override
void handle(data) {
_errorDismissed = false;
_errorText = data;
}
}

View File

@ -0,0 +1,29 @@
import '../incomingPacket.dart';
class FileEntry {
String name;
bool isFolder;
String path;
FileEntry(this.name, this.isFolder, this.path);
}
class FileListPacket extends IncomingPacket {
FileListPacket() : super("fileList");
List<FileEntry> _entries = List<FileEntry>.empty(growable: true);
List<FileEntry> get entries => _entries;
String _lastPath = "/";
String get lastPath => _lastPath;
@override
void handle(data) {
_entries = List<FileEntry>.empty(growable: true);
_lastPath = data['backLink'];
data['files'].forEach((value) => {
_entries.add(FileEntry(value['name'], value['is_folder'], value['path']))
});
}
}

View File

@ -0,0 +1,27 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import '../incomingPacket.dart';
class ServerInfoPacket extends IncomingPacket {
ServerInfoPacket() : super('serverInfo');
String _serverName = "Unbekannt";
String _serverOwner = "Unbekannt";
String _serverVersion = "?";
String _legal = "Keine";
String get serverName => _serverName;
String get serverOwner => _serverOwner;
String get serverVersion => _serverVersion;
String get legal => _legal;
@override
void handle(data) {
_serverName = data['name'];
_serverOwner = data['owner'];
_serverVersion = data['version'];
_legal = data['legal'];
}
}

View File

@ -0,0 +1,27 @@
import '../incomingPacket.dart';
class TalkMessage {
bool self;
String sender;
String content;
String date;
TalkMessage(this.self, this.sender, this.content, this.date);
}
class TalkChatPacket extends IncomingPacket {
TalkChatPacket() : super("talkChat");
List<TalkMessage> _messages = List<TalkMessage>.empty(growable: true);
List<TalkMessage> get messages => _messages;
@override
void handle(data) {
_messages = List<TalkMessage>.empty(growable: true);
print(data);
data.forEach((message) => {
_messages.add(TalkMessage(true, message['actorId'], message['message'], message['timestamp']))
});
}
}

View File

@ -0,0 +1,47 @@
import 'dart:convert';
import 'package:intl/intl.dart';
import 'package:jiffy/jiffy.dart';
import '../incomingPacket.dart';
class TalkContact {
String name;
String lastMessage;
String lastTime;
String profilePicture;
bool unreadMessages;
bool isGroup;
String userToken;
TalkContact(this.name, this.lastMessage, this.lastTime, this.profilePicture, this.unreadMessages, this.isGroup, this.userToken);
}
class TalkContactsPaket extends IncomingPacket {
TalkContactsPaket() : super('talkContacts');
List<TalkContact> _contacts = List<TalkContact>.empty(growable: true);
List<TalkContact> get contacts => _contacts;
@override
void handle(data) {
_contacts = List<TalkContact>.empty(growable: true);
//data["ocs"]["data"].sort((a, b) => a['lastActivity'].compareTo(b['lastActivity']));
data.forEach((value) async {
await Jiffy.locale("de");
_contacts.add(
TalkContact(
value['displayName'],
value['lastMessage']['message'],
Jiffy(DateTime.fromMillisecondsSinceEpoch(value['lastActivity'] * 1000)).fromNow(),
value['name'] != null ? "https://cloud.marianum-fulda.de/avatar/${value['name']}/128" : "",
value['unreadMessages'] > 0,
value['type'] != 1,
value['token']
)
);
});
}
}

View File

@ -0,0 +1,14 @@
import '../incomingPacket.dart';
class TalkNotificationsPacket extends IncomingPacket {
TalkNotificationsPacket() : super("talkNotifications");
int _amount = 0;
int get amount => _amount;
@override
void handle(data) {
_amount = data['amount'];
}
}

View File

@ -0,0 +1,70 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import '../incomingPacket.dart';
class TimetablePacket extends IncomingPacket {
TimetablePacket() : super('timetable');
TimeTableData _timeTable = TimeTableData();
TimeTableData get timeTable => _timeTable;
@override
void handle(data) {
_timeTable = TimeTableData();
data.forEach((day) {
TimeTableDay dayData = TimeTableDay(List<TimeTableEntry>.empty(growable: true), day['title']);
day['tiles'].forEach((tile) {
dayData._entries.add(TimeTableEntry(
tile['title'], tile['title'], tile['room'], tile['title'],
TimeTableEntryTime(tile['begin']['hour'], tile['begin']['minute']),
TimeTableEntryTime(tile['end']['hour'], tile['end']['minute'])
));
});
_timeTable._days.add(dayData);
});
}
}
class TimeTableData {
List<TimeTableDay> _days = [];
List<TimeTableDay> get days => _days;
set days(List<TimeTableDay> value) {
_days = value;
}
}
class TimeTableDay {
List<TimeTableEntry> _entries;
String _name;
TimeTableDay(this._entries, this._name);
List<TimeTableEntry> get entries => _entries;
String get name => _name;
}
class TimeTableEntry {
late String subject;
late String teacher;
late String room;
late String classes;
late TimeTableEntryTime start;
late TimeTableEntryTime end;
TimeTableEntry(this.subject, this.teacher, this.room, this.classes,
this.start, this.end);
}
class TimeTableEntryTime {
int hour;
int minute;
TimeTableEntryTime(this.hour, this.minute);
}