mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	* refactor(server): delete assets endpoint * fix: formatting * chore: cleanup * chore: open api * chore(mobile): replace DeleteAssetDTO with BulkIdsDTOs * feat: trash an asset * chore(server): formatting * chore: open api * chore: wording * chore: open-api * feat(server): add withDeleted to getAssets queries * WIP: mobile-recycle-bin * feat(server): recycle-bin to system config * feat(web): use recycle-bin system config * chore(server): domain assetcore removed * chore(server): rename recycle-bin to trash * chore(web): rename recycle-bin to trash * chore(server): always send soft deleted assets for getAllByUserId * chore(web): formatting * feat(server): permanent delete assets older than trashed period * feat(web): trash empty placeholder image * feat(server): empty trash * feat(web): empty trash * WIP: mobile-recycle-bin * refactor(server): empty / restore trash to separate endpoint * test(server): handle failures * test(server): fix e2e server-info test * test(server): deletion test refactor * feat(mobile): use map settings from server-config to enable / disable map * feat(mobile): trash asset * fix(server): operations on assets in trash * feat(web): show trash statistics * fix(web): handle trash enabled * fix(mobile): restore updates from trash * fix(server): ignore trashed assets for person * fix(server): add / remove search index when trashed / restored * chore(web): format * fix(server): asset service test * fix(server): include trashed assts for duplicates from uploads * feat(mobile): no dialog for trash, always dialog for permanent delete * refactor(mobile): use isar where instead of dart filter * refactor(mobile): asset provide - handle deletes in single db txn * chore(mobile): review changes * feat(web): confirmation before empty trash * server: review changes * fix(server): handle library changes * fix: filter external assets from getting trashed / deleted * fix(server): empty-bin * feat: broadcast config update events through ws * change order of trash button on mobile * styling * fix(mobile): do not show trashed toast for local only assets --------- Co-authored-by: Jason Rasmussen <jrasm91@gmail.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
		
			
				
	
	
		
			349 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
		
			Generated
		
	
	
			
		
		
	
	
			349 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
		
			Generated
		
	
	
| //
 | |
| // AUTO-GENERATED FILE, DO NOT MODIFY!
 | |
| //
 | |
| // @dart=2.12
 | |
| 
 | |
| // ignore_for_file: unused_element, unused_import
 | |
| // ignore_for_file: always_put_required_named_parameters_first
 | |
| // ignore_for_file: constant_identifier_names
 | |
| // ignore_for_file: lines_longer_than_80_chars
 | |
| 
 | |
| part of openapi.api;
 | |
| 
 | |
