1
0
forked from Cutlery/immich

fix(mobile): update album date range on add/remove (#8324)

This commit is contained in:
Fynn Petersen-Frey 2024-04-01 06:14:35 +02:00 committed by GitHub
parent fd83280b70
commit 861b72ef04
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -243,12 +243,7 @@ class AlbumService {
} }
} }
await _db.writeTxn(() async { await _updateAssets(album.id, add: successAssets);
await album.assets.update(link: successAssets);
final a = await _db.albums.get(album.id);
// trigger watcher
await _db.albums.put(a!);
});
return AddAssetsResponse( return AddAssetsResponse(
alreadyInAlbum: duplicatedAssets, alreadyInAlbum: duplicatedAssets,
@ -257,11 +252,28 @@ class AlbumService {
} }
} catch (e) { } catch (e) {
debugPrint("Error addAdditionalAssetToAlbum ${e.toString()}"); debugPrint("Error addAdditionalAssetToAlbum ${e.toString()}");
return null;
} }
return null; return null;
} }
Future<void> _updateAssets(
int albumId, {
Iterable<Asset> add = const [],
Iterable<Asset> remove = const [],
}) {
return _db.writeTxn(() async {
final album = await _db.albums.get(albumId);
if (album == null) return;
await album.assets.update(link: add, unlink: remove);
album.startDate =
await album.assets.filter().fileCreatedAtProperty().min();
album.endDate = await album.assets.filter().fileCreatedAtProperty().max();
album.lastModifiedAssetTimestamp =
await album.assets.filter().updatedAtProperty().max();
await _db.albums.put(album);
});
}
Future<bool> addAdditionalUserToAlbum( Future<bool> addAdditionalUserToAlbum(
List<String> sharedUserIds, List<String> sharedUserIds,
Album album, Album album,
@ -342,7 +354,7 @@ class AlbumService {
await _apiService.albumApi.removeUserFromAlbum(album.remoteId!, "me"); await _apiService.albumApi.removeUserFromAlbum(album.remoteId!, "me");
return true; return true;
} catch (e) { } catch (e) {
debugPrint("Error deleteAlbum ${e.toString()}"); debugPrint("Error leaveAlbum ${e.toString()}");
return false; return false;
} }
} }
@ -352,24 +364,25 @@ class AlbumService {
Iterable<Asset> assets, Iterable<Asset> assets,
) async { ) async {
try { try {
await _apiService.albumApi.removeAssetFromAlbum( final response = await _apiService.albumApi.removeAssetFromAlbum(
album.remoteId!, album.remoteId!,
BulkIdsDto( BulkIdsDto(
ids: assets.map((asset) => asset.remoteId!).toList(), ids: assets.map((asset) => asset.remoteId!).toList(),
), ),
); );
await _db.writeTxn(() async { if (response != null) {
await album.assets.update(unlink: assets); final toRemove = response.every((e) => e.success)
final a = await _db.albums.get(album.id); ? assets
// trigger watcher : response
await _db.albums.put(a!); .where((e) => e.success)
}); .map((e) => assets.firstWhere((a) => a.remoteId == e.id));
await _updateAssets(album.id, remove: toRemove);
return true; return true;
}
} catch (e) { } catch (e) {
debugPrint("Error deleteAlbum ${e.toString()}"); debugPrint("Error removeAssetFromAlbum ${e.toString()}");
return false;
} }
return false;
} }
Future<bool> removeUserFromAlbum( Future<bool> removeUserFromAlbum(
@ -413,7 +426,7 @@ class AlbumService {
return true; return true;
} catch (e) { } catch (e) {
debugPrint("Error deleteAlbum ${e.toString()}"); debugPrint("Error changeTitleAlbum ${e.toString()}");
return false; return false;
} }
} }