Add geo assets settings
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dartx/dartx.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:hiddify/domain/constants.dart';
|
||||
import 'package:hiddify/domain/rules/geo_asset.dart';
|
||||
import 'package:hiddify/gen/assets.gen.dart';
|
||||
import 'package:hiddify/services/platform_services.dart';
|
||||
import 'package:hiddify/utils/utils.dart';
|
||||
@@ -26,6 +28,9 @@ class FilesEditorService with InfraLogger {
|
||||
Directory(p.join(workingDir.path, Constants.configsFolderName));
|
||||
Directory get logsDir => dirs.workingDir;
|
||||
|
||||
Directory get geoAssetsDir =>
|
||||
Directory(p.join(workingDir.path, "geo-assets"));
|
||||
|
||||
File get appLogsFile => File(p.join(logsDir.path, "app.log"));
|
||||
File get coreLogsFile => File(p.join(logsDir.path, "box.log"));
|
||||
|
||||
@@ -48,6 +53,9 @@ class FilesEditorService with InfraLogger {
|
||||
if (!await configsDir.exists()) {
|
||||
await configsDir.create(recursive: true);
|
||||
}
|
||||
if (!await geoAssetsDir.exists()) {
|
||||
await geoAssetsDir.create(recursive: true);
|
||||
}
|
||||
|
||||
if (await appLogsFile.exists()) {
|
||||
await appLogsFile.writeAsString("");
|
||||
@@ -77,6 +85,20 @@ class FilesEditorService with InfraLogger {
|
||||
return p.join(configsDir.path, "$fileName.json");
|
||||
}
|
||||
|
||||
String geoAssetPath(String providerName, String fileName) {
|
||||
final prefix = providerName.replaceAll("/", "-").toLowerCase();
|
||||
return p.join(
|
||||
geoAssetsDir.path,
|
||||
"$prefix${prefix.isBlank ? "" : "-"}$fileName",
|
||||
);
|
||||
}
|
||||
|
||||
/// geoasset's path relative to working directory
|
||||
String geoAssetRelativePath(String providerName, String fileName) {
|
||||
final fullPath = geoAssetPath(providerName, fileName);
|
||||
return p.relative(fullPath, from: workingDir.path);
|
||||
}
|
||||
|
||||
String tempConfigPath(String fileName) => configPath("temp_$fileName");
|
||||
|
||||
Future<void> deleteConfig(String fileName) {
|
||||
@@ -85,16 +107,18 @@ class FilesEditorService with InfraLogger {
|
||||
|
||||
Future<void> _populateGeoAssets() async {
|
||||
loggy.debug('populating geo assets');
|
||||
final geoipPath = p.join(workingDir.path, Constants.geoipFileName);
|
||||
final geoipPath =
|
||||
geoAssetPath(defaultGeoip.providerName, defaultGeoip.fileName);
|
||||
if (!await File(geoipPath).exists()) {
|
||||
final defaultGeoip = await rootBundle.load(Assets.core.geoip);
|
||||
await File(geoipPath).writeAsBytes(defaultGeoip.buffer.asInt8List());
|
||||
final bundledGeoip = await rootBundle.load(Assets.core.geoip);
|
||||
await File(geoipPath).writeAsBytes(bundledGeoip.buffer.asInt8List());
|
||||
}
|
||||
|
||||
final geositePath = p.join(workingDir.path, Constants.geositeFileName);
|
||||
final geositePath =
|
||||
geoAssetPath(defaultGeosite.providerName, defaultGeosite.fileName);
|
||||
if (!await File(geositePath).exists()) {
|
||||
final defaultGeosite = await rootBundle.load(Assets.core.geosite);
|
||||
await File(geositePath).writeAsBytes(defaultGeosite.buffer.asInt8List());
|
||||
final bundledGeosite = await rootBundle.load(Assets.core.geosite);
|
||||
await File(geositePath).writeAsBytes(bundledGeosite.buffer.asInt8List());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user