Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,5 @@ mobile/ios/fastlane/report.xml

vite.config.js.timestamp-*
.pnpm-store
.devcontainer/library
.devcontainer/.env*
6 changes: 0 additions & 6 deletions i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1076,10 +1076,7 @@
"gcast_enabled": "Google Cast",
"gcast_enabled_description": "This feature loads external resources from Google in order to work.",
"general": "General",
"geolocation_instruction_all_have_location": "All assets for this date already have location data. Try showing all assets or select a different date",
"geolocation_instruction_location": "Click on an asset with GPS coordinates to use its location, or select a location directly from the map",
"geolocation_instruction_no_date": "Select a date to manage location data for photos and videos from that day",
"geolocation_instruction_no_photos": "No photos or videos found for this date. Select a different date to show them",
"get_help": "Get Help",
"get_wifiname_error": "Could not get Wi-Fi name. Make sure you have granted the necessary permissions and are connected to a Wi-Fi network",
"getting_started": "Getting Started",
Expand Down Expand Up @@ -1849,10 +1846,8 @@
"shift_to_permanent_delete": "press ⇧ to permanently delete asset",
"show_album_options": "Show album options",
"show_albums": "Show albums",
"show_all_assets": "Show all assets",
"show_all_people": "Show all people",
"show_and_hide_people": "Show & hide people",
"show_assets_without_location": "Show assets without location",
"show_file_location": "Show file location",
"show_gallery": "Show gallery",
"show_hidden_people": "Show hidden people",
Expand Down Expand Up @@ -2037,7 +2032,6 @@
"use_biometric": "Use biometric",
"use_current_connection": "use current connection",
"use_custom_date_range": "Use custom date range instead",
"use_this_location": "Click to use location",
"user": "User",
"user_has_been_deleted": "This user has been deleted.",
"user_id": "User ID",
Expand Down
30 changes: 24 additions & 6 deletions mobile/openapi/lib/api/timeline_api.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 21 additions & 1 deletion mobile/openapi/lib/model/time_bucket_asset_response_dto.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions open-api/immich-openapi-specs.json
Original file line number Diff line number Diff line change
Expand Up @@ -8895,6 +8895,15 @@
"$ref": "#/components/schemas/AssetVisibility"
}
},
{
"name": "withCoordinates",
"required": false,
"in": "query",
"description": "Include location data in the response",
"schema": {
"type": "boolean"
}
},
{
"name": "withPartners",
"required": false,
Expand Down Expand Up @@ -9040,6 +9049,15 @@
"$ref": "#/components/schemas/AssetVisibility"
}
},
{
"name": "withCoordinates",
"required": false,
"in": "query",
"description": "Include location data in the response",
"schema": {
"type": "boolean"
}
},
{
"name": "withPartners",
"required": false,
Expand Down Expand Up @@ -17066,6 +17084,14 @@
},
"type": "array"
},
"latitude": {
"description": "Array of latitude coordinates extracted from EXIF GPS data",
"items": {
"nullable": true,
"type": "number"
},
"type": "array"
},
"livePhotoVideoId": {
"description": "Array of live photo video asset IDs (null for non-live photos)",
"items": {
Expand All @@ -17081,6 +17107,14 @@
},
"type": "array"
},
"longitude": {
"description": "Array of longitude coordinates extracted from EXIF GPS data",
"items": {
"nullable": true,
"type": "number"
},
"type": "array"
},
"ownerId": {
"description": "Array of owner IDs for each asset",
"items": {
Expand Down
12 changes: 10 additions & 2 deletions open-api/typescript-sdk/src/fetch-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1561,10 +1561,14 @@ export type TimeBucketAssetResponseDto = {
isImage: boolean[];
/** Array indicating whether each asset is in the trash */
isTrashed: boolean[];
/** Array of latitude coordinates extracted from EXIF GPS data */
latitude?: (number | null)[];
/** Array of live photo video asset IDs (null for non-live photos) */
livePhotoVideoId: (string | null)[];
/** Array of UTC offset hours at the time each photo was taken. Positive values are east of UTC, negative values are west of UTC. Values may be fractional (e.g., 5.5 for +05:30, -9.75 for -09:45). Applying this offset to 'fileCreatedAt' will give you the time the photo was taken from the photographer's perspective. */
localOffsetHours: number[];
/** Array of longitude coordinates extracted from EXIF GPS data */
longitude?: (number | null)[];
/** Array of owner IDs for each asset */
ownerId: string[];
/** Array of projection types for 360° content (e.g., "EQUIRECTANGULAR", "CUBEFACE", "CYLINDRICAL") */
Expand Down Expand Up @@ -4293,7 +4297,7 @@ export function tagAssets({ id, bulkIdsDto }: {
/**
* This endpoint requires the `asset.read` permission.
*/
export function getTimeBucket({ albumId, isFavorite, isTrashed, key, order, personId, slug, tagId, timeBucket, userId, visibility, withPartners, withStacked }: {
export function getTimeBucket({ albumId, isFavorite, isTrashed, key, order, personId, slug, tagId, timeBucket, userId, visibility, withCoordinates, withPartners, withStacked }: {
albumId?: string;
isFavorite?: boolean;
isTrashed?: boolean;
Expand All @@ -4305,6 +4309,7 @@ export function getTimeBucket({ albumId, isFavorite, isTrashed, key, order, pers
timeBucket: string;
userId?: string;
visibility?: AssetVisibility;
withCoordinates?: boolean;
withPartners?: boolean;
withStacked?: boolean;
}, opts?: Oazapfts.RequestOpts) {
Expand All @@ -4323,6 +4328,7 @@ export function getTimeBucket({ albumId, isFavorite, isTrashed, key, order, pers
timeBucket,
userId,
visibility,
withCoordinates,
withPartners,
withStacked
}))}`, {
Expand All @@ -4332,7 +4338,7 @@ export function getTimeBucket({ albumId, isFavorite, isTrashed, key, order, pers
/**
* This endpoint requires the `asset.read` permission.
*/
export function getTimeBuckets({ albumId, isFavorite, isTrashed, key, order, personId, slug, tagId, userId, visibility, withPartners, withStacked }: {
export function getTimeBuckets({ albumId, isFavorite, isTrashed, key, order, personId, slug, tagId, userId, visibility, withCoordinates, withPartners, withStacked }: {
albumId?: string;
isFavorite?: boolean;
isTrashed?: boolean;
Expand All @@ -4343,6 +4349,7 @@ export function getTimeBuckets({ albumId, isFavorite, isTrashed, key, order, per
tagId?: string;
userId?: string;
visibility?: AssetVisibility;
withCoordinates?: boolean;
withPartners?: boolean;
withStacked?: boolean;
}, opts?: Oazapfts.RequestOpts) {
Expand All @@ -4360,6 +4367,7 @@ export function getTimeBuckets({ albumId, isFavorite, isTrashed, key, order, per
tagId,
userId,
visibility,
withCoordinates,
withPartners,
withStacked
}))}`, {
Expand Down
22 changes: 22 additions & 0 deletions server/src/dtos/time-bucket.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ export class TimeBucketDto {
description: 'Filter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)',
})
visibility?: AssetVisibility;

@ValidateBoolean({
optional: true,
description: 'Include location data in the response',
})
withCoordinates?: boolean;
}

export class TimeBucketAssetDto extends TimeBucketDto {
Expand Down Expand Up @@ -185,6 +191,22 @@ export class TimeBucketAssetResponseDto {
description: 'Array of country names extracted from EXIF GPS data',
})
country!: (string | null)[];

@ApiProperty({
type: 'array',
required: false,
items: { type: 'number', nullable: true },
description: 'Array of latitude coordinates extracted from EXIF GPS data',
})
latitude!: number[];

@ApiProperty({
type: 'array',
required: false,
items: { type: 'number', nullable: true },
description: 'Array of longitude coordinates extracted from EXIF GPS data',
})
longitude!: number[];
}

export class TimeBucketsResponseDto {
Expand Down
Loading
Loading