mirror of
https://github.com/immich-app/immich.git
synced 2024-11-18 19:39:04 -07:00
897d49f734
* refactor serving file function asset service * Remove PhotoViewer for now since it creates a problem in 2.10 * Added error message for wrong decode file and logo for failed to load file * Fixed error when read stream cannot be created and crash server * Added method to get all assets as a raw array * Implemented cleaner way of grouping image * Implemented operation to delete assets in the database * Implemented delete on database operation * Implemented delete on device operation * Fixed issue display wrong information when the auto backup is enabled after deleting all assets
73 lines
2.4 KiB
Dart
73 lines
2.4 KiB
Dart
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:immich_mobile/modules/home/models/delete_asset_response.model.dart';
|
|
import 'package:immich_mobile/modules/home/services/asset.service.dart';
|
|
import 'package:immich_mobile/shared/models/immich_asset.model.dart';
|
|
import 'package:immich_mobile/shared/services/device_info.service.dart';
|
|
import 'package:collection/collection.dart';
|
|
import 'package:intl/intl.dart';
|
|
import 'package:photo_manager/photo_manager.dart';
|
|
|
|
class AssetNotifier extends StateNotifier<List<ImmichAsset>> {
|
|
final AssetService _assetService = AssetService();
|
|
final DeviceInfoService _deviceInfoService = DeviceInfoService();
|
|
|
|
AssetNotifier() : super([]);
|
|
|
|
getAllAsset() async {
|
|
List<ImmichAsset>? allAssets = await _assetService.getAllAsset();
|
|
|
|
if (allAssets != null) {
|
|
allAssets.sortByCompare<DateTime>((e) => DateTime.parse(e.createdAt), (a, b) => b.compareTo(a));
|
|
state = allAssets;
|
|
}
|
|
}
|
|
|
|
clearAllAsset() {
|
|
state = [];
|
|
}
|
|
|
|
deleteAssets(Set<ImmichAsset> deleteAssets) async {
|
|
var deviceInfo = await _deviceInfoService.getDeviceInfo();
|
|
var deviceId = deviceInfo["deviceId"];
|
|
List<String> deleteIdList = [];
|
|
// Delete asset from device
|
|
for (var asset in deleteAssets) {
|
|
// Delete asset on device if present
|
|
if (asset.deviceId == deviceId) {
|
|
AssetEntity? localAsset = await AssetEntity.fromId(asset.deviceAssetId);
|
|
|
|
if (localAsset != null) {
|
|
deleteIdList.add(localAsset.id);
|
|
}
|
|
}
|
|
}
|
|
|
|
final List<String> result = await PhotoManager.editor.deleteWithIds(deleteIdList);
|
|
print(result);
|
|
|
|
// Delete asset on server
|
|
List<DeleteAssetResponse>? deleteAssetResult = await _assetService.deleteAssets(deleteAssets);
|
|
if (deleteAssetResult == null) {
|
|
return;
|
|
}
|
|
|
|
for (var asset in deleteAssetResult) {
|
|
if (asset.status == 'success') {
|
|
state = state.where((immichAsset) => immichAsset.id != asset.id).toList();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
final currentLocalPageProvider = StateProvider<int>((ref) => 0);
|
|
|
|
final assetProvider = StateNotifierProvider<AssetNotifier, List<ImmichAsset>>((ref) {
|
|
return AssetNotifier();
|
|
});
|
|
|
|
final assetGroupByDateTimeProvider = StateProvider((ref) {
|
|
var assetGroup = ref.watch(assetProvider);
|
|
|
|
return assetGroup.groupListsBy((element) => DateFormat('y-MM-dd').format(DateTime.parse(element.createdAt)));
|
|
});
|