Skip to content

Commit d42946c

Browse files
committed
10.0.3
1 parent 0a59a32 commit d42946c

File tree

7 files changed

+85
-31
lines changed

7 files changed

+85
-31
lines changed

gui/lib/l10n/reboot_en.arb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@
236236
"startGame": "Start fortnite",
237237
"stopGame": "Close fortnite",
238238
"waitingForGameServer": "Waiting for the game server to boot up...",
239-
"gameServerStartWarning": "The game server was started successfully, but Reboot didn't load",
239+
"gameServerStartWarning": "Unsupported version: the game server crashed while setting up the server",
240240
"gameServerStartLocalWarning": "The game server was started successfully, but other players can't join",
241241
"gameServerStarted": "The game server was started successfully",
242242
"gameClientStarted": "The game client was started successfully",

gui/lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ Future<void> _initWindow() async {
172172
await windowManager.setAlignment(Alignment.center);
173173
}
174174
await windowManager.setPreventClose(true);
175-
175+
await windowManager.setResizable(true);
176176
if(isWin11) {
177177
await Window.setEffect(
178178
effect: WindowEffect.acrylic,

gui/lib/src/messenger/implementation/version.dart

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import 'package:get/get.dart';
88
import 'package:reboot_common/common.dart';
99
import 'package:reboot_launcher/src/controller/game_controller.dart';
1010
import 'package:reboot_launcher/src/messenger/abstract/dialog.dart';
11+
import 'package:reboot_launcher/src/util/os.dart';
1112
import 'package:reboot_launcher/src/util/translations.dart';
1213
import 'package:reboot_launcher/src/util/types.dart';
1314
import 'package:reboot_launcher/src/widget/file_selector.dart';
14-
import 'package:universal_disk_space/universal_disk_space.dart';
1515
import 'package:windows_taskbar/windows_taskbar.dart';
1616

1717
class AddVersionDialog extends StatefulWidget {
@@ -35,20 +35,18 @@ class _AddVersionDialogState extends State<AddVersionDialog> {
3535
final Rxn<double> _progress = Rxn();
3636
final RxInt _speed = RxInt(0);
3737

38-
late DiskSpace _diskSpace;
3938
late Future<List<FortniteBuild>> _fetchFuture;
40-
late Future _diskFuture;
4139

4240
SendPort? _downloadPort;
4341
Object? _error;
4442
StackTrace? _stackTrace;
4543

4644
@override
4745
void initState() {
48-
_fetchFuture = compute(fetchBuilds, null);
49-
_diskSpace = DiskSpace();
50-
_diskFuture = _diskSpace.scan()
51-
.then((_) => _updateFormDefaults());
46+
_fetchFuture = compute(fetchBuilds, null).then((value) {
47+
_updateFormDefaults();
48+
return value;
49+
});
5250
super.initState();
5351
}
5452

@@ -71,7 +69,7 @@ class _AddVersionDialogState extends State<AddVersionDialog> {
7169
switch(_status.value){
7270
case _DownloadStatus.form:
7371
return FutureBuilder(
74-
future: Future.wait([_fetchFuture, _diskFuture]).then((_) async => await _fetchFuture),
72+
future: _fetchFuture,
7573
builder: (context, snapshot) {
7674
if (snapshot.hasError) {
7775
WidgetsBinding.instance.addPostFrameCallback((_) => _onDownloadError(snapshot.error, snapshot.stackTrace));
@@ -444,16 +442,16 @@ class _AddVersionDialogState extends State<AddVersionDialog> {
444442
_build.value = null;
445443
}
446444

447-
if(_source.value != _BuildSource.local && _diskSpace.disks.isNotEmpty) {
448-
await _fetchFuture;
449-
final bestDisk = _diskSpace.disks
450-
.reduce((first, second) => first.availableSpace > second.availableSpace ? first : second);
445+
final disks = WindowsDisk.available();
446+
if(_source.value != _BuildSource.local && disks.isNotEmpty) {
447+
final bestDisk = disks.reduce((first, second) => first.freeBytesAvailable > second.freeBytesAvailable ? first : second);
451448
final build = _build.value;
452449
if(build == null){
453450
return;
454451
}
455452

456-
final pathText = "${bestDisk.devicePath}\\FortniteBuilds\\${build.version}";
453+
print("${bestDisk.path}\\FortniteBuilds\\${build.version}");
454+
final pathText = "${bestDisk.path}FortniteBuilds\\${build.version}";
457455
_pathController.text = pathText;
458456
_pathController.selection = TextSelection.collapsed(offset: pathText.length);
459457
}

gui/lib/src/util/matchmaker.dart

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22
import 'dart:convert';
33
import 'dart:io';
4+
import 'dart:math';
45

56
import 'package:reboot_common/common.dart';
67

@@ -9,22 +10,24 @@ const Duration _timeout = Duration(seconds: 5);
910
Completer<bool> pingGameServerOrTimeout(String address, Duration timeout) {
1011
final completer = Completer<bool>();
1112
final start = DateTime.now();
12-
(() async {
13-
while (!completer.isCompleted && DateTime.now().millisecondsSinceEpoch - start.millisecondsSinceEpoch < timeout.inMilliseconds) {
14-
final result = await pingGameServer(address);
15-
if(result) {
16-
completer.complete(true);
17-
}else {
18-
await Future.delayed(_timeout);
19-
}
20-
}
21-
if(!completer.isCompleted) {
22-
completer.complete(false);
23-
}
24-
})();
13+
_pingGameServerOrTimeout(completer, start, timeout, address);
2514
return completer;
2615
}
2716

17+
Future<void> _pingGameServerOrTimeout(Completer<bool> completer, DateTime start, Duration timeout, String address) async {
18+
while (!completer.isCompleted && max(DateTime.now().millisecondsSinceEpoch - start.millisecondsSinceEpoch, 0) < timeout.inMilliseconds) {
19+
final result = await pingGameServer(address);
20+
if(result) {
21+
completer.complete(true);
22+
}else {
23+
await Future.delayed(_timeout);
24+
}
25+
}
26+
if(!completer.isCompleted) {
27+
completer.complete(false);
28+
}
29+
}
30+
2831
Future<bool> pingGameServer(String address) async {
2932
final split = address.split(":");
3033
var hostname = split[0];

gui/lib/src/util/os.dart

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,4 +491,58 @@ int _convertToHString(String string) {
491491

492492
extension WindowManagerExtension on WindowManager {
493493
Future<void> maximizeOrRestore() async => await windowManager.isMaximized() ? windowManager.restore() : windowManager.maximize();
494+
}
495+
496+
class WindowsDisk {
497+
static final String _nullTerminator = String.fromCharCode(0);
498+
499+
final String path;
500+
final int freeBytesAvailable;
501+
final int totalNumberOfBytes;
502+
503+
const WindowsDisk._internal(this.path, this.freeBytesAvailable, this.totalNumberOfBytes);
504+
505+
static List<WindowsDisk> available() {
506+
final buffer = malloc.allocate<Utf16>(MAX_PATH);
507+
try {
508+
final length = GetLogicalDriveStrings(MAX_PATH, buffer);
509+
if (length == 0) {
510+
return [];
511+
}
512+
513+
return buffer.toDartString(length: length)
514+
.split(_nullTerminator)
515+
.where((drive) => drive.length > 1)
516+
.map((driveName) {
517+
final freeBytesAvailable = calloc<Uint64>();
518+
final totalNumberOfBytes = calloc<Uint64>();
519+
final totalNumberOfFreeBytes = calloc<Uint64>();
520+
try {
521+
GetDiskFreeSpaceEx(
522+
driveName.toNativeUtf16(),
523+
freeBytesAvailable,
524+
totalNumberOfBytes,
525+
totalNumberOfFreeBytes
526+
);
527+
return WindowsDisk._internal(
528+
driveName,
529+
freeBytesAvailable.value,
530+
totalNumberOfBytes.value
531+
);
532+
} finally {
533+
calloc.free(freeBytesAvailable);
534+
calloc.free(totalNumberOfBytes);
535+
calloc.free(totalNumberOfFreeBytes);
536+
}
537+
})
538+
.toList(growable: false);
539+
} finally {
540+
calloc.free(buffer);
541+
}
542+
}
543+
544+
@override
545+
String toString() {
546+
return 'WindowsDisk{path: $path, freeBytesAvailable: $freeBytesAvailable, totalNumberOfBytes: $totalNumberOfBytes}';
547+
}
494548
}

gui/lib/src/widget/game_start_button.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ class _LaunchButtonState extends State<LaunchButton> {
492492

493493
final pingOperation = pingGameServerOrTimeout(
494494
"$publicIp:$gameServerPort",
495-
const Duration(days: 365)
495+
const Duration(days: 1)
496496
);
497497
this._pingOperation = pingOperation;
498498
_gameServerInfoBar = showRebootInfoBar(

gui/pubspec.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: reboot_launcher
22
description: Graphical User Interface for Project Reboot
3-
version: "10.0.2"
3+
version: "10.0.3"
44

55
publish_to: 'none'
66

@@ -58,7 +58,6 @@ dependencies:
5858

5959
# Storage
6060
get_storage: ^2.1.1
61-
universal_disk_space: ^0.2.3
6261
path: ^1.9.0
6362

6463
# Translations

0 commit comments

Comments
 (0)