<feat: New release>

This commit is contained in:
Alessandro Autiero
2023-09-09 19:37:05 +02:00
parent 485e757e83
commit 64b85e4f6e
32 changed files with 586 additions and 223 deletions

View File

@@ -1,5 +1,3 @@
import 'dart:io';
import 'package:reboot_common/common.dart';
import 'package:reboot_launcher/src/controller/server_controller.dart';
@@ -10,7 +8,7 @@ class AuthenticatorController extends ServerController {
String get controllerName => "authenticator";
@override
String get storageName => "reboot_authenticator";
String get storageName => "authenticator";
@override
String get defaultHost => kDefaultAuthenticatorHost;

View File

@@ -2,16 +2,11 @@ import 'dart:async';
import 'dart:convert';
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:reboot_common/common.dart';
import 'package:supabase/src/supabase_stream_builder.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:uuid/uuid.dart';
class GameController extends GetxController {
late final String uuid;
late final GetStorage _storage;
late final TextEditingController username;
late final TextEditingController password;
@@ -20,53 +15,39 @@ class GameController extends GetxController {
late final Rxn<FortniteVersion> _selectedVersion;
late final RxBool started;
late final RxBool autoStartGameServer;
late final Rxn<Set<Map<String, dynamic>>> servers;
late final Rxn<GameInstance> instance;
GameController() {
_storage = GetStorage("reboot_game");
Iterable decodedVersionsJson = jsonDecode(_storage.read("versions") ?? "[]");
_storage = GetStorage("game");
Iterable decodedVersionsJson = jsonDecode(
_storage.read("versions") ?? "[]");
var decodedVersions = decodedVersionsJson
.map((entry) => FortniteVersion.fromJson(entry))
.toList();
versions = Rx(decodedVersions);
versions.listen((data) => _saveVersions());
var decodedSelectedVersionName = _storage.read("version");
var decodedSelectedVersion = decodedVersions.firstWhereOrNull((element) => element.name == decodedSelectedVersionName);
uuid = _storage.read("uuid") ?? const Uuid().v4();
_storage.write("uuid", uuid);
var decodedSelectedVersion = decodedVersions.firstWhereOrNull((
element) => element.name == decodedSelectedVersionName);
_selectedVersion = Rxn(decodedSelectedVersion);
username = TextEditingController(text: _storage.read("username") ?? kDefaultPlayerName);
username = TextEditingController(
text: _storage.read("username") ?? kDefaultPlayerName);
username.addListener(() => _storage.write("username", username.text));
password = TextEditingController(text: _storage.read("password") ?? "");
password.addListener(() => _storage.write("password", password.text));
customLaunchArgs = TextEditingController(text: _storage.read("custom_launch_args") ?? "");
customLaunchArgs.addListener(() => _storage.write("custom_launch_args", customLaunchArgs.text));
customLaunchArgs =
TextEditingController(text: _storage.read("custom_launch_args") ?? "");
customLaunchArgs.addListener(() =>
_storage.write("custom_launch_args", customLaunchArgs.text));
started = RxBool(false);
autoStartGameServer = RxBool(_storage.read("auto_game_server") ?? true);
autoStartGameServer.listen((value) => _storage.write("auto_game_server", value));
var supabase = Supabase.instance.client;
servers = Rxn();
supabase.from('hosts')
.stream(primaryKey: ['id'])
.map((event) => _parseValidServers(event))
.listen((event) {
if(servers.value == null) {
servers.value = event;
}else {
servers.value?.addAll(event);
}
});
autoStartGameServer.listen((value) =>
_storage.write("auto_game_server", value));
var serializedInstance = _storage.read("instance");
instance = Rxn(serializedInstance != null ? GameInstance.fromJson(jsonDecode(serializedInstance)) : null);
instance.listen((_) => saveInstance());
}
Set<Map<String, dynamic>> _parseValidServers(SupabaseStreamEvent event) => event.where((element) => _isValidServer(element)).toSet();
bool _isValidServer(Map<String, dynamic> element) =>
(kDebugMode || element["id"] != uuid) && element["ip"] != null;
Future<void> saveInstance() =>
_storage.write("instance", jsonEncode(instance.value?.toJson()));
@@ -123,12 +104,4 @@ class GameController extends GetxController {
void updateVersion(FortniteVersion version, Function(FortniteVersion) function) {
versions.update((val) => function(version));
}
Map<String, dynamic>? findServerById(String uuid) {
try {
return servers.value?.firstWhere((element) => element["id"] == uuid);
} on StateError catch(_) {
return null;
}
}
}

View File

@@ -4,23 +4,29 @@ import 'package:fluent_ui/fluent_ui.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:reboot_common/common.dart';
import 'package:reboot_launcher/src/util/watch.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:uuid/uuid.dart';
const String kDefaultServerName = "Reboot Game Server";
const String kDefaultDescription = "Just another server";
class HostingController extends GetxController {
late final GetStorage _storage;
late final String uuid;
late final TextEditingController name;
late final TextEditingController description;
late final TextEditingController password;
late final RxBool showPassword;
late final RxBool discoverable;
late final RxBool started;
late final RxBool published;
late final Rxn<GameInstance> instance;
late final Rxn<Set<Map<String, dynamic>>> servers;
HostingController() {
_storage = GetStorage("reboot_hosting");
_storage = GetStorage("hosting");
uuid = _storage.read("uuid") ?? const Uuid().v4();
_storage.write("uuid", uuid);
name = TextEditingController(text: _storage.read("name") ?? kDefaultServerName);
name.addListener(() => _storage.write("name", name.text));
description = TextEditingController(text: _storage.read("description") ?? kDefaultDescription);
@@ -30,12 +36,30 @@ class HostingController extends GetxController {
discoverable = RxBool(_storage.read("discoverable") ?? true);
discoverable.listen((value) => _storage.write("discoverable", value));
started = RxBool(false);
published = RxBool(false);
showPassword = RxBool(false);
var serializedInstance = _storage.read("instance");
instance = Rxn(serializedInstance != null ? GameInstance.fromJson(jsonDecode(serializedInstance)) : null);
instance.listen((_) => saveInstance());
var supabase = Supabase.instance.client;
servers = Rxn();
supabase.from('hosts')
.stream(primaryKey: ['id'])
.map((event) => _parseValidServers(event))
.listen((event) {
if(servers.value == null) {
servers.value = event;
}else {
servers.value?.addAll(event);
}
});
}
Set<Map<String, dynamic>> _parseValidServers(event) => event.where((element) => _isValidServer(element)).toSet();
bool _isValidServer(Map<String, dynamic> element) =>
element["id"] != uuid && element["ip"] != null;
Future<void> saveInstance() => _storage.write("instance", jsonEncode(instance.value?.toJson()));
void reset() {
@@ -46,4 +70,12 @@ class HostingController extends GetxController {
started.value = false;
instance.value = null;
}
Map<String, dynamic>? findServerById(String uuid) {
try {
return servers.value?.firstWhere((element) => element["id"] == uuid);
} on StateError catch(_) {
return null;
}
}
}

View File

@@ -1,24 +1,43 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:reboot_common/common.dart';
import 'package:reboot_launcher/src/controller/server_controller.dart';
class MatchmakerController extends ServerController {
late final TextEditingController gameServerAddress;
late final FocusNode gameServerAddressFocusNode;
late final RxnString gameServerOwner;
MatchmakerController() : super() {
gameServerAddress = TextEditingController(text: storage.read("game_server_address") ?? kDefaultMatchmakerHost);
writeMatchmakingIp(gameServerAddress.text);
var lastValue = gameServerAddress.text;
writeMatchmakingIp(lastValue);
gameServerAddress.addListener(() {
storage.write("game_server_address", gameServerAddress.text);
writeMatchmakingIp(gameServerAddress.text);
var newValue = gameServerAddress.text;
if(newValue.trim().toLowerCase() == lastValue.trim().toLowerCase()) {
return;
}
lastValue = newValue;
gameServerAddress.selection = TextSelection.collapsed(offset: newValue.length);
storage.write("game_server_address", newValue);
writeMatchmakingIp(newValue);
});
watchMatchmakingIp().listen((event) {
if(event != null && gameServerAddress.text != event) {
gameServerAddress.text = event;
}
});
gameServerAddressFocusNode = FocusNode();
gameServerOwner = RxnString(storage.read("game_server_owner"));
gameServerOwner.listen((value) => storage.write("game_server_owner", value));
}
@override
String get controllerName => "matchmaker";
@override
String get storageName => "reboot_matchmaker";
String get storageName => "matchmaker";
@override
String get defaultHost => kDefaultMatchmakerHost;

View File

@@ -1,8 +1,8 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:reboot_launcher/main.dart';
import 'package:reboot_common/common.dart';
import 'package:reboot_launcher/main.dart';
class SettingsController extends GetxController {
late final GetStorage _storage;
@@ -19,7 +19,7 @@ class SettingsController extends GetxController {
late double scrollingDistance;
SettingsController() {
_storage = GetStorage("reboot_settings");
_storage = GetStorage("settings");
gameServerDll = _createController("game_server", "reboot.dll");
unrealEngineConsoleDll = _createController("unreal_engine_console", "console.dll");
authenticatorDll = _createController("authenticator", "cobalt.dll");
@@ -54,6 +54,7 @@ class SettingsController extends GetxController {
gameServerDll.text = _controllerDefaultPath("reboot.dll");
unrealEngineConsoleDll.text = _controllerDefaultPath("console.dll");
authenticatorDll.text = _controllerDefaultPath("cobalt.dll");
gameServerPort.text = kDefaultGameServerPort;
firstRun.value = true;
}

View File

@@ -12,7 +12,7 @@ class UpdateController {
late final TextEditingController url;
UpdateController() {
_storage = GetStorage("reboot_update");
_storage = GetStorage("update");
timestamp = RxnInt(_storage.read("ts"));
timestamp.listen((value) => _storage.write("ts", value));
var timerIndex = _storage.read("timer");