Files
MWClash/lib/common/path.dart

95 lines
2.4 KiB
Dart
Raw Normal View History

2024-04-30 23:38:49 +08:00
import 'dart:async';
import 'dart:io';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'constant.dart';
class AppPath {
static AppPath? _instance;
Completer<Directory> dataDir = Completer();
Completer<Directory> downloadDir = Completer();
Completer<Directory> tempDir = Completer();
late String appDirPath;
2024-04-30 23:38:49 +08:00
AppPath._internal() {
appDirPath = join(dirname(Platform.resolvedExecutable));
getApplicationSupportDirectory().then((value) {
dataDir.complete(value);
});
getTemporaryDirectory().then((value) {
tempDir.complete(value);
});
getDownloadsDirectory().then((value) {
downloadDir.complete(value);
});
2024-04-30 23:38:49 +08:00
}
factory AppPath() {
_instance ??= AppPath._internal();
return _instance!;
}
String get executableExtension {
return Platform.isWindows ? ".exe" : "";
}
String get executableDirPath {
final currentExecutablePath = Platform.resolvedExecutable;
return dirname(currentExecutablePath);
}
String get corePath {
return join(executableDirPath, "FlClashCore$executableExtension");
}
String get helperPath {
return join(executableDirPath, "$appHelperService$executableExtension");
}
Future<String> get downloadDirPath async {
final directory = await downloadDir.future;
return directory.path;
}
Future<String> get homeDirPath async {
final directory = await dataDir.future;
2024-04-30 23:38:49 +08:00
return directory.path;
}
Future<String> get lockFilePath async {
final directory = await dataDir.future;
return join(directory.path, "FlClash.lock");
}
Future<String> get sharedPreferencesPath async {
final directory = await dataDir.future;
return join(directory.path, "shared_preferences.json");
}
Future<String> get profilesPath async {
final directory = await dataDir.future;
return join(directory.path, profilesDirectoryName);
2024-04-30 23:38:49 +08:00
}
Future<String?> getProfilePath(String? id) async {
if (id == null) return null;
final directory = await profilesPath;
2024-04-30 23:38:49 +08:00
return join(directory, "$id.yaml");
}
Future<String?> getProvidersPath(String? id) async {
if (id == null) return null;
final directory = await profilesPath;
return join(directory, "providers", id);
}
Future<String> get tempPath async {
final directory = await tempDir.future;
return directory.path;
}
2024-04-30 23:38:49 +08:00
}
final appPath = AppPath();