Support core status check and force restart Optimize proxies page and access page Update flutter and pub dependencies
120 lines
3.1 KiB
Dart
120 lines
3.1 KiB
Dart
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:fl_clash/common/common.dart';
|
|
import 'package:path/path.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
|
|
class AppPath {
|
|
static AppPath? _instance;
|
|
Completer<Directory> dataDir = Completer();
|
|
Completer<Directory> downloadDir = Completer();
|
|
Completer<Directory> tempDir = Completer();
|
|
Completer<Directory> cacheDir = 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);
|
|
});
|
|
getApplicationCacheDirectory().then((value) {
|
|
cacheDir.complete(value);
|
|
});
|
|
}
|
|
|
|
factory AppPath() {
|
|
_instance ??= AppPath._internal();
|
|
return _instance!;
|
|
}
|
|
|
|
String get executableExtension {
|
|
return system.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 homeDirPath = await appPath.homeDirPath;
|
|
return join(homeDirPath, 'FlClash.lock');
|
|
}
|
|
|
|
Future<String> get configFilePath async {
|
|
final homeDirPath = await appPath.homeDirPath;
|
|
return join(homeDirPath, 'config.json');
|
|
}
|
|
|
|
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> getIconsCacheDir() async {
|
|
final directory = await cacheDir.future;
|
|
return join(directory.path, 'icons');
|
|
}
|
|
|
|
Future<String> getProvidersRootPath() async {
|
|
final directory = await profilesPath;
|
|
return join(directory, 'providers');
|
|
}
|
|
|
|
Future<String> getProvidersDirPath(String id) async {
|
|
final directory = await profilesPath;
|
|
return join(directory, 'providers', id);
|
|
}
|
|
|
|
Future<String> getProvidersFilePath(
|
|
String id,
|
|
String type,
|
|
String url,
|
|
) async {
|
|
final directory = await profilesPath;
|
|
return join(directory, 'providers', id, type, url.toMd5());
|
|
}
|
|
|
|
Future<String> get tempPath async {
|
|
final directory = await tempDir.future;
|
|
return directory.path;
|
|
}
|
|
}
|
|
|
|
final appPath = AppPath();
|