add manual full cloud index refresh
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user