158 lines
3.8 KiB
Dart
158 lines
3.8 KiB
Dart
import 'dart:async';
|
|
import 'dart:convert';
|
|
import 'dart:io';
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:path/path.dart';
|
|
import 'package:yaml/yaml.dart';
|
|
import 'package:path/path.dart' as path;
|
|
|
|
late Future<String> Function() getUserPath;
|
|
late Future<String> Function() getProjectName;
|
|
late Future<String> Function() getDataPath;
|
|
|
|
void initialize() {
|
|
getUserPath = getUserPath_;
|
|
getProjectName = getProjectName_;
|
|
getDataPath = getDataPath_;
|
|
}
|
|
|
|
Map<String, List<String>?> envArguments(List<String> arguments) {
|
|
var dic = <String, List<String>?>{};
|
|
var list = <String>[];
|
|
var length = arguments.length;
|
|
for (var i = 0; i < length; ++i) {
|
|
var value = arguments[i];
|
|
var key = _getKey(value);
|
|
if (key != null) {
|
|
var index = i + 1;
|
|
list.clear();
|
|
while (index < length) {
|
|
var arg = arguments[index];
|
|
if (_getKey(arg) == null) {
|
|
list.add(arg);
|
|
index++;
|
|
} else {
|
|
i = index - 1;
|
|
break;
|
|
}
|
|
}
|
|
List<String>? arr = List<String>.from(list);
|
|
if (arr.isEmpty) arr = null;
|
|
dic[key] = arr;
|
|
}
|
|
}
|
|
return dic;
|
|
}
|
|
|
|
String? _getKey(String value) {
|
|
String? key;
|
|
if (value.indexOf('-') == 0) {
|
|
key = value.substring(1, value.length);
|
|
}
|
|
return key;
|
|
}
|
|
|
|
Map<String, dynamic>? getMapFromJson(String jsonStr) {
|
|
Map<String, dynamic>? map;
|
|
if (jsonStr.length > 5) {
|
|
JsonCodec codec = JsonCodec();
|
|
try {
|
|
map = codec.decode(jsonStr);
|
|
} catch (e) {
|
|
print("Error: $e");
|
|
}
|
|
}
|
|
return map;
|
|
}
|
|
|
|
Map<String, dynamic>? getMapFromYaml(String yamlStr) {
|
|
Map<String, dynamic>? map;
|
|
if (yamlStr.length > 5) {
|
|
try {
|
|
map = jsonDecode(jsonEncode(loadYaml(yamlStr)));
|
|
} catch (e) {
|
|
print("Error: $e");
|
|
}
|
|
}
|
|
return map;
|
|
}
|
|
|
|
Future<String> getIPAddress(String domain) async {
|
|
var c = Completer<String>();
|
|
late String ipAddress;
|
|
var regEx = RegExp(r'(://)([a-zA-Z0-9-.]+)(/|:)');
|
|
var match = regEx.firstMatch(domain);
|
|
if (match != null && match.groupCount > 2) {
|
|
domain = match.group(2)!;
|
|
var list = await InternetAddress.lookup(domain);
|
|
for (var address in list) {
|
|
ipAddress = address.address;
|
|
break;
|
|
}
|
|
}
|
|
c.complete(ipAddress);
|
|
return c.future;
|
|
}
|
|
|
|
Future get simpleFuture {
|
|
var c = Completer();
|
|
c.complete();
|
|
return c.future;
|
|
}
|
|
|
|
Future<Uint8List?> readFileByte(String filePath) async {
|
|
var c = Completer<Uint8List>();
|
|
Uri myUri = Uri.parse(filePath);
|
|
File audioFile = File.fromUri(myUri);
|
|
Uint8List? bytes;
|
|
await audioFile.readAsBytes().then((value) {
|
|
bytes = Uint8List.fromList(value);
|
|
print('reading of bytes is completed');
|
|
}).catchError((onError) {
|
|
print('Exception Error while reading audio from path:$onError');
|
|
});
|
|
c.complete(bytes);
|
|
return c.future;
|
|
}
|
|
|
|
Future<String> getUserPath_() async {
|
|
var c = Completer<String>();
|
|
String home = '';
|
|
Map<String, String> envVars = Platform.environment;
|
|
if (Platform.isMacOS) {
|
|
home = envVars['HOME']!;
|
|
} else if (Platform.isLinux) {
|
|
home = envVars['HOME']!;
|
|
} else if (Platform.isWindows) {
|
|
home = envVars['UserProfile']!;
|
|
}
|
|
c.complete(home);
|
|
return c.future;
|
|
}
|
|
|
|
Future<String> getDataPath_() async {
|
|
var c = Completer<String>();
|
|
String path = await getUserPath();
|
|
if (Platform.isMacOS) {
|
|
path = '$path/Library/Application Support/${await getProjectName()}';
|
|
} else if (Platform.isLinux) {
|
|
path = '$path/.config/${await getProjectName()}';
|
|
} else if (Platform.isWindows) {
|
|
path = '$path/AppData/Local/${await getProjectName()}';
|
|
}
|
|
c.complete(path);
|
|
return c.future;
|
|
}
|
|
|
|
Future<String> getProjectName_() async {
|
|
var c = Completer<String>();
|
|
var name =
|
|
path.dirname(Platform.script.toFilePath(windows: Platform.isWindows));
|
|
print(name);
|
|
if (path.basename(name) == 'bin') {
|
|
name = path.dirname(name);
|
|
}
|
|
c.complete(path.basename(name));
|
|
return c.future;
|
|
}
|