add manual full cloud index refresh

This commit is contained in:
ngfchl
2026-07-18 22:38:54 +08:00
parent 432698d0f2
commit 52e331bd11
2 changed files with 33 additions and 0 deletions
+26
View File
@@ -75,6 +75,7 @@ class _SettingsDialogState extends ConsumerState<SettingsDialog> {
Widget build(BuildContext context) {
final cs = ShadTheme.of(context).colorScheme;
final themeState = ref.watch(themeProvider);
final mediaState = ref.watch(mediaLibraryProvider);
return ShadDialog(
title: const Text('设置'),
@@ -235,6 +236,31 @@ class _SettingsDialogState extends ConsumerState<SettingsDialog> {
),
),
),
_SettingsRow(
icon: Icons.refresh_rounded,
label: '全盘文件索引',
child: ShadButton.outline(
size: ShadButtonSize.sm,
onPressed: mediaState.isRefreshingCloudIndex
? null
: () => ref
.read(mediaLibraryProvider.notifier)
.refreshGlobalCloudIndex(force: true),
leading: mediaState.isRefreshingCloudIndex
? SizedBox(
width: 14,
height: 14,
child: CircularProgressIndicator(
strokeWidth: 2,
color: cs.primary,
),
)
: const Icon(Icons.refresh_rounded, size: 15),
child: Text(
mediaState.isRefreshingCloudIndex ? '刷新中' : '立即刷新',
),
),
),
_SettingsRow(
icon: Icons.format_list_numbered_rounded,
label: '默认分页大小',
@@ -41,6 +41,7 @@ class MediaLibraryState {
final List<MediaLibraryItem> items;
final bool isLoading;
final bool isScanning;
final bool isRefreshingCloudIndex;
final MediaLibraryScanProgress progress;
final List<MediaLibraryScanLog> scanLogs;
final String searchQuery;
@@ -53,6 +54,7 @@ class MediaLibraryState {
this.items = const [],
this.isLoading = false,
this.isScanning = false,
this.isRefreshingCloudIndex = false,
this.progress = const MediaLibraryScanProgress(),
this.scanLogs = const [],
this.searchQuery = '',
@@ -87,6 +89,7 @@ class MediaLibraryState {
List<MediaLibraryItem>? items,
bool? isLoading,
bool? isScanning,
bool? isRefreshingCloudIndex,
MediaLibraryScanProgress? progress,
List<MediaLibraryScanLog>? scanLogs,
String? searchQuery,
@@ -103,6 +106,8 @@ class MediaLibraryState {
items: items ?? this.items,
isLoading: isLoading ?? this.isLoading,
isScanning: isScanning ?? this.isScanning,
isRefreshingCloudIndex:
isRefreshingCloudIndex ?? this.isRefreshingCloudIndex,
progress: progress ?? this.progress,
scanLogs: scanLogs ?? this.scanLogs,
searchQuery: searchQuery ?? this.searchQuery,
@@ -586,6 +591,7 @@ class MediaLibraryNotifier extends StateNotifier<MediaLibraryState> {
}
}
_refreshingCloudIndex = true;
state = state.copyWith(isRefreshingCloudIndex: true);
try {
AppLogger.info('CloudIndex', '开始刷新全盘文件索引');
final files = await _allGlobalRemoteFiles();
@@ -605,6 +611,7 @@ class MediaLibraryNotifier extends StateNotifier<MediaLibraryState> {
_appendScanLog('[云盘索引] 刷新失败:$error', isError: true);
} finally {
_refreshingCloudIndex = false;
state = state.copyWith(isRefreshingCloudIndex: false);
_scheduleCloudIndexRefresh(minutes);
}
}