Initial commit

This commit is contained in:
2023-01-22 19:44:38 +01:00
parent 021bc02992
commit 1baa8028fa
164 changed files with 6587 additions and 2 deletions

View File

@ -0,0 +1,19 @@
import 'package:flutter/cupertino.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
class AccountModel extends ChangeNotifier {
bool _isLoggedIn = false;
bool get isLoggedIn => _isLoggedIn;
void logout() {
_isLoggedIn = false;
notifyListeners();
}
void login() {
_isLoggedIn = true;
notifyListeners();
}
}

View File

@ -0,0 +1,43 @@
import 'dart:async';
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:marianum_mobile/data/socketConnection.dart';
class IncomingPacket extends ChangeNotifier {
String packetId;
bool _isReceived = false;
bool get isReceived => _isReceived;
IncomingPacket(this.packetId) {
log("PACKETLISTENER ERSTELLT!");
SocketConnection.read.listen((event) {
if(event.startsWith("$packetId:")) {
_isReceived = true;
// THIS listener handles the incomming request
log("$packetId is handled!");
handle(jsonDecode(event.split("$packetId:")[1]));
}
notifyListeners();
});
}
void invoke({Object? data, bool indicateLoading = false, bool allowNotifyListeners = true}) {
data = data ?? {};
log("$packetId is invoked with data: $data");
SocketConnection.write.add("$packetId:${jsonEncode(data)}");
if(indicateLoading) {
_isReceived = false;
if(allowNotifyListeners) notifyListeners();
}
}
void handle(dynamic data) {
log("Warning: $packetId packet listener is registered, but no handle is defined!");
}
}

View File

@ -0,0 +1,19 @@
import 'dart:developer';
import 'package:marianum_mobile/data/incomingPacket.dart';
import 'package:shared_preferences/shared_preferences.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,29 @@
import 'package:marianum_mobile/data/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,28 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:marianum_mobile/data/socketConnection.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,26 @@
import 'package:marianum_mobile/data/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,46 @@
import 'dart:convert';
import 'package:intl/intl.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/data/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,13 @@
import 'package:marianum_mobile/data/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,14 @@
import 'dart:convert';
import 'package:marianum_mobile/data/socketConnection.dart';
class OutgoingPacket {
final String command;
final dynamic data;
OutgoingPacket({required this.command, required this.data});
void send() {
SocketConnection.write.add("$command:${jsonEncode(data)}");
}
}

View File

@ -0,0 +1,8 @@
import 'package:marianum_mobile/data/outgoingPacket.dart';
class TalkContactsAskPacket extends OutgoingPacket {
TalkContactsAskPacket() : super(
command: "talkContacts",
data: {},
);
}

View File

@ -0,0 +1,10 @@
import 'package:web_socket_channel/web_socket_channel.dart';
class SocketConnection {
static final _connection = WebSocketChannel.connect(
Uri.parse('ws://localhost:1234'),
);
static var read = _connection.stream.asBroadcastStream();
static var write = _connection.sink;
}