oto/lib/oto/command.dart
2023-11-05 10:24:08 +09:00

139 lines
3.9 KiB
Dart

// ignore_for_file: constant_identifier_names
import 'dart:async';
import 'package:oto_cli/oto/application.dart';
import 'package:oto_cli/oto/build/app_data_creator.dart';
import 'package:oto_cli/oto/build/build_dart.dart';
import 'package:oto_cli/oto/build/build_dart_compile.dart';
import 'package:oto_cli/oto/build/build_dot_net.dart';
import 'package:oto_cli/oto/build/build_flutter.dart';
import 'package:oto_cli/oto/build/build_ios.dart';
import 'package:oto_cli/oto/data/data.dart';
import 'package:oto_cli/oto/file/delete.dart';
import 'package:oto_cli/oto/file/rename.dart';
import 'package:oto_cli/oto/shell/shell.dart';
import 'package:oto_cli/oto/file/copy.dart';
import 'package:oto_cli/oto/util/execute_app.dart';
import 'package:oto_cli/oto/util/publish_ios.dart';
import 'package:oto_cli/oto/util/slack.dart';
import 'package:oto_cli/oto/util/zip.dart';
import 'package:oto_cli/oto/uploader/uploader.dart';
enum CommandType {
SimpleCommand,
CreateAppData,
BuildDart,
BuildFlutter,
BuildDartCompile,
BuildDotNet,
BuildiOS,
ArchiveiOS,
ExportiOS,
PublishiOS,
ExecuteApp,
Upload,
Copy,
Rename,
Delete,
Slack,
SlackBuild,
Zip,
Shell
}
abstract class Command {
static final Map<CommandType, Command> _commandMap = {
CommandType.SimpleCommand: SimpleCommand(),
CommandType.CreateAppData: CreateAppData(),
CommandType.BuildDart: BuildDart(),
CommandType.BuildFlutter: BuildFlutter(),
CommandType.BuildDartCompile: BuildDartCompile(),
CommandType.BuildDotNet: BuildDotNet(),
CommandType.BuildiOS: BuildiOS(),
CommandType.ArchiveiOS: ArchiveiOS(),
CommandType.ExportiOS: ExportiOS(),
CommandType.PublishiOS: PublishiOS(),
CommandType.ExecuteApp: ExecuteApp(),
CommandType.Upload: Uploader(),
CommandType.Copy: Copy(),
CommandType.Rename: Rename(),
CommandType.Delete: Delete(),
CommandType.Slack: Slack(),
CommandType.SlackBuild: SlackBuild(),
CommandType.Zip: Zip(),
CommandType.Shell: Shell()
};
factory Command(CommandType type) {
return _commandMap[type]!;
}
static final Map<String, dynamic> _cache = <String, dynamic>{};
static String replaceTag(String raw) {
var regEx = RegExp(r'(<!)([a-zA-Z0-9.]+)(>)');
var list = regEx.allMatches(raw);
for (var match in list) {
var param = match.group(2);
if (!_cache.containsKey(param)) {
_cache[param!] = _getTagValue(param);
}
var target = '<!${param!}>';
raw = raw.replaceAll(target, _cache[param]);
}
return raw;
}
static void setReturnValue(String tag, dynamic value) {
var regEx = RegExp(r'(<!)([a-zA-Z0-9.]+)(>)');
var match = regEx.firstMatch(tag);
tag = match!.group(2)!;
if (tag.startsWith('common')) {
var key = tag.replaceFirst('common.', '');
Application.instance.property![key] = value;
}
}
static dynamic _getTagValue(String value) {
var setted = false;
dynamic data;
if (value.startsWith('common.')) {
var map = Application.instance.property;
var param = value.replaceFirst('common.', '');
if (map!.containsKey(param)) {
data = map[param];
setted = true;
} else {
print('"$value" is not exist in common');
data = '';
setted = true;
}
}
if (!setted) {
throw Exception(
'Command.getTagValue: "$value" is not defined in common.');
}
return data;
}
// ignore: missing_return
Future<bool> execute(DataCommand command) async {
var c = Completer<bool>();
c.complete(true);
return c.future;
}
}
//Templete
class SimpleCommand implements Command {
@override
Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>();
var common = Application.instance.property;
var jenkins = Application.instance.jenkinsData;
print(command.param);
//Start here
c.complete(true);
return c.future;
}
}