diff --git a/mobile/lib/interfaces/album.interface.dart b/mobile/lib/interfaces/album.interface.dart index bdf11f18de..cabf2dee53 100644 --- a/mobile/lib/interfaces/album.interface.dart +++ b/mobile/lib/interfaces/album.interface.dart @@ -13,6 +13,7 @@ abstract interface class IAlbumRepository implements IDatabaseRepository { String name, { bool? shared, bool? remote, + bool? owner, }); Future> getAll({ diff --git a/mobile/lib/providers/album/album.provider.dart b/mobile/lib/providers/album/album.provider.dart index 42a87c5176..8c06faaa6a 100644 --- a/mobile/lib/providers/album/album.provider.dart +++ b/mobile/lib/providers/album/album.provider.dart @@ -46,8 +46,18 @@ class AlbumNotifier extends StateNotifier> { ) => _albumService.createAlbum(albumTitle, assets, []); - Future getAlbumByName(String albumName, {bool? remote, bool? shared}) => - _albumService.getAlbumByName(albumName, remote: remote, shared: shared); + Future getAlbumByName( + String albumName, { + bool? remote, + bool? shared, + bool? owner, + }) => + _albumService.getAlbumByName( + albumName, + remote: remote, + shared: shared, + owner: owner, + ); /// Create an album on the server with the same name as the selected album for backup /// First this will check if the album already exists on the server with name @@ -55,7 +65,7 @@ class AlbumNotifier extends StateNotifier> { Future createSyncAlbum( String albumName, ) async { - final album = await getAlbumByName(albumName, remote: true, shared: false); + final album = await getAlbumByName(albumName, remote: true, owner: true); if (album != null) { return; } diff --git a/mobile/lib/repositories/album.repository.dart b/mobile/lib/repositories/album.repository.dart index 2c78e4c238..5016e575b8 100644 --- a/mobile/lib/repositories/album.repository.dart +++ b/mobile/lib/repositories/album.repository.dart @@ -34,11 +34,16 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository { Future create(Album album) => txn(() => db.albums.store(album)); @override - Future getByName(String name, {bool? shared, bool? remote}) { + Future getByName(String name, {bool? shared, bool? remote, bool? owner}) { var query = db.albums.filter().nameEqualTo(name); if (shared != null) { query = query.sharedEqualTo(shared); } + if (owner == true) { + query = query.owner((q) => q.isarIdEqualTo(Store.get(StoreKey.currentUser).isarId)); + } else if (owner == false) { + query = query.owner((q) => q.not().isarIdEqualTo(Store.get(StoreKey.currentUser).isarId)); + } if (remote == true) { query = query.localIdIsNull(); } else if (remote == false) { diff --git a/mobile/lib/services/album.service.dart b/mobile/lib/services/album.service.dart index ba0eb1d898..f36ff7b9f0 100644 --- a/mobile/lib/services/album.service.dart +++ b/mobile/lib/services/album.service.dart @@ -212,7 +212,7 @@ class AlbumService { for (int round = 0;; round++) { final proposedName = "$baseName${round == 0 ? "" : " ($round)"}"; - if (null == await _albumRepository.getByName(proposedName)) { + if (null == await _albumRepository.getByName(proposedName, owner: true)) { return proposedName; } } @@ -408,8 +408,18 @@ class AlbumService { } } - Future getAlbumByName(String name, {bool? remote, bool? shared}) => - _albumRepository.getByName(name, remote: remote, shared: shared); + Future getAlbumByName( + String name, { + bool? remote, + bool? shared, + bool? owner, + }) => + _albumRepository.getByName( + name, + remote: remote, + shared: shared, + owner: owner, + ); /// /// Add the uploaded asset to the selected albums @@ -419,7 +429,7 @@ class AlbumService { List assetIds, ) async { for (final albumName in albumNames) { - Album? album = await getAlbumByName(albumName, remote: true, shared: false); + Album? album = await getAlbumByName(albumName, remote: true, owner: true); album ??= await createAlbum(albumName, []); if (album != null && album.remoteId != null) { await _albumApiRepository.addAssets(album.remoteId!, assetIds);