Files
app/lib/services/webdav_service.dart
2026-05-15 09:03:09 +08:00

74 lines
2.3 KiB
Dart

import '../data/models/dav_account_model.dart';
import 'api_service.dart';
import '../core/utils/app_logger.dart';
/// WebDAV 服务
class WebdavService {
/// 列出所有 WebDAV 账户
Future<Map<String, dynamic>> listAccounts({
required int pageSize,
String? nextPageToken,
}) async {
final params = <String, dynamic>{
'page_size': pageSize,
...nextPageToken != null ? {'next_page_token': nextPageToken} : {},
};
return await ApiService.instance
.get<Map<String, dynamic>>('/devices/dav', queryParameters: params);
}
/// 创建 WebDAV 账户
Future<DavAccountModel> createAccount({
required String uri,
required String name,
bool? readonly,
bool? proxy,
bool? disableSysFiles,
}) async {
final data = <String, dynamic>{
'uri': uri,
'name': name,
...readonly != null ? {'readonly': readonly} : {},
...proxy != null ? {'proxy': proxy} : {},
...disableSysFiles != null ? {'disable_sys_files': disableSysFiles} : {},
};
final response = await ApiService.instance
.put<Map<String, dynamic>>('/devices/dav', data: data);
// 已经经过 api_service.dart -> _parseResponse 处理过的数据,
// 直接不使用, 不需要 response['data'] 去取
return DavAccountModel.fromJson(response);
}
/// 更新 WebDAV 账户
Future<DavAccountModel> updateAccount({
required String id,
String? uri,
String? name,
bool? readonly,
bool? proxy,
bool? disableSysFiles,
}) async {
final data = <String, dynamic>{
...uri != null ? {'uri': uri} : {},
...name != null ? {'name': name} : {},
...readonly != null ? {'readonly': readonly} : {},
...proxy != null ? {'proxy': proxy} : {},
...disableSysFiles != null ? {'disable_sys_files': disableSysFiles} : {},
};
final response = await ApiService.instance
.patch<Map<String, dynamic>>('/devices/dav/$id', data: data);
AppLogger.d('更新 WebDAV 账户成功: $response');
// 已经经过 api_service.dart -> _parseResponse 处理过的数据,
// 直接不使用, 不需要 response['data'] 去取
return DavAccountModel.fromJson(response);
}
/// 删除 WebDAV 账户
Future<void> deleteAccount(String id) async {
await ApiService.instance.delete<void>('/devices/dav/$id', data: {});
}
}