store original

This commit is contained in:
rubikscraft
2022-04-21 17:27:20 +02:00
parent f1188483ad
commit cd7c3b387c
4 changed files with 35 additions and 18 deletions

View File

@@ -9,7 +9,6 @@ import {
import { AsyncFailable, Fail } from 'picsur-shared/dist/types'; import { AsyncFailable, Fail } from 'picsur-shared/dist/types';
import { QOIColorSpace, QOIdecode, QOIencode } from 'qoi-img'; import { QOIColorSpace, QOIdecode, QOIencode } from 'qoi-img';
import sharp from 'sharp'; import sharp from 'sharp';
import { UsrPreferenceService } from '../../collections/preference-db/usr-preference-db.service';
interface ProcessResult { interface ProcessResult {
image: Buffer; image: Buffer;
@@ -18,8 +17,6 @@ interface ProcessResult {
@Injectable() @Injectable()
export class ImageProcessorService { export class ImageProcessorService {
constructor(private readonly userPref: UsrPreferenceService) {}
public async process( public async process(
image: Buffer, image: Buffer,
mime: FullMime, mime: FullMime,

View File

@@ -1,11 +1,13 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { fileTypeFromBuffer, FileTypeResult } from 'file-type'; import { fileTypeFromBuffer, FileTypeResult } from 'file-type';
import { FullMime } from 'picsur-shared/dist/dto/mimes.dto'; import { FullMime } from 'picsur-shared/dist/dto/mimes.dto';
import { UsrPreference } from 'picsur-shared/dist/dto/usr-preferences.dto';
import { AsyncFailable, HasFailed } from 'picsur-shared/dist/types'; import { AsyncFailable, HasFailed } from 'picsur-shared/dist/types';
import { ParseMime } from 'picsur-shared/dist/util/parse-mime'; import { ParseMime } from 'picsur-shared/dist/util/parse-mime';
import { IsQOI } from 'qoi-img'; import { IsQOI } from 'qoi-img';
import { ImageDBService } from '../../collections/image-db/image-db.service'; import { ImageDBService } from '../../collections/image-db/image-db.service';
import { ImageFileDBService } from '../../collections/image-db/image-file-db.service'; import { ImageFileDBService } from '../../collections/image-db/image-file-db.service';
import { UsrPreferenceService } from '../../collections/preference-db/usr-preference-db.service';
import { ImageFileType } from '../../models/constants/image-file-types.const'; import { ImageFileType } from '../../models/constants/image-file-types.const';
import { EImageFileBackend } from '../../models/entities/image-file.entity'; import { EImageFileBackend } from '../../models/entities/image-file.entity';
import { EImageBackend } from '../../models/entities/image.entity'; import { EImageBackend } from '../../models/entities/image.entity';
@@ -21,6 +23,7 @@ export class ImageManagerService {
private readonly imagesService: ImageDBService, private readonly imagesService: ImageDBService,
private readonly imageFilesService: ImageFileDBService, private readonly imageFilesService: ImageFileDBService,
private readonly processService: ImageProcessorService, private readonly processService: ImageProcessorService,
private readonly userPref: UsrPreferenceService,
) {} ) {}
public async retrieveInfo(id: string): AsyncFailable<EImageBackend> { public async retrieveInfo(id: string): AsyncFailable<EImageBackend> {
@@ -40,6 +43,14 @@ export class ImageManagerService {
const fullMime = await this.getFullMimeFromBuffer(image); const fullMime = await this.getFullMimeFromBuffer(image);
if (HasFailed(fullMime)) return fullMime; if (HasFailed(fullMime)) return fullMime;
// Check if need to save orignal
const keepOriginal = await this.userPref.getBooleanPreference(
userid,
UsrPreference.KeepOriginal,
);
if (HasFailed(keepOriginal)) return keepOriginal;
// Process
const processResult = await this.processService.process( const processResult = await this.processService.process(
image, image,
fullMime, fullMime,
@@ -47,6 +58,7 @@ export class ImageManagerService {
); );
if (HasFailed(processResult)) return processResult; if (HasFailed(processResult)) return processResult;
// Save processed to db
const imageEntity = await this.imagesService.create(); const imageEntity = await this.imagesService.create();
if (HasFailed(imageEntity)) return imageEntity; if (HasFailed(imageEntity)) return imageEntity;
@@ -58,15 +70,15 @@ export class ImageManagerService {
); );
if (HasFailed(imageFileEntity)) return imageFileEntity; if (HasFailed(imageFileEntity)) return imageFileEntity;
// // nothing happens right now if (keepOriginal) {
// const keepOriginal = await this.userPref.getBooleanPreference( const originalFileEntity = await this.imageFilesService.setFile(
// userid, imageEntity.id,
// UsrPreference.KeepOriginal, ImageFileType.ORIGINAL,
// ); image,
// if (HasFailed(keepOriginal)) return keepOriginal; fullMime.mime,
);
// if (keepOriginal) { if (HasFailed(originalFileEntity)) return originalFileEntity;
// } }
return imageEntity; return imageEntity;
} }

View File

@@ -1,6 +1,6 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ApiResponseSchema } from 'picsur-shared/dist/dto/api/api.dto'; import { ApiResponseSchema } from 'picsur-shared/dist/dto/api/api.dto';
import { MimeExt } from 'picsur-shared/dist/dto/mimes.dto'; import { Mime2Ext } from 'picsur-shared/dist/dto/mimes.dto';
import { AsyncFailable, Fail, HasFailed } from 'picsur-shared/dist/types'; import { AsyncFailable, Fail, HasFailed } from 'picsur-shared/dist/types';
import { ZodDtoStatic } from 'picsur-shared/dist/util/create-zod-dto'; import { ZodDtoStatic } from 'picsur-shared/dist/util/create-zod-dto';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@@ -130,7 +130,7 @@ export class ApiService {
} }
} }
const mimeTypeExt = MimeExt(mimeType); const mimeTypeExt = Mime2Ext(mimeType);
if (mimeTypeExt !== undefined && !name.endsWith(mimeTypeExt)) { if (mimeTypeExt !== undefined && !name.endsWith(mimeTypeExt)) {
name += '.' + mimeTypeExt; name += '.' + mimeTypeExt;
} }

View File

@@ -32,7 +32,7 @@ export interface FullMime {
type: SupportedMimeCategory; type: SupportedMimeCategory;
} }
export const MimeExtMap: { export const Mime2ExtMap: {
[key in ImageMime | AnimMime]: string; [key in ImageMime | AnimMime]: string;
} = { } = {
[ImageMime.JPEG]: 'jpg', [ImageMime.JPEG]: 'jpg',
@@ -47,6 +47,14 @@ export const MimeExtMap: {
[AnimMime.GIF]: 'gif', [AnimMime.GIF]: 'gif',
}; };
export const MimeExt = (mime: string): string | undefined => { export const Ext2MimeMap: {
return MimeExtMap[mime as ImageMime | AnimMime]; [key: string]: string;
} } = Object.fromEntries(Object.entries(Mime2ExtMap).map(([k, v]) => [v, k]));
export const Mime2Ext = (mime: string): string | undefined => {
return Mime2ExtMap[mime as ImageMime | AnimMime];
};
export const Ext2Mime = (ext: string): string | undefined => {
return Ext2MimeMap[ext];
};