run method

  1. @override
void run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
void run() async {
  await initializeObs();

  final eventSubscriptions =
      argResults!['event-subscriptions'].toString().split(',');

  final eventSubscriptionMap = EventSubscription.values.asNameMap();

  var finalSubscriptions = 0;

  for (var eventSubscription in eventSubscriptions) {
    if (eventSubscriptionMap.containsKey(eventSubscription)) {
      finalSubscriptions += eventSubscriptionMap[eventSubscription]!.code;
    }
  }

  await obs.listenForMask(finalSubscriptions);

  final commandList = CommandLineConverter().convert(argResults?['command']);

  if (argResults?['command'] != null) {
    obs.addFallbackListener((event) async {
      final echo = await Process.start(
        'printf',
        ['$event'],
      );

      final cmd = await Process.start(
        commandList[0],
        commandList.sublist(1),
      );

      echo.stdout.pipe(cmd.stdin);

      cmd.stdout
          .transform(utf8.decoder)
          .forEach((value) => print(value.trim()));
    });
  } else {
    obs.addFallbackListener((event) => print(event));
  }
}