| class AssetResponseDto {
 | |
|   /// Returns a new [AssetResponseDto] instance.
 | |
|   AssetResponseDto({
 | |
|     required this.checksum,
 | |
|     required this.deviceAssetId,
 | |
|     required this.deviceId,
 | |
|     required this.duration,
 | |
|     this.exifInfo,
 | |
|     required this.fileCreatedAt,
 | |
|     required this.fileModifiedAt,
 | |
|     required this.id,
 | |
|     required this.isArchived,
 | |
|     required this.isExternal,
 | |
|     required this.isFavorite,
 | |
|     required this.isOffline,
 | |
|     required this.isReadOnly,
 | |
|     required this.isTrashed,
 | |
|     required this.libraryId,
 | |
|     this.livePhotoVideoId,
 | |
|     required this.localDateTime,
 | |
|     required this.originalFileName,
 | |
|     required this.originalPath,
 | |
|     this.owner,
 | |
|     required this.ownerId,
 | |
|     this.people = const [],
 | |
|     required this.resized,
 | |
|     this.smartInfo,
 | |
|     this.tags = const [],
 | |
|     required this.thumbhash,
 | |
|     required this.type,
 | |
|     required this.updatedAt,
 | |
|   });
 | |
| 
 | |
|   /// base64 encoded sha1 hash
 | |
|   String checksum;
 | |
| 
 | |
|   String deviceAssetId;
 | |
| 
 | |
|   String deviceId;
 | |
| 
 | |
|   String duration;
 | |
| 
 | |
|   ///
 | |
|   /// Please note: This property should have been non-nullable! Since the specification file
 | |
|   /// does not include a default value (using the "default:" property), however, the generated
 | |
|   /// source code must fall back to having a nullable type.
 | |
|   /// Consider adding a "default:" property in the specification file to hide this note.
 | |
|   ///
 | |
|   ExifResponseDto? exifInfo;
 | |
| 
 | |
|   DateTime fileCreatedAt;
 | |
| 
 | |
|   DateTime fileModifiedAt;
 | |
| 
 | |
|   String id;
 | |
| 
 | |
|   bool isArchived;
 | |
| 
 | |
|   bool isExternal;
 | |
| 
 | |
|   bool isFavorite;
 | |
| 
 | |
|   bool isOffline;
 | |
| 
 | |
|   bool isReadOnly;
 | |
| 
 | |
|   bool isTrashed;
 | |
| 
 | |
|   String libraryId;
 | |
| 
 | |
|   String? livePhotoVideoId;
 | |
| 
 | |
|   DateTime localDateTime;
 | |
| 
 | |
|   String originalFileName;
 | |
| 
 | |
|   String originalPath;
 | |
| 
 | |
|   ///
 | |
|   /// Please note: This property should have been non-nullable! Since the specification file
 | |
|   /// does not include a default value (using the "default:" property), however, the generated
 | |
|   /// source code must fall back to having a nullable type.
 | |
|   /// Consider adding a "default:" property in the specification file to hide this note.
 | |
|   ///
 | |
|   UserResponseDto? owner;
 | |
| 
 | |
|   String ownerId;
 | |
| 
 | |
|   List<PersonResponseDto> people;
 | |
| 
 | |
|   bool resized;
 | |
| 
 | |
|   ///
 | |
|   /// Please note: This property should have been non-nullable! Since the specification file
 | |
|   /// does not include a default value (using the "default:" property), however, the generated
 | |
|   /// source code must fall back to having a nullable type.
 | |
|   /// Consider adding a "default:" property in the specification file to hide this note.
 | |
|   ///
 | |
|   SmartInfoResponseDto? smartInfo;
 | |
| 
 | |
|   List<TagResponseDto> tags;
 | |
| 
 | |
|   /// base64 encoded thumbhash
 | |
|   String? thumbhash;
 | |
| 
 | |
|   AssetTypeEnum type;
 | |
| 
 | |
|   DateTime updatedAt;
 | |
| 
 | |
|   @override
 | |
|   bool operator ==(Object other) => identical(this, other) || other is AssetResponseDto &&
 | |
|      other.checksum == checksum &&
 | |
|      other.deviceAssetId == deviceAssetId &&
 | |
|      other.deviceId == deviceId &&
 | |
|      other.duration == duration &&
 | |
|      other.exifInfo == exifInfo &&
 | |
|      other.fileCreatedAt == fileCreatedAt &&
 | |
|      other.fileModifiedAt == fileModifiedAt &&
 | |
|      other.id == id &&
 | |
|      other.isArchived == isArchived &&
 | |
|      other.isExternal == isExternal &&
 | |
|      other.isFavorite == isFavorite &&
 | |
|      other.isOffline == isOffline &&
 | |
|      other.isReadOnly == isReadOnly &&
 | |
|      other.isTrashed == isTrashed &&
 | |
|      other.libraryId == libraryId &&
 | |
|      other.livePhotoVideoId == livePhotoVideoId &&
 | |
|      other.localDateTime == localDateTime &&
 | |
|      other.originalFileName == originalFileName &&
 | |
|      other.originalPath == originalPath &&
 | |
|      other.owner == owner &&
 | |
|      other.ownerId == ownerId &&
 | |
|      other.people == people &&
 | |
|      other.resized == resized &&
 | |
|      other.smartInfo == smartInfo &&
 | |
|      other.tags == tags &&
 | |
|      other.thumbhash == thumbhash &&
 | |
|      other.type == type &&
 | |
|      other.updatedAt == updatedAt;
 | |
| 
 | |
|   @override
 | |
|   int get hashCode =>
 | |
|     // ignore: unnecessary_parenthesis
 | |
|     (checksum.hashCode) +
 | |
|     (deviceAssetId.hashCode) +
 | |
|     (deviceId.hashCode) +
 | |
|     (duration.hashCode) +
 | |
|     (exifInfo == null ? 0 : exifInfo!.hashCode) +
 | |
|     (fileCreatedAt.hashCode) +
 | |
|     (fileModifiedAt.hashCode) +
 | |
|     (id.hashCode) +
 | |
|     (isArchived.hashCode) +
 | |
|     (isExternal.hashCode) +
 | |
|     (isFavorite.hashCode) +
 | |
|     (isOffline.hashCode) +
 | |
|     (isReadOnly.hashCode) +
 | |
|     (isTrashed.hashCode) +
 | |
|     (libraryId.hashCode) +
 | |
|     (livePhotoVideoId == null ? 0 : livePhotoVideoId!.hashCode) +
 | |
|     (localDateTime.hashCode) +
 | |
|     (originalFileName.hashCode) +
 | |
|     (originalPath.hashCode) +
 | |
|     (owner == null ? 0 : owner!.hashCode) +
 | |
|     (ownerId.hashCode) +
 | |
|     (people.hashCode) +
 | |
|     (resized.hashCode) +
 | |
|     (smartInfo == null ? 0 : smartInfo!.hashCode) +
 | |
|     (tags.hashCode) +
 | |
|     (thumbhash == null ? 0 : thumbhash!.hashCode) +
 | |
|     (type.hashCode) +
 | |
|     (updatedAt.hashCode);
 | |
| 
 | |
|   @override
 | |
|   String toString() => 'AssetResponseDto[checksum=$checksum, deviceAssetId=$deviceAssetId, deviceId=$deviceId, duration=$duration, exifInfo=$exifInfo, fileCreatedAt=$fileCreatedAt, fileModifiedAt=$fileModifiedAt, id=$id, isArchived=$isArchived, isExternal=$isExternal, isFavorite=$isFavorite, isOffline=$isOffline, isReadOnly=$isReadOnly, isTrashed=$isTrashed, libraryId=$libraryId, livePhotoVideoId=$livePhotoVideoId, localDateTime=$localDateTime, originalFileName=$originalFileName, originalPath=$originalPath, owner=$owner, ownerId=$ownerId, people=$people, resized=$resized, smartInfo=$smartInfo, tags=$tags, thumbhash=$thumbhash, type=$type, updatedAt=$updatedAt]';
 | |
| 
 | |
|   Map<String, dynamic> toJson() {
 | |
|     final json = <String, dynamic>{};
 | |
|       json[r'checksum'] = this.checksum;
 | |
|       json[r'deviceAssetId'] = this.deviceAssetId;
 | |
|       json[r'deviceId'] = this.deviceId;
 | |
|       json[r'duration'] = this.duration;
 | |
|     if (this.exifInfo != null) {
 | |
|       json[r'exifInfo'] = this.exifInfo;
 | |
|     } else {
 | |
|     //  json[r'exifInfo'] = null;
 | |
|     }
 | |
|       json[r'fileCreatedAt'] = this.fileCreatedAt.toUtc().toIso8601String();
 | |
|       json[r'fileModifiedAt'] = this.fileModifiedAt.toUtc().toIso8601String();
 | |
|       json[r'id'] = this.id;
 | |
|       json[r'isArchived'] = this.isArchived;
 | |
|       json[r'isExternal'] = this.isExternal;
 | |
|       json[r'isFavorite'] = this.isFavorite;
 | |
|       json[r'isOffline'] = this.isOffline;
 | |
|       json[r'isReadOnly'] = this.isReadOnly;
 | |
|       json[r'isTrashed'] = this.isTrashed;
 | |
|       json[r'libraryId'] = this.libraryId;
 | |
|     if (this.livePhotoVideoId != null) {
 | |
|       json[r'livePhotoVideoId'] = this.livePhotoVideoId;
 | |
|     } else {
 | |
|     //  json[r'livePhotoVideoId'] = null;
 | |
|     }
 | |
|       json[r'localDateTime'] = this.localDateTime.toUtc().toIso8601String();
 | |
|       json[r'originalFileName'] = this.originalFileName;
 | |
|       json[r'originalPath'] = this.originalPath;
 | |
|     if (this.owner != null) {
 | |
|       json[r'owner'] = this.owner;
 | |
|     } else {
 | |
|     //  json[r'owner'] = null;
 | |
|     }
 | |
|       json[r'ownerId'] = this.ownerId;
 | |
|       json[r'people'] = this.people;
 | |
|       json[r'resized'] = this.resized;
 | |
|     if (this.smartInfo != null) {
 | |
|       json[r'smartInfo'] = this.smartInfo;
 | |
|     } else {
 | |
|     //  json[r'smartInfo'] = null;
 | |
|     }
 | |
|       json[r'tags'] = this.tags;
 | |
|     if (this.thumbhash != null) {
 | |
|       json[r'thumbhash'] = this.thumbhash;
 | |
|     } else {
 | |
|     //  json[r'thumbhash'] = null;
 | |
|     }
 | |
|       json[r'type'] = this.type;
 | |
|       json[r'updatedAt'] = this.updatedAt.toUtc().toIso8601String();
 | |
|     return json;
 | |
|   }
 | |
| 
 | |
|   /// Returns a new [AssetResponseDto] instance and imports its values from
 | |
|   /// [value] if it's a [Map], null otherwise.
 | |
|   // ignore: prefer_constructors_over_static_methods
 | |
|   static AssetResponseDto? fromJson(dynamic value) {
 | |
|     if (value is Map) {
 | |
|       final json = value.cast<String, dynamic>();
 | |
| 
 | |
|       return AssetResponseDto(
 | |
|         checksum: mapValueOfType<String>(json, r'checksum')!,
 | |
|         deviceAssetId: mapValueOfType<String>(json, r'deviceAssetId')!,
 | |
|         deviceId: mapValueOfType<String>(json, r'deviceId')!,
 | |
|         duration: mapValueOfType<String>(json, r'duration')!,
 | |
|         exifInfo: ExifResponseDto.fromJson(json[r'exifInfo']),
 | |
|         fileCreatedAt: mapDateTime(json, r'fileCreatedAt', '')!,
 | |
|         fileModifiedAt: mapDateTime(json, r'fileModifiedAt', '')!,
 | |
|         id: mapValueOfType<String>(json, r'id')!,
 | |
|         isArchived: mapValueOfType<bool>(json, r'isArchived')!,
 | |
|         isExternal: mapValueOfType<bool>(json, r'isExternal')!,
 | |
|         isFavorite: mapValueOfType<bool>(json, r'isFavorite')!,
 | |
|         isOffline: mapValueOfType<bool>(json, r'isOffline')!,
 | |
|         isReadOnly: mapValueOfType<bool>(json, r'isReadOnly')!,
 | |
|         isTrashed: mapValueOfType<bool>(json, r'isTrashed')!,
 | |
|         libraryId: mapValueOfType<String>(json, r'libraryId')!,
 | |
|         livePhotoVideoId: mapValueOfType<String>(json, r'livePhotoVideoId'),
 | |
|         localDateTime: mapDateTime(json, r'localDateTime', '')!,
 | |
|         originalFileName: mapValueOfType<String>(json, r'originalFileName')!,
 | |
|         originalPath: mapValueOfType<String>(json, r'originalPath')!,
 | |
|         owner: UserResponseDto.fromJson(json[r'owner']),
 | |
|         ownerId: mapValueOfType<String>(json, r'ownerId')!,
 | |
|         people: PersonResponseDto.listFromJson(json[r'people']),
 | |
|         resized: mapValueOfType<bool>(json, r'resized')!,
 | |
|         smartInfo: SmartInfoResponseDto.fromJson(json[r'smartInfo']),
 | |
|         tags: TagResponseDto.listFromJson(json[r'tags']),
 | |
|         thumbhash: mapValueOfType<String>(json, r'thumbhash'),
 | |
|         type: AssetTypeEnum.fromJson(json[r'type'])!,
 | |
|         updatedAt: mapDateTime(json, r'updatedAt', '')!,
 | |
|       );
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   static List<AssetResponseDto> listFromJson(dynamic json, {bool growable = false,}) {
 | |
|     final result = <AssetResponseDto>[];
 | |
|     if (json is List && json.isNotEmpty) {
 | |
|       for (final row in json) {
 | |
|         final value = AssetResponseDto.fromJson(row);
 | |
|         if (value != null) {
 | |
|           result.add(value);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     return result.toList(growable: growable);
 | |
|   }
 | |
| 
 | |
|   static Map<String, AssetResponseDto> mapFromJson(dynamic json) {
 | |
|     final map = <String, AssetResponseDto>{};
 | |
|     if (json is Map && json.isNotEmpty) {
 | |
|       json = json.cast<String, dynamic>(); // ignore: parameter_assignments
 | |
|       for (final entry in json.entries) {
 | |
|         final value = AssetResponseDto.fromJson(entry.value);
 | |
|         if (value != null) {
 | |
|           map[entry.key] = value;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     return map;
 | |
|   }
 | |
| 
 | |
|   // maps a json object with a list of AssetResponseDto-objects as value to a dart map
 | |
|   static Map<String, List<AssetResponseDto>> mapListFromJson(dynamic json, {bool growable = false,}) {
 | |
|     final map = <String, List<AssetResponseDto>>{};
 | |
|     if (json is Map && json.isNotEmpty) {
 | |
|       // ignore: parameter_assignments
 | |
|       json = json.cast<String, dynamic>();
 | |
|       for (final entry in json.entries) {
 | |
|         map[entry.key] = AssetResponseDto.listFromJson(entry.value, growable: growable,);
 | |
|       }
 | |
|     }
 | |
|     return map;
 | |
|   }
 | |
| 
 | |
|   /// The list of required keys that must be present in a JSON.
 | |
|   static const requiredKeys = <String>{
 | |
|     'checksum',
 | |
|     'deviceAssetId',
 | |
|     'deviceId',
 | |
|     'duration',
 | |
|     'fileCreatedAt',
 | |
|     'fileModifiedAt',
 | |
|     'id',
 | |
|     'isArchived',
 | |
|     'isExternal',
 | |
|     'isFavorite',
 | |
|     'isOffline',
 | |
|     'isReadOnly',
 | |
|     'isTrashed',
 | |
|     'libraryId',
 | |
|     'localDateTime',
 | |
|     'originalFileName',
 | |
|     'originalPath',
 | |
|     'ownerId',
 | |
|     'resized',
 | |
|     'thumbhash',
 | |
|     'type',
 | |
|     'updatedAt',
 | |
|   };
 | |
| }
 | |
| 
 |