0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2025-03-18 02:31:28 -05:00
immich/mobile/lib/providers/folder.provider.dart

63 lines
2 KiB
Dart
Raw Permalink Normal View History

import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/constants/enums.dart';
import 'package:immich_mobile/models/folder/root_folder.model.dart';
import 'package:immich_mobile/services/folder.service.dart';
import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
import 'package:logging/logging.dart';
class FolderStructureNotifier extends StateNotifier<AsyncValue<RootFolder>> {
final FolderService _folderService;
final Logger _log = Logger("FolderStructureNotifier");
FolderStructureNotifier(this._folderService) : super(const AsyncLoading());
Future<void> fetchFolders(SortOrder order) async {
try {
final folders = await _folderService.getFolderStructure(order);
state = AsyncData(folders);
} catch (e, stack) {
_log.severe("Failed to build folder structure", e, stack);
state = AsyncError(e, stack);
}
}
}
final folderStructureProvider =
StateNotifierProvider<FolderStructureNotifier, AsyncValue<RootFolder>>(
(ref) {
return FolderStructureNotifier(
ref.watch(folderServiceProvider),
);
});
class FolderRenderListNotifier extends StateNotifier<AsyncValue<RenderList>> {
final FolderService _folderService;
final RootFolder _folder;
final Logger _log = Logger("FolderAssetsNotifier");
FolderRenderListNotifier(this._folderService, this._folder)
: super(const AsyncLoading());
Future<void> fetchAssets(SortOrder order) async {
try {
final assets = await _folderService.getFolderAssets(_folder, order);
final renderList =
await RenderList.fromAssets(assets, GroupAssetsBy.none);
state = AsyncData(renderList);
} catch (e, stack) {
_log.severe("Failed to fetch folder assets", e, stack);
state = AsyncError(e, stack);
}
}
}
final folderRenderListProvider = StateNotifierProvider.family<
FolderRenderListNotifier,
AsyncValue<RenderList>,
RootFolder>((ref, folder) {
return FolderRenderListNotifier(
ref.watch(folderServiceProvider),
folder,
);
});