Compare commits

..

2 Commits

Author SHA1 Message Date
github-actions
007ba1d9ef chore: version v1.137.3 2025-08-01 14:52:24 +00:00
Daniel Dietzler
4d5cd1a6b5 fix: migration if media location is set (#20532) 2025-08-01 14:49:51 +00:00
21 changed files with 33 additions and 57 deletions

6
cli/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@immich/cli",
"version": "2.2.76",
"version": "2.2.77",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@immich/cli",
"version": "2.2.76",
"version": "2.2.77",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"chokidar": "^4.0.3",
@@ -54,7 +54,7 @@
},
"../open-api/typescript-sdk": {
"name": "@immich/sdk",
"version": "1.137.2",
"version": "1.137.3",
"dev": true,
"license": "GNU Affero General Public License version 3",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/cli",
"version": "2.2.76",
"version": "2.2.77",
"description": "Command Line Interface (CLI) for Immich",
"type": "module",
"exports": "./dist/index.js",

View File

@@ -1,4 +1,8 @@
[
{
"label": "v1.137.3",
"url": "https://v1.137.3.archive.immich.app"
},
{
"label": "v1.137.2",
"url": "https://v1.137.2.archive.immich.app"

8
e2e/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "immich-e2e",
"version": "1.137.2",
"version": "1.137.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "immich-e2e",
"version": "1.137.2",
"version": "1.137.3",
"license": "GNU Affero General Public License version 3",
"devDependencies": {
"@eslint/eslintrc": "^3.1.0",
@@ -46,7 +46,7 @@
},
"../cli": {
"name": "@immich/cli",
"version": "2.2.76",
"version": "2.2.77",
"dev": true,
"license": "GNU Affero General Public License version 3",
"dependencies": {
@@ -95,7 +95,7 @@
},
"../open-api/typescript-sdk": {
"name": "@immich/sdk",
"version": "1.137.2",
"version": "1.137.3",
"dev": true,
"license": "GNU Affero General Public License version 3",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "immich-e2e",
"version": "1.137.2",
"version": "1.137.3",
"description": "",
"main": "index.js",
"type": "module",

View File

@@ -36,7 +36,7 @@ platform :android do
build_type: 'Release',
properties: {
"android.injected.version.code" => 3002,
"android.injected.version.name" => "1.137.2",
"android.injected.version.name" => "1.137.3",
}
)
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')

View File

@@ -22,7 +22,7 @@ platform :ios do
path: "./Runner.xcodeproj",
)
increment_version_number(
version_number: "1.137.2"
version_number: "1.137.3"
)
increment_build_number(
build_number: latest_testflight_build_number + 1,

View File

@@ -3,7 +3,7 @@ Immich API
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 1.137.2
- API version: 1.137.3
- Generator version: 7.8.0
- Build package: org.openapitools.codegen.languages.DartClientCodegen

View File

@@ -2,7 +2,7 @@ name: immich_mobile
description: Immich - selfhosted backup media file on mobile phone
publish_to: 'none'
version: 1.137.2+3002
version: 1.137.3+3002
environment:
sdk: '>=3.8.0 <4.0.0'

View File

@@ -9469,7 +9469,7 @@
"info": {
"title": "Immich",
"description": "Immich API",
"version": "1.137.2",
"version": "1.137.3",
"contact": {}
},
"tags": [],

View File

@@ -1,12 +1,12 @@
{
"name": "@immich/sdk",
"version": "1.137.2",
"version": "1.137.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@immich/sdk",
"version": "1.137.2",
"version": "1.137.3",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@oazapfts/runtime": "^1.0.2"

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/sdk",
"version": "1.137.2",
"version": "1.137.3",
"description": "Auto-generated TypeScript SDK for the Immich API",
"type": "module",
"main": "./build/index.js",

View File

@@ -1,6 +1,6 @@
/**
* Immich
* 1.137.2
* 1.137.3
* DO NOT MODIFY - This file has been generated using oazapfts.
* See https://www.npmjs.com/package/oazapfts
*/

View File

@@ -1,12 +1,12 @@
{
"name": "immich",
"version": "1.137.2",
"version": "1.137.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "immich",
"version": "1.137.2",
"version": "1.137.3",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@nestjs/bullmq": "^11.0.1",

View File

@@ -1,6 +1,6 @@
{
"name": "immich",
"version": "1.137.2",
"version": "1.137.3",
"description": "",
"author": "",
"private": true,

View File

@@ -16,9 +16,7 @@ export class AssetUploadInterceptor implements NestInterceptor {
const res = context.switchToHttp().getResponse<Response<AssetMediaResponseDto>>();
const checksum = fromMaybeArray(req.headers[ImmichHeader.Checksum]);
console.log('AssetUploadInterceptor checksum:', checksum);
const response = await this.service.getUploadAssetIdByChecksum(req.user, checksum);
console.log('AssetUploadInterceptor response:', response);
if (response) {
res.status(200);
return of({ status: AssetMediaStatus.DUPLICATE, id: response.id });

View File

@@ -103,23 +103,6 @@ export class FileUploadInterceptor implements NestInterceptor {
}
private filename(request: AuthRequest, file: Express.Multer.File, callback: DiskStorageCallback) {
console.log('File upload started:', file.originalname);
request.on('data', () => {
console.log('Data event triggered for file upload:', file.originalname);
});
request.on('close', () => {
console.log('Request closed');
});
request.on('aborted', () => {
console.log('Request aborted, cleaning up file');
this.defaultStorage._removeFile(request, file, (error) => {
if (error) {
this.logger.warn('Request aborted, failed to cleanup file', error);
} else {
this.logger.log('Request aborted, file cleaned up successfully');
}
});
});
return callbackify(
() => this.assetService.getUploadFilename(asRequest(request, file)),
callback as Callback<string>,
@@ -145,15 +128,8 @@ export class FileUploadInterceptor implements NestInterceptor {
const hash = createHash('sha1');
file.stream.on('data', (chunk) => hash.update(chunk));
file.stream.on('error', (error) => {
this.logger.warn('Stream error while uploading file, cleaning up', error);
this.assetService.onUploadError(request, file).catch(this.logger.error);
callback(error);
});
console.log('File upload started:', file.originalname);
this.defaultStorage._handleFile(request, file, (error, info) => {
if (error) {
console.error('Error handling file upload:', error);
hash.destroy();
callback(error);
} else {

View File

@@ -131,7 +131,6 @@ export class AssetMediaService extends BaseService {
sidecarFile?: UploadFile,
): Promise<AssetMediaResponseDto> {
try {
console.log(`Uploading asset: ${file.originalPath}, size: ${file.size}`);
await this.requireAccess({
auth,
permission: Permission.AssetUpload,
@@ -139,25 +138,20 @@ export class AssetMediaService extends BaseService {
ids: [auth.user.id],
});
console.log(`User quota: ${auth.user.quotaSizeInBytes}, usage: ${auth.user.quotaUsageInBytes}`);
this.requireQuota(auth, file.size);
console.log(`Asset type: ${file.originalName}, checksum: ${file.checksum}`);
if (dto.livePhotoVideoId) {
await onBeforeLink(
{ asset: this.assetRepository, event: this.eventRepository },
{ userId: auth.user.id, livePhotoVideoId: dto.livePhotoVideoId },
);
}
console.log(`Creating asset with deviceAssetId: ${dto.deviceAssetId}, deviceId: ${dto.deviceId}`);
const asset = await this.create(auth.user.id, dto, file, sidecarFile);
console.log(`Asset created with id: ${asset.id}, originalPath: ${asset.originalPath}`);
await this.userRepository.updateUsage(auth.user.id, file.size);
return { id: asset.id, status: AssetMediaStatus.CREATED };
} catch (error: any) {
console.log(`Error uploading asset: ${error.message}, ${file.originalPath}`, error);
return this.handleUploadError(error, auth, file, sidecarFile);
}
}

View File

@@ -101,6 +101,10 @@ export class StorageService extends BaseService {
const savedValue = await this.systemMetadataRepository.get(SystemMetadataKey.MediaLocation);
let previous = savedValue?.location || '';
if (!previous && this.configRepository.getEnv().storage.mediaLocation) {
previous = current;
}
if (!previous) {
previous = path.startsWith('upload/') ? 'upload' : '/usr/src/app/upload';
}

6
web/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "immich-web",
"version": "1.137.2",
"version": "1.137.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "immich-web",
"version": "1.137.2",
"version": "1.137.3",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@formatjs/icu-messageformat-parser": "^2.9.8",
@@ -94,7 +94,7 @@
},
"../open-api/typescript-sdk": {
"name": "@immich/sdk",
"version": "1.137.2",
"version": "1.137.3",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@oazapfts/runtime": "^1.0.2"

View File

@@ -1,6 +1,6 @@
{
"name": "immich-web",
"version": "1.137.2",
"version": "1.137.3",
"license": "GNU Affero General Public License version 3",
"type": "module",
"scripts": {