This commit is contained in:
Alessandro Autiero
2025-03-23 20:26:13 +01:00
parent 9a000db3b7
commit 5d8f6bf0fa
16 changed files with 205 additions and 117 deletions

View File

@@ -396,7 +396,7 @@ class BackendController extends GetxController {
}
final version = Get.find<GameController>()
.getVersionByName(server.version.toString());
.getVersionByGame(server.version.toString());
if(version == null) {
_showRebootInfoBar(
translations.cannotJoinServerVersion(server.version.toString()),

View File

@@ -7,6 +7,7 @@ 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:version/version.dart';
class GameController extends GetxController {
static const String storageName = "v3_game_storage";
@@ -56,6 +57,21 @@ class GameController extends GetxController {
return versions.value.firstWhereOrNull((element) => element.name == name);
}
FortniteVersion? getVersionByGame(String gameVersion) {
gameVersion = gameVersion.trim();
final parsedGameVersion = Version.parse(gameVersion);
return versions.value.firstWhereOrNull((element) {
final compare = element.gameVersion.trim();
try {
final parsedCompare = Version.parse(compare);
return parsedCompare.major == parsedGameVersion.major
&& parsedCompare.minor == parsedGameVersion.minor;
} on FormatException {
return compare == gameVersion;
}
});
}
void addVersion(FortniteVersion version) {
versions.update((val) => val?.add(version));
selectedVersion.value = version;

View File

@@ -47,37 +47,6 @@ Future<String?> openFilePicker(String extension) async {
bool get isDarkMode =>
SchedulerBinding.instance.platformDispatcher.platformBrightness.isDark;
class _ServiceProvider10 extends IUnknown {
static const String _CLSID = "{C2F03A33-21F5-47FA-B4BB-156362A2F239}";
static const String _IID = "{6D5140C1-7436-11CE-8034-00AA006009FA}";
_ServiceProvider10._internal(Pointer<COMObject> ptr) : super(ptr);
factory _ServiceProvider10.createInstance() =>
_ServiceProvider10._internal(COMObject.createFromID(_CLSID, _IID));
Pointer<COMObject> queryService(String classId, String instanceId) {
final result = calloc<COMObject>();
final code = (ptr.ref.vtable + 3)
.cast<
Pointer<
NativeFunction<
HRESULT Function(Pointer, Pointer<GUID>, Pointer<GUID>,
Pointer<COMObject>)>>>()
.value
.asFunction<
int Function(Pointer, Pointer<GUID>, Pointer<GUID>,
Pointer<COMObject>)>()(ptr.ref.lpVtbl,
GUIDFromString(classId), GUIDFromString(instanceId), result);
if (code != 0) {
free(result);
throw WindowsException(code);
}
return result;
}
}
extension WindowManagerExtension on WindowManager {
Future<void> maximizeOrRestore() async => await windowManager.isMaximized() ? windowManager.restore() : windowManager.maximize();
}

View File

@@ -1,7 +1,6 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_gen/gen_l10n/reboot_localizations.dart';
import 'package:intl/intl.dart';
import 'package:reboot_common/common.dart';
AppLocalizations? _translations;
bool _init = false;

View File

@@ -38,7 +38,6 @@ SettingTile createFileSetting({
controller: controller,
validator: (text) {
final result = _checkDll(text);
print("Called validator: $result");
obx.value = result;
return result;
},

View File

@@ -180,7 +180,7 @@ class _BrowsePageState extends RebootPageState<BrowsePage> {
case _Filter.accessible:
return element.password == null;
case _Filter.playable:
return _gameController.getVersionByName(element.version) != null;
return _gameController.getVersionByGame(element.version) != null;
}
}).toList();
final sort = _sort.value;

View File

@@ -147,27 +147,24 @@ class _ImportVersionDialogState extends State<ImportVersionDialog> {
final name = _nameController.text.trim();
final directory = Directory(_pathController.text.trim());
final files = await Future.wait([
final shippingExes = await Future.wait([
Future.delayed(const Duration(seconds: 1)).then((_) => <File>[]),
findFiles(directory, kShippingExe).then((files) async {
if(files.length == 1) {
await patchHeadless(files.first);
}
return files;
})
findFiles(directory, kShippingExe)
]).then((values) => values.expand((entry) => entry).toList());
if (files.isEmpty) {
if (shippingExes.isEmpty) {
_validator.value = _ImportState.missingShippingExeError;
return;
}
if(files.length != 1) {
if(shippingExes.length != 1) {
_validator.value = _ImportState.multipleShippingExesError;
return;
}
final gameVersion = await extractGameVersion(files.first.path, path.basename(directory.path));
await patchHeadless(shippingExes.first);
final gameVersion = await extractGameVersion(directory);
try {
if(Version.parse(gameVersion) >= kMaxAllowedVersion) {
_validator.value = _ImportState.unsupportedVersionError;
@@ -181,13 +178,13 @@ class _ImportVersionDialogState extends State<ImportVersionDialog> {
final version = FortniteVersion(
name: name,
gameVersion: gameVersion,
location: files.first.parent
location: shippingExes.first.parent
);
_gameController.addVersion(version);
}else {
widget.version?.name = name;
widget.version?.gameVersion = gameVersion;
widget.version?.location = files.first.parent;
widget.version?.location = shippingExes.first.parent;
}
_validator.value = _ImportState.success;
}