metadata读取能力已达成,接下来会顺着路径完成部分缓存指针设计
This commit is contained in:
@@ -1,11 +1,57 @@
|
||||
// lib/metadata/file_provider.dart
|
||||
import 'dart:io';
|
||||
import 'package:flutter/foundation.dart'; // ⭐ 添加
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import '../services/webdav_service.dart';
|
||||
|
||||
abstract class FileProvider {
|
||||
/// 获取文件,如果是远程文件则先下载到本地缓存
|
||||
Future<File?> getFile(String url);
|
||||
}
|
||||
|
||||
class WebDAVFileProvider implements FileProvider {
|
||||
final Dio _dio = Dio();
|
||||
|
||||
@override
|
||||
Future<File?> getFile(String url) async {
|
||||
try {
|
||||
// 1. 获取缓存目录
|
||||
final cacheDir = await getTemporaryDirectory();
|
||||
final cachePath = '${cacheDir.path}/metadata_${url.hashCode}.tmp';
|
||||
final cacheFile = File(cachePath);
|
||||
|
||||
// 2. 如果缓存存在且未过期,直接返回
|
||||
if (await cacheFile.exists()) {
|
||||
final stat = await cacheFile.stat();
|
||||
// 缓存 1 小时内有效(86400 秒)
|
||||
if (DateTime.now().difference(stat.modified).inSeconds < 86400) {
|
||||
return cacheFile;
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 获取认证头
|
||||
final headers = await WebDAVService.instance.getAuthHeaders();
|
||||
if (headers.isEmpty) return null;
|
||||
|
||||
// 4. 只下载前 1MB
|
||||
await _dio.download(
|
||||
url,
|
||||
cachePath,
|
||||
options: Options(
|
||||
headers: headers,
|
||||
receiveTimeout: const Duration(seconds: 10),
|
||||
sendTimeout: const Duration(seconds: 10),
|
||||
),
|
||||
);
|
||||
|
||||
return cacheFile;
|
||||
} catch (e) {
|
||||
debugPrint('⚠️ [WebDAVFileProvider] download failed: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class LocalFileProvider implements FileProvider {
|
||||
@override
|
||||
Future<File?> getFile(String url) async {
|
||||
@@ -16,13 +62,3 @@ class LocalFileProvider implements FileProvider {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class WebDAVFileProvider implements FileProvider {
|
||||
@override
|
||||
Future<File?> getFile(String url) async {
|
||||
// 🔴 第一阶段:先不实现下载,返回 null
|
||||
// 这样 WebDAV 文件会 fallback 到文件名
|
||||
// 等核心播放逻辑稳定后,再实现真正的下载缓存
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user