fix merge
This commit is contained in:
parent
f6170e5f7f
commit
698e45a5cb
11 changed files with 442 additions and 18 deletions
175
cli/src/api/open-api/api.ts
generated
175
cli/src/api/open-api/api.ts
generated
|
@ -4,7 +4,7 @@
|
|||
* Immich
|
||||
* Immich API
|
||||
*
|
||||
* The version of the OpenAPI document: 1.78.1
|
||||
* The version of the OpenAPI document: 1.81.0
|
||||
*
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||
|
@ -392,6 +392,12 @@ export interface AllJobStatusResponseDto {
|
|||
* @memberof AllJobStatusResponseDto
|
||||
*/
|
||||
'metadataExtraction': JobStatusDto;
|
||||
/**
|
||||
*
|
||||
* @type {JobStatusDto}
|
||||
* @memberof AllJobStatusResponseDto
|
||||
*/
|
||||
'migration': JobStatusDto;
|
||||
/**
|
||||
*
|
||||
* @type {JobStatusDto}
|
||||
|
@ -1466,6 +1472,22 @@ export interface CheckExistingAssetsResponseDto {
|
|||
*/
|
||||
'existingIds': Array<string>;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @export
|
||||
* @enum {string}
|
||||
*/
|
||||
|
||||
export const CitiesFile = {
|
||||
Cities15000: 'cities15000',
|
||||
Cities5000: 'cities5000',
|
||||
Cities1000: 'cities1000',
|
||||
Cities500: 'cities500'
|
||||
} as const;
|
||||
|
||||
export type CitiesFile = typeof CitiesFile[keyof typeof CitiesFile];
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @export
|
||||
|
@ -1895,12 +1917,24 @@ export interface ExifEntity {
|
|||
* @memberof ExifEntity
|
||||
*/
|
||||
'assetId': string;
|
||||
/**
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof ExifEntity
|
||||
*/
|
||||
'bitsPerSample': number | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ExifEntity
|
||||
*/
|
||||
'city': string | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ExifEntity
|
||||
*/
|
||||
'colorspace': string | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
|
@ -2021,6 +2055,12 @@ export interface ExifEntity {
|
|||
* @memberof ExifEntity
|
||||
*/
|
||||
'orientation': string | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ExifEntity
|
||||
*/
|
||||
'profileDescription': string | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
|
@ -2359,6 +2399,7 @@ export const JobName = {
|
|||
ClipEncoding: 'clipEncoding',
|
||||
BackgroundTask: 'backgroundTask',
|
||||
StorageTemplateMigration: 'storageTemplateMigration',
|
||||
Migration: 'migration',
|
||||
Search: 'search',
|
||||
Sidecar: 'sidecar',
|
||||
Library: 'library'
|
||||
|
@ -3395,6 +3436,12 @@ export interface ServerFeaturesDto {
|
|||
* @memberof ServerFeaturesDto
|
||||
*/
|
||||
'passwordLogin': boolean;
|
||||
/**
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ServerFeaturesDto
|
||||
*/
|
||||
'reverseGeocoding': boolean;
|
||||
/**
|
||||
*
|
||||
* @type {boolean}
|
||||
|
@ -3974,6 +4021,12 @@ export interface SystemConfigDto {
|
|||
* @memberof SystemConfigDto
|
||||
*/
|
||||
'passwordLogin': SystemConfigPasswordLoginDto;
|
||||
/**
|
||||
*
|
||||
* @type {SystemConfigReverseGeocodingDto}
|
||||
* @memberof SystemConfigDto
|
||||
*/
|
||||
'reverseGeocoding': SystemConfigReverseGeocodingDto;
|
||||
/**
|
||||
*
|
||||
* @type {SystemConfigStorageTemplateDto}
|
||||
|
@ -4128,6 +4181,12 @@ export interface SystemConfigJobDto {
|
|||
* @memberof SystemConfigJobDto
|
||||
*/
|
||||
'metadataExtraction': JobSettingsDto;
|
||||
/**
|
||||
*
|
||||
* @type {JobSettingsDto}
|
||||
* @memberof SystemConfigJobDto
|
||||
*/
|
||||
'migration': JobSettingsDto;
|
||||
/**
|
||||
*
|
||||
* @type {JobSettingsDto}
|
||||
|
@ -4313,6 +4372,27 @@ export interface SystemConfigPasswordLoginDto {
|
|||
*/
|
||||
'enabled': boolean;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @export
|
||||
* @interface SystemConfigReverseGeocodingDto
|
||||
*/
|
||||
export interface SystemConfigReverseGeocodingDto {
|
||||
/**
|
||||
*
|
||||
* @type {CitiesFile}
|
||||
* @memberof SystemConfigReverseGeocodingDto
|
||||
*/
|
||||
'citiesFileOverride': CitiesFile;
|
||||
/**
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SystemConfigReverseGeocodingDto
|
||||
*/
|
||||
'enabled': boolean;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @export
|
||||
|
@ -4368,6 +4448,12 @@ export interface SystemConfigTemplateStorageOptionDto {
|
|||
* @memberof SystemConfigTemplateStorageOptionDto
|
||||
*/
|
||||
'secondOptions': Array<string>;
|
||||
/**
|
||||
*
|
||||
* @type {Array<string>}
|
||||
* @memberof SystemConfigTemplateStorageOptionDto
|
||||
*/
|
||||
'weekOptions': Array<string>;
|
||||
/**
|
||||
*
|
||||
* @type {Array<string>}
|
||||
|
@ -7358,6 +7444,49 @@ export const AssetApiAxiosParamCreator = function (configuration?: Configuration
|
|||
|
||||
|
||||
|
||||
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
||||
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
||||
|
||||
return {
|
||||
url: toPathString(localVarUrlObj),
|
||||
options: localVarRequestOptions,
|
||||
};
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {number} [count]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
getRandom: async (count?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
|
||||
const localVarPath = `/asset/random`;
|
||||
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
||||
let baseOptions;
|
||||
if (configuration) {
|
||||
baseOptions = configuration.baseOptions;
|
||||
}
|
||||
|
||||
const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
|
||||
const localVarHeaderParameter = {} as any;
|
||||
const localVarQueryParameter = {} as any;
|
||||
|
||||
// authentication cookie required
|
||||
|
||||
// authentication api_key required
|
||||
await setApiKeyToObject(localVarHeaderParameter, "x-api-key", configuration)
|
||||
|
||||
// authentication bearer required
|
||||
// http bearer authentication required
|
||||
await setBearerAuthToObject(localVarHeaderParameter, configuration)
|
||||
|
||||
if (count !== undefined) {
|
||||
localVarQueryParameter['count'] = count;
|
||||
}
|
||||
|
||||
|
||||
|
||||
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
||||
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
||||
|
@ -8098,6 +8227,16 @@ export const AssetApiFp = function(configuration?: Configuration) {
|
|||
const localVarAxiosArgs = await localVarAxiosParamCreator.getMemoryLane(timestamp, options);
|
||||
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {number} [count]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
async getRandom(count?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<AssetResponseDto>>> {
|
||||
const localVarAxiosArgs = await localVarAxiosParamCreator.getRandom(count, options);
|
||||
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {TimeBucketSize} size
|
||||
|
@ -8373,6 +8512,15 @@ export const AssetApiFactory = function (configuration?: Configuration, basePath
|
|||
getMemoryLane(requestParameters: AssetApiGetMemoryLaneRequest, options?: AxiosRequestConfig): AxiosPromise<Array<MemoryLaneResponseDto>> {
|
||||
return localVarFp.getMemoryLane(requestParameters.timestamp, options).then((request) => request(axios, basePath));
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {AssetApiGetRandomRequest} requestParameters Request parameters.
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
getRandom(requestParameters: AssetApiGetRandomRequest = {}, options?: AxiosRequestConfig): AxiosPromise<Array<AssetResponseDto>> {
|
||||
return localVarFp.getRandom(requestParameters.count, options).then((request) => request(axios, basePath));
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {AssetApiGetTimeBucketsRequest} requestParameters Request parameters.
|
||||
|
@ -8807,6 +8955,20 @@ export interface AssetApiGetMemoryLaneRequest {
|
|||
readonly timestamp: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Request parameters for getRandom operation in AssetApi.
|
||||
* @export
|
||||
* @interface AssetApiGetRandomRequest
|
||||
*/
|
||||
export interface AssetApiGetRandomRequest {
|
||||
/**
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof AssetApiGetRandom
|
||||
*/
|
||||
readonly count?: number
|
||||
}
|
||||
|
||||
/**
|
||||
* Request parameters for getTimeBuckets operation in AssetApi.
|
||||
* @export
|
||||
|
@ -9299,6 +9461,17 @@ export class AssetApi extends BaseAPI {
|
|||
return AssetApiFp(this.configuration).getMemoryLane(requestParameters.timestamp, options).then((request) => request(this.axios, this.basePath));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {AssetApiGetRandomRequest} requestParameters Request parameters.
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
* @memberof AssetApi
|
||||
*/
|
||||
public getRandom(requestParameters: AssetApiGetRandomRequest = {}, options?: AxiosRequestConfig) {
|
||||
return AssetApiFp(this.configuration).getRandom(requestParameters.count, options).then((request) => request(this.axios, this.basePath));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {AssetApiGetTimeBucketsRequest} requestParameters Request parameters.
|
||||
|
|
6
mobile/openapi/.openapi-generator/FILES
generated
6
mobile/openapi/.openapi-generator/FILES
generated
|
@ -48,6 +48,7 @@ doc/CheckDuplicateAssetDto.md
|
|||
doc/CheckDuplicateAssetResponseDto.md
|
||||
doc/CheckExistingAssetsDto.md
|
||||
doc/CheckExistingAssetsResponseDto.md
|
||||
doc/CitiesFile.md
|
||||
doc/ClassificationConfig.md
|
||||
doc/Colorspace.md
|
||||
doc/CreateAlbumDto.md
|
||||
|
@ -136,6 +137,7 @@ doc/SystemConfigMachineLearningDto.md
|
|||
doc/SystemConfigMapDto.md
|
||||
doc/SystemConfigOAuthDto.md
|
||||
doc/SystemConfigPasswordLoginDto.md
|
||||
doc/SystemConfigReverseGeocodingDto.md
|
||||
doc/SystemConfigStorageTemplateDto.md
|
||||
doc/SystemConfigTemplateStorageOptionDto.md
|
||||
doc/SystemConfigThumbnailDto.md
|
||||
|
@ -224,6 +226,7 @@ lib/model/check_duplicate_asset_dto.dart
|
|||
lib/model/check_duplicate_asset_response_dto.dart
|
||||
lib/model/check_existing_assets_dto.dart
|
||||
lib/model/check_existing_assets_response_dto.dart
|
||||
lib/model/cities_file.dart
|
||||
lib/model/classification_config.dart
|
||||
lib/model/clip_config.dart
|
||||
lib/model/clip_mode.dart
|
||||
|
@ -306,6 +309,7 @@ lib/model/system_config_machine_learning_dto.dart
|
|||
lib/model/system_config_map_dto.dart
|
||||
lib/model/system_config_o_auth_dto.dart
|
||||
lib/model/system_config_password_login_dto.dart
|
||||
lib/model/system_config_reverse_geocoding_dto.dart
|
||||
lib/model/system_config_storage_template_dto.dart
|
||||
lib/model/system_config_template_storage_option_dto.dart
|
||||
lib/model/system_config_thumbnail_dto.dart
|
||||
|
@ -372,6 +376,7 @@ test/check_duplicate_asset_dto_test.dart
|
|||
test/check_duplicate_asset_response_dto_test.dart
|
||||
test/check_existing_assets_dto_test.dart
|
||||
test/check_existing_assets_response_dto_test.dart
|
||||
test/cities_file_test.dart
|
||||
test/classification_config_test.dart
|
||||
test/clip_config_test.dart
|
||||
test/clip_mode_test.dart
|
||||
|
@ -463,6 +468,7 @@ test/system_config_machine_learning_dto_test.dart
|
|||
test/system_config_map_dto_test.dart
|
||||
test/system_config_o_auth_dto_test.dart
|
||||
test/system_config_password_login_dto_test.dart
|
||||
test/system_config_reverse_geocoding_dto_test.dart
|
||||
test/system_config_storage_template_dto_test.dart
|
||||
test/system_config_template_storage_option_dto_test.dart
|
||||
test/system_config_thumbnail_dto_test.dart
|
||||
|
|
5
mobile/openapi/README.md
generated
5
mobile/openapi/README.md
generated
|
@ -3,7 +3,7 @@ Immich API
|
|||
|
||||
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||
|
||||
- API version: 1.78.1
|
||||
- API version: 1.81.0
|
||||
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
||||
|
||||
## Requirements
|
||||
|
@ -104,6 +104,7 @@ Class | Method | HTTP request | Description
|
|||
*AssetApi* | [**getDownloadInfo**](doc//AssetApi.md#getdownloadinfo) | **POST** /asset/download/info |
|
||||
*AssetApi* | [**getMapMarkers**](doc//AssetApi.md#getmapmarkers) | **GET** /asset/map-marker |
|
||||
*AssetApi* | [**getMemoryLane**](doc//AssetApi.md#getmemorylane) | **GET** /asset/memory-lane |
|
||||
*AssetApi* | [**getRandom**](doc//AssetApi.md#getrandom) | **GET** /asset/random |
|
||||
*AssetApi* | [**getTimeBuckets**](doc//AssetApi.md#gettimebuckets) | **GET** /asset/time-buckets |
|
||||
*AssetApi* | [**getUserAssetsByDeviceId**](doc//AssetApi.md#getuserassetsbydeviceid) | **GET** /asset/{deviceId} |
|
||||
*AssetApi* | [**importFile**](doc//AssetApi.md#importfile) | **POST** /asset/import |
|
||||
|
@ -234,6 +235,7 @@ Class | Method | HTTP request | Description
|
|||
- [CheckDuplicateAssetResponseDto](doc//CheckDuplicateAssetResponseDto.md)
|
||||
- [CheckExistingAssetsDto](doc//CheckExistingAssetsDto.md)
|
||||
- [CheckExistingAssetsResponseDto](doc//CheckExistingAssetsResponseDto.md)
|
||||
- [CitiesFile](doc//CitiesFile.md)
|
||||
- [ClassificationConfig](doc//ClassificationConfig.md)
|
||||
- [Colorspace](doc//Colorspace.md)
|
||||
- [CreateAlbumDto](doc//CreateAlbumDto.md)
|
||||
|
@ -313,6 +315,7 @@ Class | Method | HTTP request | Description
|
|||
- [SystemConfigMapDto](doc//SystemConfigMapDto.md)
|
||||
- [SystemConfigOAuthDto](doc//SystemConfigOAuthDto.md)
|
||||
- [SystemConfigPasswordLoginDto](doc//SystemConfigPasswordLoginDto.md)
|
||||
- [SystemConfigReverseGeocodingDto](doc//SystemConfigReverseGeocodingDto.md)
|
||||
- [SystemConfigStorageTemplateDto](doc//SystemConfigStorageTemplateDto.md)
|
||||
- [SystemConfigTemplateStorageOptionDto](doc//SystemConfigTemplateStorageOptionDto.md)
|
||||
- [SystemConfigThumbnailDto](doc//SystemConfigThumbnailDto.md)
|
||||
|
|
3
mobile/openapi/doc/ExifEntity.md
generated
3
mobile/openapi/doc/ExifEntity.md
generated
|
@ -10,7 +10,9 @@ Name | Type | Description | Notes
|
|||
------------ | ------------- | ------------- | -------------
|
||||
**asset** | [**AssetEntity**](AssetEntity.md) | | [optional]
|
||||
**assetId** | **String** | |
|
||||
**bitsPerSample** | **num** | |
|
||||
**city** | **String** | |
|
||||
**colorspace** | **String** | |
|
||||
**country** | **String** | |
|
||||
**dateTimeOriginal** | [**DateTime**](DateTime.md) | |
|
||||
**description** | **String** | General info |
|
||||
|
@ -31,6 +33,7 @@ Name | Type | Description | Notes
|
|||
**model** | **String** | |
|
||||
**modifyDate** | [**DateTime**](DateTime.md) | |
|
||||
**orientation** | **String** | |
|
||||
**profileDescription** | **String** | |
|
||||
**projectionType** | **String** | |
|
||||
**state** | **String** | |
|
||||
**timeZone** | **String** | |
|
||||
|
|
2
mobile/openapi/lib/api.dart
generated
2
mobile/openapi/lib/api.dart
generated
|
@ -85,6 +85,7 @@ part 'model/check_duplicate_asset_dto.dart';
|
|||
part 'model/check_duplicate_asset_response_dto.dart';
|
||||
part 'model/check_existing_assets_dto.dart';
|
||||
part 'model/check_existing_assets_response_dto.dart';
|
||||
part 'model/cities_file.dart';
|
||||
part 'model/classification_config.dart';
|
||||
part 'model/colorspace.dart';
|
||||
part 'model/create_album_dto.dart';
|
||||
|
@ -164,6 +165,7 @@ part 'model/system_config_machine_learning_dto.dart';
|
|||
part 'model/system_config_map_dto.dart';
|
||||
part 'model/system_config_o_auth_dto.dart';
|
||||
part 'model/system_config_password_login_dto.dart';
|
||||
part 'model/system_config_reverse_geocoding_dto.dart';
|
||||
part 'model/system_config_storage_template_dto.dart';
|
||||
part 'model/system_config_template_storage_option_dto.dart';
|
||||
part 'model/system_config_thumbnail_dto.dart';
|
||||
|
|
4
mobile/openapi/lib/api_client.dart
generated
4
mobile/openapi/lib/api_client.dart
generated
|
@ -261,6 +261,8 @@ class ApiClient {
|
|||
return CheckExistingAssetsDto.fromJson(value);
|
||||
case 'CheckExistingAssetsResponseDto':
|
||||
return CheckExistingAssetsResponseDto.fromJson(value);
|
||||
case 'CitiesFile':
|
||||
return CitiesFileTypeTransformer().decode(value);
|
||||
case 'ClassificationConfig':
|
||||
return ClassificationConfig.fromJson(value);
|
||||
case 'Colorspace':
|
||||
|
@ -419,6 +421,8 @@ class ApiClient {
|
|||
return SystemConfigOAuthDto.fromJson(value);
|
||||
case 'SystemConfigPasswordLoginDto':
|
||||
return SystemConfigPasswordLoginDto.fromJson(value);
|
||||
case 'SystemConfigReverseGeocodingDto':
|
||||
return SystemConfigReverseGeocodingDto.fromJson(value);
|
||||
case 'SystemConfigStorageTemplateDto':
|
||||
return SystemConfigStorageTemplateDto.fromJson(value);
|
||||
case 'SystemConfigTemplateStorageOptionDto':
|
||||
|
|
40
mobile/openapi/lib/model/exif_entity.dart
generated
40
mobile/openapi/lib/model/exif_entity.dart
generated
|
@ -15,7 +15,9 @@ class ExifEntity {
|
|||
ExifEntity({
|
||||
this.asset,
|
||||
required this.assetId,
|
||||
required this.bitsPerSample,
|
||||
required this.city,
|
||||
required this.colorspace,
|
||||
required this.country,
|
||||
required this.dateTimeOriginal,
|
||||
required this.description,
|
||||
|
@ -36,6 +38,7 @@ class ExifEntity {
|
|||
required this.model,
|
||||
required this.modifyDate,
|
||||
required this.orientation,
|
||||
required this.profileDescription,
|
||||
required this.projectionType,
|
||||
required this.state,
|
||||
required this.timeZone,
|
||||
|
@ -51,8 +54,12 @@ class ExifEntity {
|
|||
|
||||
String assetId;
|
||||
|
||||
num? bitsPerSample;
|
||||
|
||||
String? city;
|
||||
|
||||
String? colorspace;
|
||||
|
||||
String? country;
|
||||
|
||||
DateTime? dateTimeOriginal;
|
||||
|
@ -96,6 +103,8 @@ class ExifEntity {
|
|||
|
||||
String? orientation;
|
||||
|
||||
String? profileDescription;
|
||||
|
||||
String? projectionType;
|
||||
|
||||
String? state;
|
||||
|
@ -106,7 +115,9 @@ class ExifEntity {
|
|||
bool operator ==(Object other) => identical(this, other) || other is ExifEntity &&
|
||||
other.asset == asset &&
|
||||
other.assetId == assetId &&
|
||||
other.bitsPerSample == bitsPerSample &&
|
||||
other.city == city &&
|
||||
other.colorspace == colorspace &&
|
||||
other.country == country &&
|
||||
other.dateTimeOriginal == dateTimeOriginal &&
|
||||
other.description == description &&
|
||||
|
@ -127,6 +138,7 @@ class ExifEntity {
|
|||
other.model == model &&
|
||||
other.modifyDate == modifyDate &&
|
||||
other.orientation == orientation &&
|
||||
other.profileDescription == profileDescription &&
|
||||
other.projectionType == projectionType &&
|
||||
other.state == state &&
|
||||
other.timeZone == timeZone;
|
||||
|
@ -136,7 +148,9 @@ class ExifEntity {
|
|||
// ignore: unnecessary_parenthesis
|
||||
(asset == null ? 0 : asset!.hashCode) +
|
||||
(assetId.hashCode) +
|
||||
(bitsPerSample == null ? 0 : bitsPerSample!.hashCode) +
|
||||
(city == null ? 0 : city!.hashCode) +
|
||||
(colorspace == null ? 0 : colorspace!.hashCode) +
|
||||
(country == null ? 0 : country!.hashCode) +
|
||||
(dateTimeOriginal == null ? 0 : dateTimeOriginal!.hashCode) +
|
||||
(description.hashCode) +
|
||||
|
@ -157,12 +171,13 @@ class ExifEntity {
|
|||
(model == null ? 0 : model!.hashCode) +
|
||||
(modifyDate == null ? 0 : modifyDate!.hashCode) +
|
||||
(orientation == null ? 0 : orientation!.hashCode) +
|
||||
(profileDescription == null ? 0 : profileDescription!.hashCode) +
|
||||
(projectionType == null ? 0 : projectionType!.hashCode) +
|
||||
(state == null ? 0 : state!.hashCode) +
|
||||
(timeZone == null ? 0 : timeZone!.hashCode);
|
||||
|
||||
@override
|
||||
String toString() => 'ExifEntity[asset=$asset, assetId=$assetId, city=$city, country=$country, dateTimeOriginal=$dateTimeOriginal, description=$description, exifImageHeight=$exifImageHeight, exifImageWidth=$exifImageWidth, exifTextSearchableColumn=$exifTextSearchableColumn, exposureTime=$exposureTime, fNumber=$fNumber, fileSizeInByte=$fileSizeInByte, focalLength=$focalLength, fps=$fps, iso=$iso, latitude=$latitude, lensModel=$lensModel, livePhotoCID=$livePhotoCID, longitude=$longitude, make=$make, model=$model, modifyDate=$modifyDate, orientation=$orientation, projectionType=$projectionType, state=$state, timeZone=$timeZone]';
|
||||
String toString() => 'ExifEntity[asset=$asset, assetId=$assetId, bitsPerSample=$bitsPerSample, city=$city, colorspace=$colorspace, country=$country, dateTimeOriginal=$dateTimeOriginal, description=$description, exifImageHeight=$exifImageHeight, exifImageWidth=$exifImageWidth, exifTextSearchableColumn=$exifTextSearchableColumn, exposureTime=$exposureTime, fNumber=$fNumber, fileSizeInByte=$fileSizeInByte, focalLength=$focalLength, fps=$fps, iso=$iso, latitude=$latitude, lensModel=$lensModel, livePhotoCID=$livePhotoCID, longitude=$longitude, make=$make, model=$model, modifyDate=$modifyDate, orientation=$orientation, profileDescription=$profileDescription, projectionType=$projectionType, state=$state, timeZone=$timeZone]';
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final json = <String, dynamic>{};
|
||||
|
@ -172,11 +187,21 @@ class ExifEntity {
|
|||
// json[r'asset'] = null;
|
||||
}
|
||||
json[r'assetId'] = this.assetId;
|
||||
if (this.bitsPerSample != null) {
|
||||
json[r'bitsPerSample'] = this.bitsPerSample;
|
||||
} else {
|
||||
// json[r'bitsPerSample'] = null;
|
||||
}
|
||||
if (this.city != null) {
|
||||
json[r'city'] = this.city;
|
||||
} else {
|
||||
// json[r'city'] = null;
|
||||
}
|
||||
if (this.colorspace != null) {
|
||||
json[r'colorspace'] = this.colorspace;
|
||||
} else {
|
||||
// json[r'colorspace'] = null;
|
||||
}
|
||||
if (this.country != null) {
|
||||
json[r'country'] = this.country;
|
||||
} else {
|
||||
|
@ -269,6 +294,11 @@ class ExifEntity {
|
|||
} else {
|
||||
// json[r'orientation'] = null;
|
||||
}
|
||||
if (this.profileDescription != null) {
|
||||
json[r'profileDescription'] = this.profileDescription;
|
||||
} else {
|
||||
// json[r'profileDescription'] = null;
|
||||
}
|
||||
if (this.projectionType != null) {
|
||||
json[r'projectionType'] = this.projectionType;
|
||||
} else {
|
||||
|
@ -297,7 +327,11 @@ class ExifEntity {
|
|||
return ExifEntity(
|
||||
asset: AssetEntity.fromJson(json[r'asset']),
|
||||
assetId: mapValueOfType<String>(json, r'assetId')!,
|
||||
bitsPerSample: json[r'bitsPerSample'] == null
|
||||
? null
|
||||
: num.parse(json[r'bitsPerSample'].toString()),
|
||||
city: mapValueOfType<String>(json, r'city'),
|
||||
colorspace: mapValueOfType<String>(json, r'colorspace'),
|
||||
country: mapValueOfType<String>(json, r'country'),
|
||||
dateTimeOriginal: mapDateTime(json, r'dateTimeOriginal', ''),
|
||||
description: mapValueOfType<String>(json, r'description')!,
|
||||
|
@ -336,6 +370,7 @@ class ExifEntity {
|
|||
model: mapValueOfType<String>(json, r'model'),
|
||||
modifyDate: mapDateTime(json, r'modifyDate', ''),
|
||||
orientation: mapValueOfType<String>(json, r'orientation'),
|
||||
profileDescription: mapValueOfType<String>(json, r'profileDescription'),
|
||||
projectionType: mapValueOfType<String>(json, r'projectionType'),
|
||||
state: mapValueOfType<String>(json, r'state'),
|
||||
timeZone: mapValueOfType<String>(json, r'timeZone'),
|
||||
|
@ -387,7 +422,9 @@ class ExifEntity {
|
|||
/// The list of required keys that must be present in a JSON.
|
||||
static const requiredKeys = <String>{
|
||||
'assetId',
|
||||
'bitsPerSample',
|
||||
'city',
|
||||
'colorspace',
|
||||
'country',
|
||||
'dateTimeOriginal',
|
||||
'description',
|
||||
|
@ -407,6 +444,7 @@ class ExifEntity {
|
|||
'model',
|
||||
'modifyDate',
|
||||
'orientation',
|
||||
'profileDescription',
|
||||
'projectionType',
|
||||
'state',
|
||||
'timeZone',
|
||||
|
|
15
mobile/openapi/test/exif_entity_test.dart
generated
15
mobile/openapi/test/exif_entity_test.dart
generated
|
@ -26,11 +26,21 @@ void main() {
|
|||
// TODO
|
||||
});
|
||||
|
||||
// num bitsPerSample
|
||||
test('to test the property `bitsPerSample`', () async {
|
||||
// TODO
|
||||
});
|
||||
|
||||
// String city
|
||||
test('to test the property `city`', () async {
|
||||
// TODO
|
||||
});
|
||||
|
||||
// String colorspace
|
||||
test('to test the property `colorspace`', () async {
|
||||
// TODO
|
||||
});
|
||||
|
||||
// String country
|
||||
test('to test the property `country`', () async {
|
||||
// TODO
|
||||
|
@ -134,6 +144,11 @@ void main() {
|
|||
// TODO
|
||||
});
|
||||
|
||||
// String profileDescription
|
||||
test('to test the property `profileDescription`', () async {
|
||||
// TODO
|
||||
});
|
||||
|
||||
// String projectionType
|
||||
test('to test the property `projectionType`', () async {
|
||||
// TODO
|
||||
|
|
|
@ -6804,10 +6804,18 @@
|
|||
"assetId": {
|
||||
"type": "string"
|
||||
},
|
||||
"bitsPerSample": {
|
||||
"nullable": true,
|
||||
"type": "number"
|
||||
},
|
||||
"city": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"colorspace": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"country": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
|
@ -6891,6 +6899,10 @@
|
|||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"profileDescription": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"projectionType": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
|
@ -6928,6 +6940,9 @@
|
|||
"focalLength",
|
||||
"iso",
|
||||
"exposureTime",
|
||||
"profileDescription",
|
||||
"colorspace",
|
||||
"bitsPerSample",
|
||||
"exifTextSearchableColumn"
|
||||
],
|
||||
"type": "object"
|
||||
|
|
|
@ -198,7 +198,7 @@ export class PersonService {
|
|||
|
||||
async getFaceEntity(authUser: AuthUserDto, personId: string, assetId: string): Promise<AssetFaceEntity> {
|
||||
await this.access.requirePermission(authUser, Permission.PERSON_READ, personId);
|
||||
const face = await this.repository.getFaceById({ personId, assetId });
|
||||
const [face] = await this.repository.getFacesByIds([{ personId, assetId }]);
|
||||
if (!face) {
|
||||
throw new BadRequestException('Invalid assetId for feature face');
|
||||
}
|
||||
|
@ -217,7 +217,7 @@ export class PersonService {
|
|||
id: newPerson.id,
|
||||
faceAssetId: data.assetId,
|
||||
});
|
||||
const face = await this.repository.getFaceById({ personId: newPerson.id, assetId: data.assetId });
|
||||
const [face] = await this.repository.getFacesByIds([{ personId: newPerson.id, assetId: data.assetId }]);
|
||||
const oldPerson = await this.findOrFail(data.personId);
|
||||
if (oldPerson.faceAssetId === face?.assetId) {
|
||||
//TODO: create a new feature photo
|
||||
|
@ -227,18 +227,9 @@ export class PersonService {
|
|||
}
|
||||
if (!hasGeneratedFaceThumbnail) {
|
||||
await this.jobRepository.queue({
|
||||
name: JobName.GENERATE_FACE_THUMBNAIL,
|
||||
name: JobName.GENERATE_PERSON_THUMBNAIL,
|
||||
data: {
|
||||
personId: newPerson.id,
|
||||
assetId: data.assetId,
|
||||
boundingBox: {
|
||||
x1: face.boundingBoxX1,
|
||||
x2: face.boundingBoxX2,
|
||||
y1: face.boundingBoxY1,
|
||||
y2: face.boundingBoxY2,
|
||||
},
|
||||
imageHeight: face.imageHeight,
|
||||
imageWidth: face.imageWidth,
|
||||
id: newPerson.id,
|
||||
},
|
||||
});
|
||||
hasGeneratedFaceThumbnail = true;
|
||||
|
@ -258,7 +249,7 @@ export class PersonService {
|
|||
|
||||
for (const data of dto.data) {
|
||||
try {
|
||||
const face = await this.repository.getFaceById({ personId: data.personId, assetId: data.assetId });
|
||||
const [face] = await this.repository.getFacesByIds([{ personId: data.personId, assetId: data.assetId }]);
|
||||
const oldPerson = await this.findOrFail(data.personId);
|
||||
if (oldPerson.faceAssetId === face?.assetId) {
|
||||
//TODO: create a new feature photo
|
||||
|
@ -271,6 +262,7 @@ export class PersonService {
|
|||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
async handleRecognizeFaces({ id }: IEntityJob) {
|
||||
const { machineLearning } = await this.configCore.getConfig();
|
||||
if (!machineLearning.enabled || !machineLearning.facialRecognition.enabled) {
|
||||
|
|
175
web/src/api/open-api/api.ts
generated
175
web/src/api/open-api/api.ts
generated
|
@ -4,7 +4,7 @@
|
|||
* Immich
|
||||
* Immich API
|
||||
*
|
||||
* The version of the OpenAPI document: 1.78.1
|
||||
* The version of the OpenAPI document: 1.81.0
|
||||
*
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||
|
@ -392,6 +392,12 @@ export interface AllJobStatusResponseDto {
|
|||
* @memberof AllJobStatusResponseDto
|
||||
*/
|
||||
'metadataExtraction': JobStatusDto;
|
||||
/**
|
||||
*
|
||||
* @type {JobStatusDto}
|
||||
* @memberof AllJobStatusResponseDto
|
||||
*/
|
||||
'migration': JobStatusDto;
|
||||
/**
|
||||
*
|
||||
* @type {JobStatusDto}
|
||||
|
@ -1466,6 +1472,22 @@ export interface CheckExistingAssetsResponseDto {
|
|||
*/
|
||||
'existingIds': Array<string>;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @export
|
||||
* @enum {string}
|
||||
*/
|
||||
|
||||
export const CitiesFile = {
|
||||
Cities15000: 'cities15000',
|
||||
Cities5000: 'cities5000',
|
||||
Cities1000: 'cities1000',
|
||||
Cities500: 'cities500'
|
||||
} as const;
|
||||
|
||||
export type CitiesFile = typeof CitiesFile[keyof typeof CitiesFile];
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @export
|
||||
|
@ -1895,12 +1917,24 @@ export interface ExifEntity {
|
|||
* @memberof ExifEntity
|
||||
*/
|
||||
'assetId': string;
|
||||
/**
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof ExifEntity
|
||||
*/
|
||||
'bitsPerSample': number | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ExifEntity
|
||||
*/
|
||||
'city': string | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ExifEntity
|
||||
*/
|
||||
'colorspace': string | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
|
@ -2021,6 +2055,12 @@ export interface ExifEntity {
|
|||
* @memberof ExifEntity
|
||||
*/
|
||||
'orientation': string | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ExifEntity
|
||||
*/
|
||||
'profileDescription': string | null;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
|
@ -2359,6 +2399,7 @@ export const JobName = {
|
|||
ClipEncoding: 'clipEncoding',
|
||||
BackgroundTask: 'backgroundTask',
|
||||
StorageTemplateMigration: 'storageTemplateMigration',
|
||||
Migration: 'migration',
|
||||
Search: 'search',
|
||||
Sidecar: 'sidecar',
|
||||
Library: 'library'
|
||||
|
@ -3395,6 +3436,12 @@ export interface ServerFeaturesDto {
|
|||
* @memberof ServerFeaturesDto
|
||||
*/
|
||||
'passwordLogin': boolean;
|
||||
/**
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof ServerFeaturesDto
|
||||
*/
|
||||
'reverseGeocoding': boolean;
|
||||
/**
|
||||
*
|
||||
* @type {boolean}
|
||||
|
@ -3974,6 +4021,12 @@ export interface SystemConfigDto {
|
|||
* @memberof SystemConfigDto
|
||||
*/
|
||||
'passwordLogin': SystemConfigPasswordLoginDto;
|
||||
/**
|
||||
*
|
||||
* @type {SystemConfigReverseGeocodingDto}
|
||||
* @memberof SystemConfigDto
|
||||
*/
|
||||
'reverseGeocoding': SystemConfigReverseGeocodingDto;
|
||||
/**
|
||||
*
|
||||
* @type {SystemConfigStorageTemplateDto}
|
||||
|
@ -4128,6 +4181,12 @@ export interface SystemConfigJobDto {
|
|||
* @memberof SystemConfigJobDto
|
||||
*/
|
||||
'metadataExtraction': JobSettingsDto;
|
||||
/**
|
||||
*
|
||||
* @type {JobSettingsDto}
|
||||
* @memberof SystemConfigJobDto
|
||||
*/
|
||||
'migration': JobSettingsDto;
|
||||
/**
|
||||
*
|
||||
* @type {JobSettingsDto}
|
||||
|
@ -4313,6 +4372,27 @@ export interface SystemConfigPasswordLoginDto {
|
|||
*/
|
||||
'enabled': boolean;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @export
|
||||
* @interface SystemConfigReverseGeocodingDto
|
||||
*/
|
||||
export interface SystemConfigReverseGeocodingDto {
|
||||
/**
|
||||
*
|
||||
* @type {CitiesFile}
|
||||
* @memberof SystemConfigReverseGeocodingDto
|
||||
*/
|
||||
'citiesFileOverride': CitiesFile;
|
||||
/**
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof SystemConfigReverseGeocodingDto
|
||||
*/
|
||||
'enabled': boolean;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @export
|
||||
|
@ -4368,6 +4448,12 @@ export interface SystemConfigTemplateStorageOptionDto {
|
|||
* @memberof SystemConfigTemplateStorageOptionDto
|
||||
*/
|
||||
'secondOptions': Array<string>;
|
||||
/**
|
||||
*
|
||||
* @type {Array<string>}
|
||||
* @memberof SystemConfigTemplateStorageOptionDto
|
||||
*/
|
||||
'weekOptions': Array<string>;
|
||||
/**
|
||||
*
|
||||
* @type {Array<string>}
|
||||
|
@ -7358,6 +7444,49 @@ export const AssetApiAxiosParamCreator = function (configuration?: Configuration
|
|||
|
||||
|
||||
|
||||
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
||||
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
||||
|
||||
return {
|
||||
url: toPathString(localVarUrlObj),
|
||||
options: localVarRequestOptions,
|
||||
};
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {number} [count]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
getRandom: async (count?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
|
||||
const localVarPath = `/asset/random`;
|
||||
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
||||
let baseOptions;
|
||||
if (configuration) {
|
||||
baseOptions = configuration.baseOptions;
|
||||
}
|
||||
|
||||
const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
|
||||
const localVarHeaderParameter = {} as any;
|
||||
const localVarQueryParameter = {} as any;
|
||||
|
||||
// authentication cookie required
|
||||
|
||||
// authentication api_key required
|
||||
await setApiKeyToObject(localVarHeaderParameter, "x-api-key", configuration)
|
||||
|
||||
// authentication bearer required
|
||||
// http bearer authentication required
|
||||
await setBearerAuthToObject(localVarHeaderParameter, configuration)
|
||||
|
||||
if (count !== undefined) {
|
||||
localVarQueryParameter['count'] = count;
|
||||
}
|
||||
|
||||
|
||||
|
||||
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
||||
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
||||
|
@ -8098,6 +8227,16 @@ export const AssetApiFp = function(configuration?: Configuration) {
|
|||
const localVarAxiosArgs = await localVarAxiosParamCreator.getMemoryLane(timestamp, options);
|
||||
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {number} [count]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
async getRandom(count?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<AssetResponseDto>>> {
|
||||
const localVarAxiosArgs = await localVarAxiosParamCreator.getRandom(count, options);
|
||||
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {TimeBucketSize} size
|
||||
|
@ -8373,6 +8512,15 @@ export const AssetApiFactory = function (configuration?: Configuration, basePath
|
|||
getMemoryLane(requestParameters: AssetApiGetMemoryLaneRequest, options?: AxiosRequestConfig): AxiosPromise<Array<MemoryLaneResponseDto>> {
|
||||
return localVarFp.getMemoryLane(requestParameters.timestamp, options).then((request) => request(axios, basePath));
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {AssetApiGetRandomRequest} requestParameters Request parameters.
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
getRandom(requestParameters: AssetApiGetRandomRequest = {}, options?: AxiosRequestConfig): AxiosPromise<Array<AssetResponseDto>> {
|
||||
return localVarFp.getRandom(requestParameters.count, options).then((request) => request(axios, basePath));
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @param {AssetApiGetTimeBucketsRequest} requestParameters Request parameters.
|
||||
|
@ -8807,6 +8955,20 @@ export interface AssetApiGetMemoryLaneRequest {
|
|||
readonly timestamp: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Request parameters for getRandom operation in AssetApi.
|
||||
* @export
|
||||
* @interface AssetApiGetRandomRequest
|
||||
*/
|
||||
export interface AssetApiGetRandomRequest {
|
||||
/**
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof AssetApiGetRandom
|
||||
*/
|
||||
readonly count?: number
|
||||
}
|
||||
|
||||
/**
|
||||
* Request parameters for getTimeBuckets operation in AssetApi.
|
||||
* @export
|
||||
|
@ -9299,6 +9461,17 @@ export class AssetApi extends BaseAPI {
|
|||
return AssetApiFp(this.configuration).getMemoryLane(requestParameters.timestamp, options).then((request) => request(this.axios, this.basePath));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {AssetApiGetRandomRequest} requestParameters Request parameters.
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
* @memberof AssetApi
|
||||
*/
|
||||
public getRandom(requestParameters: AssetApiGetRandomRequest = {}, options?: AxiosRequestConfig) {
|
||||
return AssetApiFp(this.configuration).getRandom(requestParameters.count, options).then((request) => request(this.axios, this.basePath));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {AssetApiGetTimeBucketsRequest} requestParameters Request parameters.
|
||||
|
|
Loading…
Reference in a new issue