1
0
mirror of https://github.com/immich-app/immich.git synced 2025-08-10 23:22:22 +02:00

Add information for uploading asset and error indication with error message for each failed upload. (#315)

* Added info box

* Fixed upload endpoint doesn't report error status code

* Added chip to show update error

* Added chip to show failed upload

* Add duplication check for upload

* Better duplication-checking placement

* Remove check for duplicated asset

* Added failed backup status route

* added page

* Display error card with thumbnail

* Improved styling

* Set thumbnail with better quality

* Remove force upload error
This commit is contained in:
Alex
2022-07-06 16:12:55 -05:00
committed by GitHub
parent 357f7d1c31
commit 58ec7553ea
19 changed files with 706 additions and 87 deletions

View File

@@ -15,6 +15,7 @@ import {
Delete,
Logger,
HttpCode,
BadRequestException,
} from '@nestjs/common';
import { JwtAuthGuard } from '../../modules/immich-jwt/guards/jwt-auth.guard';
import { AssetService } from './asset.service';
@@ -34,6 +35,7 @@ import { Queue } from 'bull';
import { IAssetUploadedJob } from '@app/job/index';
import { assetUploadedQueueName } from '@app/job/constants/queue-name.constant';
import { assetUploadedProcessorName } from '@app/job/constants/job-name.constant';
import { CheckDuplicateAssetDto } from './dto/check-duplicate-asset.dto';
@UseGuards(JwtAuthGuard)
@Controller('asset')
@@ -66,17 +68,16 @@ export class AssetController {
try {
const savedAsset = await this.assetService.createUserAsset(authUser, assetInfo, file.path, file.mimetype);
if (!savedAsset) {
return;
if (savedAsset) {
await this.assetUploadedQueue.add(
assetUploadedProcessorName,
{ asset: savedAsset, fileName: file.originalname, fileSize: file.size },
{ jobId: savedAsset.id },
);
}
await this.assetUploadedQueue.add(
assetUploadedProcessorName,
{ asset: savedAsset, fileName: file.originalname, fileSize: file.size },
{ jobId: savedAsset.id },
);
} catch (e) {
Logger.error(`Error receiving upload file ${e}`);
Logger.error(`Error uploading file ${e}`);
throw new BadRequestException(`Error uploading file`, `${e}`);
}
}
@@ -172,9 +173,9 @@ export class AssetController {
@HttpCode(200)
async checkDuplicateAsset(
@GetAuthUser() authUser: AuthUserDto,
@Body(ValidationPipe) { deviceAssetId }: { deviceAssetId: string },
@Body(ValidationPipe) checkDuplicateAssetDto: CheckDuplicateAssetDto,
) {
const res = await this.assetService.checkDuplicatedAsset(authUser, deviceAssetId);
const res = await this.assetService.checkDuplicatedAsset(authUser, checkDuplicateAssetDto);
return {
isExist: res,

View File

@@ -18,6 +18,7 @@ import { promisify } from 'util';
import { DeleteAssetDto } from './dto/delete-asset.dto';
import { SearchAssetDto } from './dto/search-asset.dto';
import fs from 'fs/promises';
import { CheckDuplicateAssetDto } from './dto/check-duplicate-asset.dto';
const fileInfo = promisify(stat);
@@ -58,15 +59,11 @@ export class AssetService {
asset.mimeType = mimeType;
asset.duration = assetInfo.duration || null;
try {
const createdAsset = await this.assetRepository.save(asset);
if (!createdAsset) {
throw new Error('Asset not created');
}
return createdAsset;
} catch (e) {
Logger.error(`Error Create New Asset ${e}`, 'createUserAsset');
const createdAsset = await this.assetRepository.save(asset);
if (!createdAsset) {
throw new Error('Asset not created');
}
return createdAsset;
}
public async getUserAssetsByDeviceId(authUser: AuthUserDto, deviceId: string) {
@@ -439,10 +436,11 @@ export class AssetService {
);
}
async checkDuplicatedAsset(authUser: AuthUserDto, deviceAssetId: string) {
async checkDuplicatedAsset(authUser: AuthUserDto, checkDuplicateAssetDto: CheckDuplicateAssetDto) {
const res = await this.assetRepository.findOne({
where: {
deviceAssetId,
deviceAssetId: checkDuplicateAssetDto.deviceAssetId,
deviceId: checkDuplicateAssetDto.deviceId,
userId: authUser.id,
},
});

View File

@@ -0,0 +1,9 @@
import { IsNotEmpty } from 'class-validator';
export class CheckDuplicateAssetDto {
@IsNotEmpty()
deviceAssetId!: string;
@IsNotEmpty()
deviceId!: string;
}

View File

@@ -3,7 +3,7 @@
export const serverVersion = {
major: 1,
minor: 16,
minor: 17,
patch: 0,
build: 23,
build: 25,
};