Support proxies search Add some scenes auto close connections Update core Optimize more details
101 lines
2.4 KiB
Dart
101 lines
2.4 KiB
Dart
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;
|
|
|
|
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);
|
|
});
|
|
}
|
|
|
|
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;
|
|
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);
|
|
}
|
|
|
|
Future<String> getProfilePath(String id) async {
|
|
final directory = await profilesPath;
|
|
return join(directory, "$id.yaml");
|
|
}
|
|
|
|
Future<String> getProvidersPath(String id, {String filePath = ""}) async {
|
|
final directory = await profilesPath;
|
|
final path = join(
|
|
directory,
|
|
"providers",
|
|
id,
|
|
);
|
|
if (filePath.isNotEmpty) {
|
|
return join(path, filePath);
|
|
}
|
|
return path;
|
|
}
|
|
|
|
Future<String> get tempPath async {
|
|
final directory = await tempDir.future;
|
|
return directory.path;
|
|
}
|
|
}
|
|
|
|
final appPath = AppPath();
|