oto/lib/cli/commands/command_install.dart
2023-10-29 12:09:45 +09:00

86 lines
2.4 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:dart_framework/utils/os_startup.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<String> parameters) async {
var c = Completer();
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 = '$installPath\\$label.exe';
await target.copy(installFilePath);
//Regist path
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 c.future;
}
@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<String> parameters) async {
var c = Completer<bool>();
var label = CLI.serviceName;
if (await OSStartup.isRegistedStartup(label)) {
var installPath = CommandConstant.OS!.installPath;
//To-do: Proccess kill
//Regist path
RegistPath.OS?.add(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.';
}
}