Skip to content

Commit 9a000db

Browse files
committed
10.0.8
1 parent 4327541 commit 9a000db

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+4830
-2913
lines changed

cli/lib/main.dart

Lines changed: 328 additions & 39 deletions
Large diffs are not rendered by default.

cli/lib/src/command/backend.dart

Whitespace-only changes.

cli/lib/src/command/commands.dart

Whitespace-only changes.

cli/lib/src/command/config.dart

Whitespace-only changes.

cli/lib/src/command/host.dart

Whitespace-only changes.

cli/lib/src/command/play.dart

Whitespace-only changes.

cli/lib/src/command/versions.dart

Whitespace-only changes.

cli/lib/src/controller/config.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import 'dart:convert';
2+
import 'dart:io';
3+
4+
import 'package:reboot_common/common.dart';
5+
6+
List<FortniteVersion> readVersions() {
7+
final file = _versionsFile;
8+
if(!file.existsSync()) {
9+
return [];
10+
}
11+
12+
Iterable decodedVersionsJson = jsonDecode(file.readAsStringSync());
13+
return decodedVersionsJson
14+
.map((entry) => FortniteVersion.fromJson(entry))
15+
.toList();
16+
}
17+
18+
void writeVersion(FortniteVersion version) {
19+
final versions = readVersions();
20+
versions.add(version);
21+
_versionsFile.writeAsString(jsonEncode(versions.map((version) => version.toJson()).toList()));
22+
}
23+
24+
File get _versionsFile => File('${installationDirectory.path}/versions.json');

cli/lib/cli.dart renamed to cli/lib/src/util/console.dart

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
import 'dart:collection';
1+
import 'dart:io';
2+
import 'package:dart_console/dart_console.dart';
23

3-
class Parser {
4+
typedef AutoComplete = String? Function(String);
5+
6+
class ConsoleParser {
47
final List<Command> commands;
58

6-
Parser({required this.commands});
9+
ConsoleParser({required this.commands});
710

811
CommandCall? parse(List<String> args) {
912
var position = 0;
@@ -86,4 +89,72 @@ class CommandCall {
8689

8790
@override
8891
String toString() => 'CommandCall{name: $name, parameters: $parameters, subCall: $subCall}';
89-
}
92+
}
93+
94+
String runAutoComplete(AutoComplete completion) {
95+
final console = Console();
96+
console.rawMode = true;
97+
final position = console.cursorPosition!;
98+
99+
var currentInput = '';
100+
var running = true;
101+
var result = '';
102+
103+
while (running) {
104+
final key = console.readKey();
105+
switch (key.controlChar) {
106+
case ControlCharacter.ctrlC:
107+
running = false;
108+
break;
109+
case ControlCharacter.enter:
110+
_eraseUntil(console, position);
111+
console.write(currentInput);
112+
console.writeLine();
113+
result = currentInput;
114+
running = false;
115+
break;
116+
case ControlCharacter.tab:
117+
final suggestion = completion(currentInput);
118+
if (suggestion != null) {
119+
_eraseUntil(console, position);
120+
currentInput = suggestion;
121+
console.write(currentInput);
122+
}
123+
break;
124+
case ControlCharacter.backspace:
125+
if (currentInput.isNotEmpty) {
126+
currentInput = currentInput.substring(0, currentInput.length - 1);
127+
_eraseUntil(console, position);
128+
console.write(currentInput);
129+
_showSuggestion(console, position, currentInput, completion);
130+
}
131+
break;
132+
default:
133+
currentInput += key.char;
134+
console.write(key.char);
135+
_showSuggestion(console, position, currentInput, completion);
136+
}
137+
}
138+
139+
return result;
140+
}
141+
142+
void _eraseUntil(Console console, Coordinate position) {
143+
console.cursorPosition = position;
144+
stdout.write('\x1b[K');
145+
}
146+
147+
void _showSuggestion(Console console, Coordinate position, String input, AutoComplete completion) {
148+
final suggestion = completion(input);
149+
if(suggestion == null) {
150+
_eraseUntil(console, position);
151+
console.write(input);
152+
}else if(suggestion.length > input.length) {
153+
final remaining = suggestion.substring(input.length);
154+
final cursorPosition = console.cursorPosition;
155+
console.setForegroundColor(ConsoleColor.brightBlack);
156+
console.write(remaining);
157+
console.resetColorAttributes();
158+
console.cursorPosition = cursorPosition;
159+
}
160+
}

cli/lib/src/util/extensions.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
extension IterableExtension<E> on Iterable<E> {
2+
E? firstWhereOrNull(bool test(E element)) {
3+
for (final element in this) {
4+
if (test(element)) {
5+
return element;
6+
}
7+
}
8+
return null;
9+
}
10+
}

0 commit comments

Comments
 (0)