mirror of
https://github.com/immich-app/immich.git
synced 2025-12-12 07:41:02 -08:00
Compare commits
2 Commits
feat/plugi
...
sqlite-rem
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
377b886bd6 | ||
|
|
5d99eabe05 |
@@ -326,12 +326,16 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository {
|
|||||||
|
|
||||||
return transaction(() async {
|
return transaction(() async {
|
||||||
if (assetsToUnLink.isNotEmpty) {
|
if (assetsToUnLink.isNotEmpty) {
|
||||||
await _db.batch(
|
await _db.batch((batch) {
|
||||||
(batch) => batch.deleteWhere(
|
for (final assetToUnLink in assetsToUnLink) {
|
||||||
_db.localAlbumAssetEntity,
|
batch.deleteWhere(
|
||||||
(f) => f.assetId.isIn(assetsToUnLink) & f.albumId.equals(albumId),
|
_db.localAlbumAssetEntity,
|
||||||
),
|
(row) =>
|
||||||
);
|
row.assetId.equals(assetToUnLink) &
|
||||||
|
row.albumId.equals(albumId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
await _deleteAssets(assetsToDelete);
|
await _deleteAssets(assetsToDelete);
|
||||||
@@ -359,7 +363,9 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return _db.batch((batch) {
|
return _db.batch((batch) {
|
||||||
batch.deleteWhere(_db.localAssetEntity, (f) => f.id.isIn(ids));
|
for (final id in ids) {
|
||||||
|
batch.deleteWhere(_db.localAssetEntity, (row) => row.id.equals(id));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:collection/collection.dart';
|
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.dart';
|
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.dart';
|
||||||
@@ -46,13 +45,9 @@ class DriftLocalAssetRepository extends DriftDatabaseRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> delete(List<String> ids) {
|
Future<void> delete(List<String> ids) {
|
||||||
if (ids.isEmpty) {
|
|
||||||
return Future.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
return _db.batch((batch) {
|
return _db.batch((batch) {
|
||||||
for (final slice in ids.slices(32000)) {
|
for (final id in ids) {
|
||||||
batch.deleteWhere(_db.localAssetEntity, (e) => e.id.isIn(slice));
|
batch.deleteWhere(_db.localAssetEntity, (e) => e.id.equals(id));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,10 +121,15 @@ class DriftRemoteAlbumRepository extends DriftDatabaseRepository {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> removeAssets(String albumId, List<String> assetIds) {
|
Future<void> removeAssets(String albumId, List<String> assetIds) {
|
||||||
return _db.remoteAlbumAssetEntity.deleteWhere(
|
return _db.batch((batch) {
|
||||||
(tbl) => tbl.albumId.equals(albumId) & tbl.assetId.isIn(assetIds),
|
for (final assetId in assetIds) {
|
||||||
);
|
batch.deleteWhere(
|
||||||
|
_db.remoteAlbumAssetEntity,
|
||||||
|
(row) => row.albumId.equals(albumId) & row.assetId.equals(assetId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<(DateTime, DateTime)> getDateRange(String albumId) {
|
FutureOr<(DateTime, DateTime)> getDateRange(String albumId) {
|
||||||
@@ -160,6 +165,7 @@ class DriftRemoteAlbumRepository extends DriftDatabaseRepository {
|
|||||||
|
|
||||||
final userIds = albumUserRows.map((row) => row.userId);
|
final userIds = albumUserRows.map((row) => row.userId);
|
||||||
|
|
||||||
|
// TODO: remove this isIn() after removing UserDto
|
||||||
return (_db.select(_db.userEntity)..where((row) => row.id.isIn(userIds)))
|
return (_db.select(_db.userEntity)..where((row) => row.id.isIn(userIds)))
|
||||||
.map(
|
.map(
|
||||||
(user) => UserDto(
|
(user) => UserDto(
|
||||||
|
|||||||
@@ -129,7 +129,14 @@ class RemoteAssetRepository extends DriftDatabaseRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> delete(List<String> ids) {
|
Future<void> delete(List<String> ids) {
|
||||||
return _db.remoteAssetEntity.deleteWhere((row) => row.id.isIn(ids));
|
return _db.batch((batch) {
|
||||||
|
for (final id in ids) {
|
||||||
|
batch.deleteWhere(
|
||||||
|
_db.remoteAssetEntity,
|
||||||
|
(row) => row.id.equals(id),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateLocation(List<String> ids, LatLng location) {
|
Future<void> updateLocation(List<String> ids, LatLng location) {
|
||||||
|
|||||||
@@ -29,8 +29,14 @@ class SyncStreamRepository extends DriftDatabaseRepository {
|
|||||||
|
|
||||||
Future<void> deleteUsersV1(Iterable<SyncUserDeleteV1> data) async {
|
Future<void> deleteUsersV1(Iterable<SyncUserDeleteV1> data) async {
|
||||||
try {
|
try {
|
||||||
await _db.userEntity
|
await _db.batch((batch) {
|
||||||
.deleteWhere((row) => row.id.isIn(data.map((e) => e.userId)));
|
for (final user in data) {
|
||||||
|
batch.deleteWhere(
|
||||||
|
_db.userEntity,
|
||||||
|
(row) => row.id.equals(user.userId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
} catch (error, stack) {
|
} catch (error, stack) {
|
||||||
_logger.severe('Error: SyncUserDeleteV1', error, stack);
|
_logger.severe('Error: SyncUserDeleteV1', error, stack);
|
||||||
rethrow;
|
rethrow;
|
||||||
@@ -106,9 +112,14 @@ class SyncStreamRepository extends DriftDatabaseRepository {
|
|||||||
String debugLabel = 'user',
|
String debugLabel = 'user',
|
||||||
}) async {
|
}) async {
|
||||||
try {
|
try {
|
||||||
await _db.remoteAssetEntity.deleteWhere(
|
await _db.batch((batch) {
|
||||||
(row) => row.id.isIn(data.map((e) => e.assetId)),
|
for (final asset in data) {
|
||||||
);
|
batch.deleteWhere(
|
||||||
|
_db.remoteAssetEntity,
|
||||||
|
(row) => row.id.equals(asset.assetId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
} catch (error, stack) {
|
} catch (error, stack) {
|
||||||
_logger.severe('Error: deleteAssetsV1 - $debugLabel', error, stack);
|
_logger.severe('Error: deleteAssetsV1 - $debugLabel', error, stack);
|
||||||
rethrow;
|
rethrow;
|
||||||
@@ -202,9 +213,14 @@ class SyncStreamRepository extends DriftDatabaseRepository {
|
|||||||
|
|
||||||
Future<void> deleteAlbumsV1(Iterable<SyncAlbumDeleteV1> data) async {
|
Future<void> deleteAlbumsV1(Iterable<SyncAlbumDeleteV1> data) async {
|
||||||
try {
|
try {
|
||||||
await _db.remoteAlbumEntity.deleteWhere(
|
await _db.batch((batch) {
|
||||||
(row) => row.id.isIn(data.map((e) => e.albumId)),
|
for (final album in data) {
|
||||||
);
|
batch.deleteWhere(
|
||||||
|
_db.remoteAlbumEntity,
|
||||||
|
(row) => row.id.equals(album.albumId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
} catch (error, stack) {
|
} catch (error, stack) {
|
||||||
_logger.severe('Error: deleteAlbumsV1', error, stack);
|
_logger.severe('Error: deleteAlbumsV1', error, stack);
|
||||||
rethrow;
|
rethrow;
|
||||||
@@ -371,9 +387,14 @@ class SyncStreamRepository extends DriftDatabaseRepository {
|
|||||||
|
|
||||||
Future<void> deleteMemoriesV1(Iterable<SyncMemoryDeleteV1> data) async {
|
Future<void> deleteMemoriesV1(Iterable<SyncMemoryDeleteV1> data) async {
|
||||||
try {
|
try {
|
||||||
await _db.memoryEntity.deleteWhere(
|
await _db.batch((batch) {
|
||||||
(row) => row.id.isIn(data.map((e) => e.memoryId)),
|
for (final memory in data) {
|
||||||
);
|
batch.deleteWhere(
|
||||||
|
_db.memoryEntity,
|
||||||
|
(row) => row.id.equals(memory.memoryId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
} catch (error, stack) {
|
} catch (error, stack) {
|
||||||
_logger.severe('Error: deleteMemoriesV1', error, stack);
|
_logger.severe('Error: deleteMemoriesV1', error, stack);
|
||||||
rethrow;
|
rethrow;
|
||||||
@@ -455,9 +476,14 @@ class SyncStreamRepository extends DriftDatabaseRepository {
|
|||||||
String debugLabel = 'user',
|
String debugLabel = 'user',
|
||||||
}) async {
|
}) async {
|
||||||
try {
|
try {
|
||||||
await _db.stackEntity.deleteWhere(
|
await _db.batch((batch) {
|
||||||
(row) => row.id.isIn(data.map((e) => e.stackId)),
|
for (final stack in data) {
|
||||||
);
|
batch.deleteWhere(
|
||||||
|
_db.stackEntity,
|
||||||
|
(row) => row.id.equals(stack.stackId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
} catch (error, stack) {
|
} catch (error, stack) {
|
||||||
_logger.severe('Error: deleteStacksV1 - $debugLabel', error, stack);
|
_logger.severe('Error: deleteStacksV1 - $debugLabel', error, stack);
|
||||||
rethrow;
|
rethrow;
|
||||||
|
|||||||
@@ -155,14 +155,12 @@ class ActionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<int> removeFromAlbum(List<String> remoteIds, String albumId) async {
|
Future<int> removeFromAlbum(List<String> remoteIds, String albumId) async {
|
||||||
int removedCount = 0;
|
|
||||||
final result = await _albumApiRepository.removeAssets(albumId, remoteIds);
|
final result = await _albumApiRepository.removeAssets(albumId, remoteIds);
|
||||||
|
|
||||||
if (result.removed.isNotEmpty) {
|
if (result.removed.isNotEmpty) {
|
||||||
removedCount =
|
await _remoteAlbumRepository.removeAssets(albumId, result.removed);
|
||||||
await _remoteAlbumRepository.removeAssets(albumId, result.removed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return removedCount;
|
return result.removed.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user