diff --git a/lib/core/application.dart b/lib/core/application.dart index 2536ad5..8718110 100644 --- a/lib/core/application.dart +++ b/lib/core/application.dart @@ -8,7 +8,7 @@ class Application { Application(Function() func, Function(Object, StackTrace) errorListener) { runZonedGuarded(() async { - system.initialize(); + await system.initialize(); writeLog = (error, stack) => logError('$error:\n$stack'); func(); }, (error, stack) { diff --git a/lib/log/log.dart b/lib/log/log.dart index 3d01e7d..a4412f9 100644 --- a/lib/log/log.dart +++ b/lib/log/log.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:dart_framework/platform/platform_base.dart'; +import 'package:dart_framework/utils/path.dart'; import 'package:dart_framework/utils/string_util.dart'; import 'package:dart_framework/utils/system_util.dart'; @@ -100,7 +101,7 @@ class Log { void initializeLog() async { if (path == null) { - path = await getDataPath(); + path = await Path.dataPath; if (path!.isNotEmpty) { path = '$path/logs'; var dir = Directory(path!); diff --git a/lib/utils/os_startup.dart b/lib/utils/os_startup.dart index 05531b4..29cb243 100644 --- a/lib/utils/os_startup.dart +++ b/lib/utils/os_startup.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'dart:async'; +import 'package:dart_framework/utils/path.dart'; import 'package:path/path.dart' as path; import 'package:dart_framework/platform/process.dart'; @@ -92,7 +93,7 @@ class _StartupMac extends _Startup { Future isRegistedStartup(String label) async { var c = Completer(); var plistName = '$label.plist'; - var userPath = Platform.environment['HOME'] as String; + var userPath = await Path.userPath; c.complete( await File('$userPath/Library/LaunchAgents/$plistName').exists()); return c.future; @@ -121,7 +122,7 @@ class _StartupMac extends _Startup { //create plist in LaunchAgents final plistName = '$label.plist'; - final userPath = Platform.environment['HOME']; + final userPath = await Path.userPath; final tagLogStandard = '{LOG_STANDARD}'; final tagLogError = '{LOG_ERROR}'; final tagParameters = '{PARAMETERS}'; @@ -158,7 +159,7 @@ class _StartupMac extends _Startup { var c = Completer(); var success = false; var plistName = '$label.plist'; - var userPath = Platform.environment['HOME']; + var userPath = await Path.userPath; var file = File('$userPath/Library/LaunchAgents/$plistName'); if (file.existsSync()) { await file.delete(); @@ -194,7 +195,7 @@ WantedBy=default.target"""; Future isRegistedStartup(String label) async { var c = Completer(); var exist = false; - var userPath = Platform.environment['HOME'] as String; + var userPath = await Path.userPath; exist = await File('$userPath/.config/systemd/user/$label.service').exists(); c.complete(exist); @@ -212,7 +213,7 @@ WantedBy=default.target"""; final tagPath = '{FILE_PATH}'; ProcessResult? result; - var userPath = Platform.environment['HOME'] as String; + var userPath = await Path.userPath; var systemPath = '$userPath/.config/systemd/user'; if (arguments != null) { for (var arg in arguments) { @@ -241,7 +242,7 @@ WantedBy=default.target"""; Future unregistStartup(String label) async { var c = Completer(); var success = false; - var userPath = Platform.environment['HOME'] as String; + var userPath = await Path.userPath; var shell = StringBuffer(); var systemPath = '$userPath/.config/systemd/user'; shell.write('cd $systemPath && '); @@ -281,7 +282,7 @@ Set WshShell = Nothing var c = Completer(); //For Windows 8, 10 var exist = false; - var userPath = Platform.environment['UserProfile']; + var userPath = await Path.userPath; var startupDir = Directory('$userPath$windowsStartupPath'); var files = startupDir.listSync(); for (var fileEntry in files) { diff --git a/lib/utils/path.dart b/lib/utils/path.dart index 8e0dd38..1680970 100644 --- a/lib/utils/path.dart +++ b/lib/utils/path.dart @@ -1,5 +1,6 @@ import 'dart:io'; import 'dart:async'; +import 'package:dart_framework/utils/system_util.dart'; import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart'; @@ -8,7 +9,6 @@ enum FileType { none, file, directory, link } class Path { static Future get userPath async { String path = ''; - var c = Completer(); if(Platform.isWindows) { path = Platform.environment['USERPROFILE'] as String; } else if(Platform.isMacOS || Platform.isLinux) { @@ -16,10 +16,21 @@ class Path { } else if(Platform.isAndroid || Platform.isIOS) { path = (await getApplicationDocumentsDirectory()).path; } - c.complete(path); - return c.future; + return dataFutrue(path); } + static Future get dataPath async { + String path = await userPath; + if (Platform.isMacOS) { + path = '$path/Library/${await projectName}'; + } else if (Platform.isLinux) { + path = '$path/.config/${await projectName}'; + } else if (Platform.isWindows) { + path = '$path/AppData/Local/${await projectName}'; + } + return dataFutrue(path); +} + static String? getParent(String path) { path = getNormal(path); var separator = '/'; diff --git a/lib/utils/system_util.dart b/lib/utils/system_util.dart index 97b8f11..29ede53 100644 --- a/lib/utils/system_util.dart +++ b/lib/utils/system_util.dart @@ -3,22 +3,23 @@ import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; +import 'package:dart_framework/utils/path.dart'; import 'package:yaml/yaml.dart'; import 'package:path/path.dart' as path; -late Future Function() getUserPath; -late Future Function() getProjectName; -late Future Function() getDataPath; - -void initialize() { - getUserPath = getUserPath_; - getProjectName = getProjectName_; - getDataPath = getDataPath_; -} - const int intMax = 0x7FFFFFFFFFFFFFFF; const int intMin = -0x8000000000000000; +String userPath = ''; +String dataPath = ''; +String projectName = ''; + +Future initialize() async { + userPath = await Path.userPath; + dataPath = await Path.dataPath; + projectName = await getProjectName(); +} + Map?> envArguments(List arguments) { var dic = ?>{}; var list = []; @@ -124,43 +125,12 @@ Future readFileByte(String filePath) async { return c.future; } -Future getUserPath_() async { - String home = ''; - Map envVars = Platform.environment; - if (Platform.isMacOS) { - home = envVars['HOME']!; - } else if (Platform.isLinux) { - home = envVars['HOME']!; - } else if (Platform.isWindows) { - home = envVars['UserProfile']!; - } - var c = Completer(); - c.complete(home); - return c.future; -} - -Future getDataPath_() async { - 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()}'; - } - var c = Completer(); - c.complete(path); - return c.future; -} - -Future getProjectName_() async { +Future getProjectName() async { var name = path.dirname(Platform.script.toFilePath(windows: Platform.isWindows)); print(name); if (path.basename(name) == 'bin') { name = path.dirname(name); } - var c = Completer(); - c.complete(path.basename(name)); - return c.future; + return dataFutrue(path.basename(name)); }