2023-03-20 11:55:28 -04:00
|
|
|
import { ApiProperty } from '@nestjs/swagger';
|
2024-03-07 22:59:02 -05:00
|
|
|
import { IsEnum, IsNotEmpty } from 'class-validator';
|
2024-03-21 12:59:49 +01:00
|
|
|
import { JobCommand, QueueName } from 'src/interfaces/job.interface';
|
2024-03-20 15:04:03 -05:00
|
|
|
import { ValidateBoolean } from 'src/validation';
|
2023-07-01 00:41:12 -04:00
|
|
|
|
|
|
|
|
export class JobIdParamDto {
|
|
|
|
|
@IsNotEmpty()
|
|
|
|
|
@IsEnum(QueueName)
|
|
|
|
|
@ApiProperty({ type: String, enum: QueueName, enumName: 'JobName' })
|
|
|
|
|
id!: QueueName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class JobCommandDto {
|
|
|
|
|
@IsNotEmpty()
|
|
|
|
|
@IsEnum(JobCommand)
|
|
|
|
|
@ApiProperty({ type: 'string', enum: JobCommand, enumName: 'JobCommand' })
|
|
|
|
|
command!: JobCommand;
|
|
|
|
|
|
2024-03-07 22:59:02 -05:00
|
|
|
@ValidateBoolean({ optional: true })
|
2023-07-01 00:41:12 -04:00
|
|
|
force!: boolean;
|
|
|
|
|
}
|
2023-03-20 11:55:28 -04:00
|
|
|
|
|
|
|
|
export class JobCountsDto {
|
|
|
|
|
@ApiProperty({ type: 'integer' })
|
|
|
|
|
active!: number;
|
|
|
|
|
@ApiProperty({ type: 'integer' })
|
|
|
|
|
completed!: number;
|
|
|
|
|
@ApiProperty({ type: 'integer' })
|
|
|
|
|
failed!: number;
|
|
|
|
|
@ApiProperty({ type: 'integer' })
|
|
|
|
|
delayed!: number;
|
|
|
|
|
@ApiProperty({ type: 'integer' })
|
|
|
|
|
waiting!: number;
|
2023-03-29 17:33:03 +02:00
|
|
|
@ApiProperty({ type: 'integer' })
|
|
|
|
|
paused!: number;
|
2023-03-20 11:55:28 -04:00
|
|
|
}
|
|
|
|
|
|
2023-04-01 22:46:07 +02:00
|
|
|
export class QueueStatusDto {
|
|
|
|
|
isActive!: boolean;
|
|
|
|
|
isPaused!: boolean;
|
|
|
|
|
}
|
2023-03-20 11:55:28 -04:00
|
|
|
|
2023-04-01 22:46:07 +02:00
|
|
|
export class JobStatusDto {
|
2023-03-20 11:55:28 -04:00
|
|
|
@ApiProperty({ type: JobCountsDto })
|
2023-04-01 22:46:07 +02:00
|
|
|
jobCounts!: JobCountsDto;
|
2023-03-20 11:55:28 -04:00
|
|
|
|
2023-04-01 22:46:07 +02:00
|
|
|
@ApiProperty({ type: QueueStatusDto })
|
|
|
|
|
queueStatus!: QueueStatusDto;
|
|
|
|
|
}
|
2023-03-20 11:55:28 -04:00
|
|
|
|
2023-04-01 22:46:07 +02:00
|
|
|
export class AllJobStatusResponseDto implements Record<QueueName, JobStatusDto> {
|
|
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.THUMBNAIL_GENERATION]!: JobStatusDto;
|
2023-03-20 11:55:28 -04:00
|
|
|
|
2023-04-01 22:46:07 +02:00
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.METADATA_EXTRACTION]!: JobStatusDto;
|
2023-03-20 11:55:28 -04:00
|
|
|
|
2023-04-01 22:46:07 +02:00
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.VIDEO_CONVERSION]!: JobStatusDto;
|
2023-03-20 11:55:28 -04:00
|
|
|
|
2023-04-01 22:46:07 +02:00
|
|
|
@ApiProperty({ type: JobStatusDto })
|
2023-12-16 11:50:46 -05:00
|
|
|
[QueueName.SMART_SEARCH]!: JobStatusDto;
|
2023-04-01 22:46:07 +02:00
|
|
|
|
|
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.STORAGE_TEMPLATE_MIGRATION]!: JobStatusDto;
|
|
|
|
|
|
2023-09-25 17:07:21 +02:00
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.MIGRATION]!: JobStatusDto;
|
|
|
|
|
|
2023-04-01 22:46:07 +02:00
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.BACKGROUND_TASK]!: JobStatusDto;
|
|
|
|
|
|
|
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.SEARCH]!: JobStatusDto;
|
2023-05-17 13:07:17 -04:00
|
|
|
|
|
|
|
|
@ApiProperty({ type: JobStatusDto })
|
2024-01-18 00:08:48 -05:00
|
|
|
[QueueName.FACE_DETECTION]!: JobStatusDto;
|
|
|
|
|
|
|
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.FACIAL_RECOGNITION]!: JobStatusDto;
|
feat(server): xmp sidecar metadata (#2466)
* initial commit for XMP sidecar support
* Added support for 'missing' metadata files to include those without sidecar files, now detects sidecar files in the filesystem for media already ingested but the sidecar was created afterwards
* didn't mean to commit default log level during testing
* new sidecar logic for video metadata as well
* Added xml mimetype for sidecars only
* don't need capture group for this regex
* wrong default value reverted
* simplified the move here - keep it in the same try catch since the outcome is to move the media back anyway
* simplified setter logic
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* simplified logic per suggestions
* sidecar is now its own queue with a discover and sync, updated UI for the new job queueing
* queue a sidecar job for every asset based on discovery or sync, though the logic is almost identical aside from linking the sidecar
* now queue sidecar jobs for each assset, though logic is mostly the same between discovery and sync
* simplified logic of filename extraction and asset instantiation
* not sure how that got deleted..
* updated code per suggestions and comments in the PR
* stat was not being used, removed the variable set
* better type checking, using in-scope variables for exif getter instead of passing in every time
* removed commented out test
* ran and resolved all lints, formats, checks, and tests
* resolved suggested change in PR
* made getExifProperty more dynamic with multiple possible args for fallbacks, fixed typo, used generic in function for better type checking
* better error handling and moving files back to positions on move or save failure
* regenerated api
* format fixes
* Added XMP documentation
* documentation typo
* Merged in main
* missed merge conflict
* more changes due to a merge
* Resolving conflicts
* added icon for sidecar jobs
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-05-24 21:59:30 -04:00
|
|
|
|
|
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.SIDECAR]!: JobStatusDto;
|
2023-09-20 13:16:33 +02:00
|
|
|
|
|
|
|
|
@ApiProperty({ type: JobStatusDto })
|
|
|
|
|
[QueueName.LIBRARY]!: JobStatusDto;
|
2023-03-20 11:55:28 -04:00
|
|
|
}
|