Support core status check and force restart Optimize proxies page and access page Update flutter and pub dependencies Update go version Optimize more details
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();
|