This commit is contained in:
Alessandro Autiero
2024-06-04 20:31:06 +02:00
parent 93c5d6c56b
commit 2bf084d120
28 changed files with 731 additions and 516 deletions

View File

@@ -5,9 +5,10 @@ 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/main.dart';
class BackendController extends GetxController {
late final GetStorage storage;
late final GetStorage? storage;
late final TextEditingController host;
late final TextEditingController port;
late final Rx<ServerType> type;
@@ -21,13 +22,13 @@ class BackendController extends GetxController {
HttpServer? remoteServer;
BackendController() {
storage = GetStorage("backend");
storage = appWithNoStorage ? null : GetStorage("backend");
started = RxBool(false);
type = Rx(ServerType.values.elementAt(storage.read("type") ?? 0));
type = Rx(ServerType.values.elementAt(storage?.read("type") ?? 0));
type.listen((value) {
host.text = _readHost();
port.text = _readPort();
storage.write("type", value.index);
storage?.write("type", value.index);
if (!started.value) {
return;
}
@@ -36,13 +37,13 @@ class BackendController extends GetxController {
});
host = TextEditingController(text: _readHost());
host.addListener(() =>
storage.write("${type.value.name}_host", host.text));
storage?.write("${type.value.name}_host", host.text));
port = TextEditingController(text: _readPort());
port.addListener(() =>
storage.write("${type.value.name}_port", port.text));
detached = RxBool(storage.read("detached") ?? false);
detached.listen((value) => storage.write("detached", value));
gameServerAddress = TextEditingController(text: storage.read("game_server_address") ?? "127.0.0.1");
storage?.write("${type.value.name}_port", port.text));
detached = RxBool(storage?.read("detached") ?? false);
detached.listen((value) => storage?.write("detached", value));
gameServerAddress = TextEditingController(text: storage?.read("game_server_address") ?? "127.0.0.1");
var lastValue = gameServerAddress.text;
writeMatchmakingIp(lastValue);
gameServerAddress.addListener(() {
@@ -53,7 +54,7 @@ class BackendController extends GetxController {
lastValue = newValue;
gameServerAddress.selection = TextSelection.collapsed(offset: newValue.length);
storage.write("game_server_address", newValue);
storage?.write("game_server_address", newValue);
writeMatchmakingIp(newValue);
});
watchMatchmakingIp().listen((event) {
@@ -62,15 +63,15 @@ class BackendController extends GetxController {
}
});
gameServerAddressFocusNode = FocusNode();
gameServerOwner = RxnString(storage.read("game_server_owner"));
gameServerOwner.listen((value) => storage.write("game_server_owner", value));
gameServerOwner = RxnString(storage?.read("game_server_owner"));
gameServerOwner.listen((value) => storage?.write("game_server_owner", value));
}
void reset() async {
type.value = ServerType.values.elementAt(0);
for (final type in ServerType.values) {
storage.write("${type.name}_host", null);
storage.write("${type.name}_port", null);
storage?.write("${type.name}_host", null);
storage?.write("${type.name}_port", null);
}
host.text = type.value != ServerType.remote ? kDefaultBackendHost : "";
@@ -79,7 +80,7 @@ class BackendController extends GetxController {
}
String _readHost() {
String? value = storage.read("${type.value.name}_host");
String? value = storage?.read("${type.value.name}_host");
if (value != null && value.isNotEmpty) {
return value;
}
@@ -92,7 +93,7 @@ class BackendController extends GetxController {
}
String _readPort() =>
storage.read("${type.value.name}_port") ?? kDefaultBackendPort.toString();
storage?.read("${type.value.name}_port") ?? kDefaultBackendPort.toString();
Stream<ServerResult> start() async* {
try {

View File

@@ -9,10 +9,12 @@ import 'package:get_storage/get_storage.dart';
import 'package:reboot_common/common.dart';
import 'package:reboot_launcher/src/util/keyboard.dart';
import '../../main.dart';
class GameController extends GetxController {
static const PhysicalKeyboardKey _kDefaultConsoleKey = PhysicalKeyboardKey(0x00070041);
late final GetStorage _storage;
late final GetStorage? _storage;
late final TextEditingController username;
late final TextEditingController password;
late final TextEditingController customLaunchArgs;
@@ -23,38 +25,37 @@ class GameController extends GetxController {
late final Rx<PhysicalKeyboardKey> consoleKey;
GameController() {
_storage = GetStorage("game");
Iterable decodedVersionsJson = jsonDecode(
_storage.read("versions") ?? "[]");
var decodedVersions = decodedVersionsJson
_storage = appWithNoStorage ? null : GetStorage("game");
Iterable decodedVersionsJson = jsonDecode(_storage?.read("versions") ?? "[]");
final decodedVersions = decodedVersionsJson
.map((entry) => FortniteVersion.fromJson(entry))
.toList();
versions = Rx(decodedVersions);
versions.listen((data) => _saveVersions());
var decodedSelectedVersionName = _storage.read("version");
var decodedSelectedVersion = decodedVersions.firstWhereOrNull((
final decodedSelectedVersionName = _storage?.read("version");
final decodedSelectedVersion = decodedVersions.firstWhereOrNull((
element) => element.name == decodedSelectedVersionName);
_selectedVersion = Rxn(decodedSelectedVersion);
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") ?? "");
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));
_storage?.write("custom_launch_args", customLaunchArgs.text));
started = RxBool(false);
instance = Rxn();
consoleKey = Rx(_readConsoleKey());
_writeConsoleKey(consoleKey.value);
consoleKey.listen((newValue) {
_storage.write("console_key", newValue.usbHidUsage);
_storage?.write("console_key", newValue.usbHidUsage);
_writeConsoleKey(newValue);
});
}
PhysicalKeyboardKey _readConsoleKey() {
final consoleKeyValue = _storage.read("console_key");
final consoleKeyValue = _storage?.read("console_key");
if(consoleKeyValue == null) {
return _kDefaultConsoleKey;
}
@@ -113,7 +114,7 @@ class GameController extends GetxController {
Future<void> _saveVersions() async {
var serialized = jsonEncode(versions.value.map((entry) => entry.toJson()).toList());
await _storage.write("versions", serialized);
await _storage?.write("versions", serialized);
}
bool get hasVersions => versions.value.isNotEmpty;
@@ -124,7 +125,7 @@ class GameController extends GetxController {
set selectedVersion(FortniteVersion? version) {
_selectedVersion.value = version;
_storage.write("version", version?.name);
_storage?.write("version", version?.name);
}
void updateVersion(FortniteVersion version, Function(FortniteVersion) function) {

View File

@@ -2,11 +2,12 @@ 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/main.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:uuid/uuid.dart';
class HostingController extends GetxController {
late final GetStorage _storage;
late final GetStorage? _storage;
late final String uuid;
late final TextEditingController name;
late final TextEditingController description;
@@ -22,23 +23,23 @@ class HostingController extends GetxController {
late final Rxn<Set<Map<String, dynamic>>> servers;
HostingController() {
_storage = GetStorage("hosting");
uuid = _storage.read("uuid") ?? const Uuid().v4();
_storage.write("uuid", uuid);
name = TextEditingController(text: _storage.read("name"));
name.addListener(() => _storage.write("name", name.text));
description = TextEditingController(text: _storage.read("description"));
description.addListener(() => _storage.write("description", description.text));
password = TextEditingController(text: _storage.read("password") ?? "");
password.addListener(() => _storage.write("password", password.text));
discoverable = RxBool(_storage.read("discoverable") ?? false);
discoverable.listen((value) => _storage.write("discoverable", value));
headless = RxBool(_storage.read("headless") ?? true);
headless.listen((value) => _storage.write("headless", value));
virtualDesktop = RxBool(_storage.read("virtual_desktop") ?? true);
virtualDesktop.listen((value) => _storage.write("virtual_desktop", value));
autoRestart = RxBool(_storage.read("auto_restart") ?? true);
autoRestart.listen((value) => _storage.write("auto_restart", value));
_storage = appWithNoStorage ? null : GetStorage("hosting");
uuid = _storage?.read("uuid") ?? const Uuid().v4();
_storage?.write("uuid", uuid);
name = TextEditingController(text: _storage?.read("name"));
name.addListener(() => _storage?.write("name", name.text));
description = TextEditingController(text: _storage?.read("description"));
description.addListener(() => _storage?.write("description", description.text));
password = TextEditingController(text: _storage?.read("password") ?? "");
password.addListener(() => _storage?.write("password", password.text));
discoverable = RxBool(_storage?.read("discoverable") ?? false);
discoverable.listen((value) => _storage?.write("discoverable", value));
headless = RxBool(_storage?.read("headless") ?? true);
headless.listen((value) => _storage?.write("headless", value));
virtualDesktop = RxBool(_storage?.read("virtual_desktop") ?? true);
virtualDesktop.listen((value) => _storage?.write("virtual_desktop", value));
autoRestart = RxBool(_storage?.read("auto_restart") ?? true);
autoRestart.listen((value) => _storage?.write("auto_restart", value));
started = RxBool(false);
published = RxBool(false);
showPassword = RxBool(false);

View File

@@ -1,8 +0,0 @@
import 'package:get/get.dart';
class InfoController extends GetxController {
List<String>? links;
Map<String, String> linksData;
InfoController() : linksData = {};
}

View File

@@ -11,7 +11,7 @@ import 'package:version/version.dart';
import 'package:yaml/yaml.dart';
class UpdateController {
late final GetStorage _storage;
late final GetStorage? _storage;
late final RxnInt timestamp;
late final Rx<UpdateStatus> status;
late final Rx<UpdateTimer> timer;
@@ -21,17 +21,17 @@ class UpdateController {
Future? _updater;
UpdateController() {
_storage = GetStorage("update");
timestamp = RxnInt(_storage.read("ts"));
timestamp.listen((value) => _storage.write("ts", value));
var timerIndex = _storage.read("timer");
_storage = appWithNoStorage ? null : GetStorage("update");
timestamp = RxnInt(_storage?.read("ts"));
timestamp.listen((value) => _storage?.write("ts", value));
var timerIndex = _storage?.read("timer");
timer = Rx(timerIndex == null ? UpdateTimer.hour : UpdateTimer.values.elementAt(timerIndex));
timer.listen((value) => _storage.write("timer", value.index));
url = TextEditingController(text: _storage.read("update_url") ?? kRebootDownloadUrl);
url.addListener(() => _storage.write("update_url", url.text));
timer.listen((value) => _storage?.write("timer", value.index));
url = TextEditingController(text: _storage?.read("update_url") ?? kRebootDownloadUrl);
url.addListener(() => _storage?.write("update_url", url.text));
status = Rx(UpdateStatus.waiting);
customGameServer = RxBool(_storage.read("custom_game_server") ?? false);
customGameServer.listen((value) => _storage.write("custom_game_server", value));
customGameServer = RxBool(_storage?.read("custom_game_server") ?? false);
customGameServer.listen((value) => _storage?.write("custom_game_server", value));
}
Future<void> notifyLauncherUpdate() async {
@@ -65,17 +65,17 @@ class UpdateController {
);
}
Future<void> updateReboot([bool force = false]) async {
Future<void> updateReboot({bool force = false, bool silent = false}) async {
if(_updater != null) {
return await _updater;
}
final result = _updateReboot(force);
final result = _updateReboot(force, silent);
_updater = result;
return await result;
}
Future<void> _updateReboot([bool force = false]) async {
Future<void> _updateReboot(bool force, bool silent) async {
try {
if(customGameServer.value) {
status.value = UpdateStatus.success;
@@ -92,34 +92,44 @@ class UpdateController {
return;
}
infoBarEntry = showInfoBar(
translations.downloadingDll("reboot"),
loading: true,
duration: null
);
if(!silent) {
infoBarEntry = showInfoBar(
translations.downloadingDll("reboot"),
loading: true,
duration: null
);
}
timestamp.value = await downloadRebootDll(url.text);
status.value = UpdateStatus.success;
infoBarEntry?.close();
infoBarEntry = showInfoBar(
translations.downloadDllSuccess("reboot"),
severity: InfoBarSeverity.success,
duration: infoBarShortDuration
);
if(!silent) {
infoBarEntry = showInfoBar(
translations.downloadDllSuccess("reboot"),
severity: InfoBarSeverity.success,
duration: infoBarShortDuration
);
}
}catch(message) {
infoBarEntry?.close();
var error = message.toString();
error = error.contains(": ") ? error.substring(error.indexOf(": ") + 2) : error;
error = error.toLowerCase();
status.value = UpdateStatus.error;
showInfoBar(
translations.downloadDllError("reboot.dll", error.toString()),
duration: infoBarLongDuration,
severity: InfoBarSeverity.error,
action: Button(
onPressed: () => updateReboot(true),
child: Text(translations.downloadDllRetry),
)
);
if(!silent) {
infoBarEntry?.close();
var error = message.toString();
error =
error.contains(": ") ? error.substring(error.indexOf(": ") + 2) : error;
error = error.toLowerCase();
status.value = UpdateStatus.error;
showInfoBar(
translations.downloadDllError("reboot.dll", error.toString()),
duration: infoBarLongDuration,
severity: InfoBarSeverity.error,
action: Button(
onPressed: () => updateReboot(
force: true,
silent: silent
),
child: Text(translations.downloadDllRetry),
)
);
}
}finally {
_updater = null;
}