mirror of
https://github.com/immich-app/immich.git
synced 2026-01-20 00:30:54 -08:00
* feat(server): Support camera `make`, `model`, and `lensModel` in Storage Template (#24650) * add support for make, model, lensModel in storage template * no pkg lock * Apply suggestion from @danieldietzler Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> * query and formatting --------- Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> * wip: copy-writing * feat: cutoff date preset options and filter options * fix: don't include iCloud Shared Album * chore: message about excluding shared album assets * feat: show preview in a separate page * feat: show clean up hint modal after success deletion * pr feedback * pr feedback * pr feedback --------- Co-authored-by: Rahul Kumar Saini <rahul-kumar-saini@users.noreply.github.com> Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
46 lines
1.5 KiB
Dart
46 lines
1.5 KiB
Dart
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:immich_mobile/constants/enums.dart';
|
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
|
import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart';
|
|
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
|
import 'package:immich_mobile/repositories/asset_media.repository.dart';
|
|
|
|
final cleanupServiceProvider = Provider<CleanupService>((ref) {
|
|
return CleanupService(ref.watch(localAssetRepository), ref.watch(assetMediaRepositoryProvider));
|
|
});
|
|
|
|
class CleanupService {
|
|
final DriftLocalAssetRepository _localAssetRepository;
|
|
final AssetMediaRepository _assetMediaRepository;
|
|
|
|
const CleanupService(this._localAssetRepository, this._assetMediaRepository);
|
|
|
|
Future<List<LocalAsset>> getRemovalCandidates(
|
|
String userId,
|
|
DateTime cutoffDate, {
|
|
AssetFilterType filterType = AssetFilterType.all,
|
|
bool keepFavorites = true,
|
|
}) {
|
|
return _localAssetRepository.getRemovalCandidates(
|
|
userId,
|
|
cutoffDate,
|
|
filterType: filterType,
|
|
keepFavorites: keepFavorites,
|
|
);
|
|
}
|
|
|
|
Future<int> deleteLocalAssets(List<String> localIds) async {
|
|
if (localIds.isEmpty) {
|
|
return 0;
|
|
}
|
|
|
|
final deletedIds = await _assetMediaRepository.deleteAll(localIds);
|
|
if (deletedIds.isNotEmpty) {
|
|
await _localAssetRepository.delete(deletedIds);
|
|
return deletedIds.length;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|