Skip to content

Commit

Permalink
Run commands zoned
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeDoctorDE committed Sep 30, 2024
1 parent f8f793c commit 4ac7cb3
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
1 change: 1 addition & 0 deletions packages/consoler/example/bin/example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Future<void> main(List<String> arguments) async {
DefaultProgramConfiguration(description: 'Consoler example'),
);
consoler.registerProgram('nothing', NothingProgram());
consoler.registerProgram('warn', WarningProgram(consoler));
consoler.run();
for (var i = 10; i >= 0; i--) {
consoler.print('Countdown: $i');
Expand Down
13 changes: 13 additions & 0 deletions packages/consoler/example/lib/example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,16 @@ class NothingProgram extends ConsoleProgram {
@override
String? getDescription() => null;
}

class WarningProgram extends ConsoleProgram {
final Consoler consoler;

WarningProgram(this.consoler);
@override
void run(String label, List<String> args) {
consoler.print('Warning: This is a warning!', level: LogLevel.warning);
}

@override
String? getDescription() => null;
}
13 changes: 9 additions & 4 deletions packages/consoler/lib/src/consoler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ final class Consoler<T extends ConsoleProgram> {
stdout.write('\r\n$prefix');
}

T runPrintZone<T>(T Function() action) => runZoned(action,
zoneSpecification: ZoneSpecification(print: (_, __, ___, message) {
print(message);
}));

void print(Object? message, {LogLevel? level}) {
if (level != null && level.index < minLogLevel.index) return;
stdout.write('\r');
Expand All @@ -99,11 +104,11 @@ final class Consoler<T extends ConsoleProgram> {
return _programs.remove(name) != null;
}

void _onInput(String input) {
Future<void> _onInput(String input) async {
final splitted = _splitBySpaces(input);
final command = splitted.firstOrNull;
(_programs[command] ?? _programs[null])
?.run(command ?? '', splitted.isEmpty ? const [] : splitted.sublist(1));
sendPrefix();

runPrintZone(() => (_programs[command] ?? _programs[null])?.run(
command ?? '', splitted.isEmpty ? const [] : splitted.sublist(1)));
}
}

0 comments on commit 4ac7cb3

Please sign in to comment.