import 'dart:async'; import 'dart:io'; import 'package:dart_framework/utils/os_startup.dart'; import 'package:dart_framework/utils/system_util.dart'; import 'package:oto_cli/cli/cli.dart'; import 'package:oto_cli/cli/commands/command_base.dart'; import 'package:oto_cli/cli/commands/command_const.dart'; import 'package:oto_cli/cli/commands/install/regist_path.dart'; class CommandInstall extends CommandBase { @override String get name => 'install'; @override Future execute(List parameters) async { var label = CLI.serviceName; if (!await OSStartup.isRegistedStartup(label)) { var installPath = CommandConstant.OS!.installPath; //Create install folder var installDir = Directory(installPath); if (!installDir.existsSync()) { await installDir.create(recursive: true); } //Copy executable file var target = File(Platform.resolvedExecutable); var installFilePath = CommandConstant.OS?.installFilePath; await target.copy(installFilePath!); //Regist path await RegistPath.OS?.add(installPath); //Create startup await OSStartup.registStartup(installFilePath, label, arguments: ['start']); printOut('Installed successfully.', PrintType.information); } else { printOut('Installation failed because it is already installed.', PrintType.error); } return simpleFuture; } @override String getDescription() { var serviceName = CLI.current.config.serviceName; return 'Install "$serviceName" to run in the background as a startup program.'; } } class CommandUninstall extends CommandBase { @override String get name => 'uninstall'; @override Future execute(List parameters) async { var c = Completer(); var label = CLI.serviceName; if (await OSStartup.isRegistedStartup(label)) { var installPath = CommandConstant.OS!.installPath; //To-do: Proccess kill //Regist path await RegistPath.OS?.remove(installPath); //Remove Installed file var installDir = Directory(installPath); if (installDir.existsSync()) { await installDir.delete(recursive: true); } //Remove startup await OSStartup.unregistStartup(label); printOut('Uninstalled successfully.', PrintType.information); } else { printOut('It is already uninstalled.', PrintType.warning); } return c.future; } @override String getDescription() { return 'Delete it from Startup.'; } }