Skip to content

Commit 9c53574

Browse files
committed
fix: set duration to null when not present
1 parent ba6687d commit 9c53574

File tree

16 files changed

+31
-26
lines changed

16 files changed

+31
-26
lines changed

e2e/src/generators/timeline/rest-response.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ export function toAssetResponseDto(asset: MockTimelineAsset, owner?: UserRespons
334334
isArchived: false,
335335
isTrashed: asset.isTrashed,
336336
visibility: asset.visibility,
337-
duration: asset.duration || '0:00:00.00000',
337+
duration: asset.duration,
338338
exifInfo,
339339
livePhotoVideoId: asset.livePhotoVideoId,
340340
tags: [],

mobile/lib/domain/services/search.service.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ extension on AssetResponseDto {
6969
api.AssetVisibility.locked => AssetVisibility.locked,
7070
_ => AssetVisibility.timeline,
7171
},
72-
durationInSeconds: duration.toDuration()?.inSeconds ?? 0,
72+
durationInSeconds: duration?.toDuration()?.inSeconds ?? 0,
7373
height: exifInfo?.exifImageHeight?.toInt(),
7474
width: exifInfo?.exifImageWidth?.toInt(),
7575
isFavorite: isFavorite,

mobile/lib/entities/asset.entity.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class Asset {
2424
fileCreatedAt = remote.fileCreatedAt,
2525
fileModifiedAt = remote.fileModifiedAt,
2626
updatedAt = remote.updatedAt,
27-
durationInSeconds = remote.duration.toDuration()?.inSeconds ?? 0,
27+
durationInSeconds = remote.duration?.toDuration()?.inSeconds ?? 0,
2828
type = remote.type.toAssetType(),
2929
fileName = remote.originalFileName,
3030
height = remote.exifInfo?.exifImageHeight?.toInt(),

mobile/openapi/lib/model/asset_response_dto.dart

Lines changed: 8 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mobile/openapi/lib/model/time_bucket_asset_response_dto.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

open-api/immich-openapi-specs.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15686,6 +15686,8 @@
1568615686
"type": "string"
1568715687
},
1568815688
"duration": {
15689+
"description": "Video/gif duration in hh:mm:ss.SSS format (null for static images)",
15690+
"nullable": true,
1568915691
"type": "string"
1569015692
},
1569115693
"exifInfo": {
@@ -22314,7 +22316,7 @@
2231422316
"type": "array"
2231522317
},
2231622318
"duration": {
22317-
"description": "Array of video durations in HH:MM:SS format (null for images)",
22319+
"description": "Array of video/gif durations in hh:mm:ss.SSS format (null for static images)",
2231822320
"items": {
2231922321
"nullable": true,
2232022322
"type": "string"

open-api/typescript-sdk/src/fetch-client.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,8 @@ export type AssetResponseDto = {
342342
deviceAssetId: string;
343343
deviceId: string;
344344
duplicateId?: string | null;
345-
duration: string;
345+
/** Video/gif duration in hh:mm:ss.SSS format (null for static images) */
346+
duration: string | null;
346347
exifInfo?: ExifResponseDto;
347348
/** The actual UTC timestamp when the file was created/captured, preserving timezone information. This is the authoritative timestamp for chronological sorting within timeline groups. Combined with timezone data, this can be used to determine the exact moment the photo was taken. */
348349
fileCreatedAt: string;
@@ -1665,7 +1666,7 @@ export type TimeBucketAssetResponseDto = {
16651666
city: (string | null)[];
16661667
/** Array of country names extracted from EXIF GPS data */
16671668
country: (string | null)[];
1668-
/** Array of video durations in HH:MM:SS format (null for images) */
1669+
/** Array of video/gif durations in hh:mm:ss.SSS format (null for static images) */
16691670
duration: (string | null)[];
16701671
/** Array of file creation timestamps in UTC (ISO 8601 format, without timezone) */
16711672
fileCreatedAt: string[];

server/src/controllers/asset-media.controller.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ const makeUploadDto = (options?: { omit: string }): Record<string, any> => {
1414
fileCreatedAt: new Date().toISOString(),
1515
fileModifiedAt: new Date().toISOString(),
1616
isFavorite: 'false',
17-
duration: '0:00:00.000000',
1817
};
1918

2019
const omit = options?.omit;

server/src/dtos/asset-response.dto.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ export class SanitizedAssetResponseDto {
3131
example: '2024-01-15T14:30:00.000Z',
3232
})
3333
localDateTime!: Date;
34-
duration!: string;
34+
@ApiProperty({ description: 'Video/gif duration in hh:mm:ss.SSS format (null for static images)' })
35+
duration!: string | null;
3536
livePhotoVideoId?: string | null;
3637
hasMetadata!: boolean;
3738
}
@@ -187,7 +188,7 @@ export function mapAsset(entity: MapAsset, options: AssetMapOptions = {}): Asset
187188
originalMimeType: mimeTypes.lookup(entity.originalFileName),
188189
thumbhash: entity.thumbhash ? hexOrBufferToBase64(entity.thumbhash) : null,
189190
localDateTime: entity.localDateTime,
190-
duration: entity.duration ?? '0:00:00.00000',
191+
duration: entity.duration,
191192
livePhotoVideoId: entity.livePhotoVideoId,
192193
hasMetadata: false,
193194
};
@@ -215,7 +216,7 @@ export function mapAsset(entity: MapAsset, options: AssetMapOptions = {}): Asset
215216
isArchived: entity.visibility === AssetVisibility.Archive,
216217
isTrashed: !!entity.deletedAt,
217218
visibility: entity.visibility,
218-
duration: entity.duration ?? '0:00:00.00000',
219+
duration: entity.duration,
219220
exifInfo: entity.exifInfo ? mapExif(entity.exifInfo) : undefined,
220221
livePhotoVideoId: entity.livePhotoVideoId,
221222
tags: entity.tags?.map((tag) => mapTag(tag)),

server/src/dtos/time-bucket.dto.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export class TimeBucketAssetResponseDto {
147147
@ApiProperty({
148148
type: 'array',
149149
items: { type: 'string', nullable: true },
150-
description: 'Array of video durations in HH:MM:SS format (null for images)',
150+
description: 'Array of video/gif durations in hh:mm:ss.SSS format (null for static images)',
151151
})
152152
duration!: (string | null)[];
153153

0 commit comments

Comments
 (0)