1
0
mirror of https://github.com/immich-app/immich.git synced 2025-08-10 23:22:22 +02:00

feat: Add description (#2237)

* Added dto, logic to insert description and web implementation

* create text field and update on remote database

* Update description and save changes

* styling

* fix web test

* fix server test

* preserve description on metadata extraction job run

* handle exif info is null situation

* pr feedback

* format openapi spec

* update createAssetDto

* refactor logic to service

* move files

* only owner can update description

* Render description correctly in shared album

* Render description correctly in shared link

* disable description edit for not owner of asset on mobile

* localization and clean up

* fix test

* Uses providers for description text (#2244)

* uses providers for description text

* comments

* fixes initial data setting

* fixes notifier

---------

Co-authored-by: martyfuhry <martyfuhry@gmail.com>
This commit is contained in:
Alex
2023-04-13 10:22:06 -05:00
committed by GitHub
parent 561b208508
commit a9859bc029
27 changed files with 843 additions and 178 deletions

View File

@@ -27,6 +27,7 @@ Name | Type | Description | Notes
**city** | **String** | | [optional]
**state** | **String** | | [optional]
**country** | **String** | | [optional]
**description** | **String** | | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@@ -11,6 +11,7 @@ Name | Type | Description | Notes
**tagIds** | **List<String>** | | [optional] [default to const []]
**isFavorite** | **bool** | | [optional]
**isArchived** | **bool** | | [optional]
**description** | **String** | | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@@ -32,6 +32,7 @@ class ExifResponseDto {
this.city,
this.state,
this.country,
this.description,
});
int? fileSizeInByte;
@@ -72,6 +73,8 @@ class ExifResponseDto {
String? country;
String? description;
@override
bool operator ==(Object other) => identical(this, other) || other is ExifResponseDto &&
other.fileSizeInByte == fileSizeInByte &&
@@ -92,7 +95,8 @@ class ExifResponseDto {
other.longitude == longitude &&
other.city == city &&
other.state == state &&
other.country == country;
other.country == country &&
other.description == description;
@override
int get hashCode =>
@@ -115,10 +119,11 @@ class ExifResponseDto {
(longitude == null ? 0 : longitude!.hashCode) +
(city == null ? 0 : city!.hashCode) +
(state == null ? 0 : state!.hashCode) +
(country == null ? 0 : country!.hashCode);
(country == null ? 0 : country!.hashCode) +
(description == null ? 0 : description!.hashCode);
@override
String toString() => 'ExifResponseDto[fileSizeInByte=$fileSizeInByte, make=$make, model=$model, exifImageWidth=$exifImageWidth, exifImageHeight=$exifImageHeight, orientation=$orientation, dateTimeOriginal=$dateTimeOriginal, modifyDate=$modifyDate, timeZone=$timeZone, lensModel=$lensModel, fNumber=$fNumber, focalLength=$focalLength, iso=$iso, exposureTime=$exposureTime, latitude=$latitude, longitude=$longitude, city=$city, state=$state, country=$country]';
String toString() => 'ExifResponseDto[fileSizeInByte=$fileSizeInByte, make=$make, model=$model, exifImageWidth=$exifImageWidth, exifImageHeight=$exifImageHeight, orientation=$orientation, dateTimeOriginal=$dateTimeOriginal, modifyDate=$modifyDate, timeZone=$timeZone, lensModel=$lensModel, fNumber=$fNumber, focalLength=$focalLength, iso=$iso, exposureTime=$exposureTime, latitude=$latitude, longitude=$longitude, city=$city, state=$state, country=$country, description=$description]';
Map<String, dynamic> toJson() {
final json = <String, dynamic>{};
@@ -217,6 +222,11 @@ class ExifResponseDto {
} else {
// json[r'country'] = null;
}
if (this.description != null) {
json[r'description'] = this.description;
} else {
// json[r'description'] = null;
}
return json;
}
@@ -272,6 +282,7 @@ class ExifResponseDto {
city: mapValueOfType<String>(json, r'city'),
state: mapValueOfType<String>(json, r'state'),
country: mapValueOfType<String>(json, r'country'),
description: mapValueOfType<String>(json, r'description'),
);
}
return null;

View File

@@ -16,6 +16,7 @@ class UpdateAssetDto {
this.tagIds = const [],
this.isFavorite,
this.isArchived,
this.description,
});
List<String> tagIds;
@@ -36,21 +37,31 @@ class UpdateAssetDto {
///
bool? isArchived;
///
/// 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.
///
String? description;
@override
bool operator ==(Object other) => identical(this, other) || other is UpdateAssetDto &&
other.tagIds == tagIds &&
other.isFavorite == isFavorite &&
other.isArchived == isArchived;
other.isArchived == isArchived &&
other.description == description;
@override
int get hashCode =>
// ignore: unnecessary_parenthesis
(tagIds.hashCode) +
(isFavorite == null ? 0 : isFavorite!.hashCode) +
(isArchived == null ? 0 : isArchived!.hashCode);
(isArchived == null ? 0 : isArchived!.hashCode) +
(description == null ? 0 : description!.hashCode);
@override
String toString() => 'UpdateAssetDto[tagIds=$tagIds, isFavorite=$isFavorite, isArchived=$isArchived]';
String toString() => 'UpdateAssetDto[tagIds=$tagIds, isFavorite=$isFavorite, isArchived=$isArchived, description=$description]';
Map<String, dynamic> toJson() {
final json = <String, dynamic>{};
@@ -65,6 +76,11 @@ class UpdateAssetDto {
} else {
// json[r'isArchived'] = null;
}
if (this.description != null) {
json[r'description'] = this.description;
} else {
// json[r'description'] = null;
}
return json;
}
@@ -92,6 +108,7 @@ class UpdateAssetDto {
: const [],
isFavorite: mapValueOfType<bool>(json, r'isFavorite'),
isArchived: mapValueOfType<bool>(json, r'isArchived'),
description: mapValueOfType<String>(json, r'description'),
);
}
return null;

View File

@@ -111,6 +111,11 @@ void main() {
// TODO
});
// String description
test('to test the property `description`', () async {
// TODO
});
});

View File

@@ -31,6 +31,11 @@ void main() {
// TODO
});
// String description
test('to test the property `description`', () async {
// TODO
});
});