Files
FlClash/lib/common/dav_client.dart
T

48 lines
1.2 KiB
Dart
Raw Normal View History

2024-05-20 15:15:09 +08:00
import 'dart:async';
import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/models/models.dart';
import 'package:webdav_client/webdav_client.dart';
class DAVClient {
late Client client;
Completer<bool> pingCompleter = Completer();
2024-09-05 08:59:45 +08:00
late String fileName;
2024-05-20 15:15:09 +08:00
2025-12-16 11:23:09 +08:00
DAVClient(DAVProps dav) {
client = newClient(dav.uri, user: dav.user, password: dav.password);
2024-09-05 08:59:45 +08:00
fileName = dav.fileName;
2025-12-16 11:23:09 +08:00
client.setHeaders({'accept-charset': 'utf-8', 'Content-Type': 'text/xml'});
2024-05-20 15:15:09 +08:00
client.setConnectTimeout(8000);
2024-12-03 21:47:12 +08:00
client.setSendTimeout(60000);
client.setReceiveTimeout(60000);
2024-05-20 15:15:09 +08:00
pingCompleter.complete(_ping());
}
Future<bool> _ping() async {
try {
await client.ping();
return true;
} catch (_) {
return false;
}
}
2025-06-07 01:48:34 +08:00
String get root => '/$appName';
2024-05-20 15:15:09 +08:00
2025-06-07 01:48:34 +08:00
String get backupFile => '$root/$fileName';
2024-05-20 15:15:09 +08:00
2025-12-16 11:23:09 +08:00
Future<bool> backup(String localFilePath) async {
2025-06-07 01:48:34 +08:00
await client.mkdir(root);
2025-12-16 11:23:09 +08:00
await client.writeFromFile(localFilePath, backupFile);
2024-05-20 15:15:09 +08:00
return true;
}
2025-12-16 11:23:09 +08:00
Future<bool> restore() async {
2025-06-07 01:48:34 +08:00
await client.mkdir(root);
2025-12-16 11:23:09 +08:00
final backupFilePath = await appPath.backupFilePath;
await client.read2File(backupFile, backupFilePath);
return true;
2024-05-20 15:15:09 +08:00
}
}