12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import 'package:flutter/foundation.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();
- final Ref ref;
- AssetNotifier(this.ref) : super([]);
- getAllAsset() async {
- List<ImmichAsset>? allAssets = await _assetService.getAllAsset();
- if (allAssets != null) {
- state = allAssets;
- }
- }
- clearAllAsset() {
- state = [];
- }
- onNewAssetUploaded(ImmichAsset newAsset) {
- state = [...state, newAsset];
- }
- deleteAssets(Set<ImmichAsset> deleteAssets) async {
- var deviceInfo = await _deviceInfoService.getDeviceInfo();
- var deviceId = deviceInfo["deviceId"];
- var deleteIdList = <String>[];
- // Delete asset from device
- for (var asset in deleteAssets) {
- // Delete asset on device if present
- if (asset.deviceId == deviceId) {
- var localAsset = await AssetEntity.fromId(asset.deviceAssetId);
- if (localAsset != null) {
- deleteIdList.add(localAsset.id);
- }
- }
- }
-
- try {
- await PhotoManager.editor.deleteWithIds(deleteIdList);
- } catch (e) {
- debugPrint("Delete asset from device failed: $e");
- }
- // 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 assetProvider =
- StateNotifierProvider<AssetNotifier, List<ImmichAsset>>((ref) {
- return AssetNotifier(ref);
- });
- final assetGroupByDateTimeProvider = StateProvider((ref) {
- var assets = ref.watch(assetProvider);
- assets.sortByCompare<DateTime>(
- (e) => DateTime.parse(e.createdAt), (a, b) => b.compareTo(a));
- return assets.groupListsBy((element) =>
- DateFormat('y-MM-dd').format(DateTime.parse(element.createdAt)));
- });
- final assetGroupByMonthYearProvider = StateProvider((ref) {
- var assets = ref.watch(assetProvider);
- assets.sortByCompare<DateTime>(
- (e) => DateTime.parse(e.createdAt), (a, b) => b.compareTo(a));
- return assets.groupListsBy((element) =>
- DateFormat('MMMM, y').format(DateTime.parse(element.createdAt)));
- });
|