diff --git a/backend/middlewares/AdminMWs.ts b/backend/middlewares/AdminMWs.ts index 940f688..11e1ee7 100644 --- a/backend/middlewares/AdminMWs.ts +++ b/backend/middlewares/AdminMWs.ts @@ -43,7 +43,7 @@ export class AdminMWs { Logger.info(LOG_TAG, 'new config:'); Logger.info(LOG_TAG, JSON.stringify(Config, null, '\t')); - ObjectManagerRepository.reset(); + await ObjectManagerRepository.reset(); if (Config.Server.database.type !== DatabaseType.memory) { await ObjectManagerRepository.InitSQLManagers(); } else { @@ -80,6 +80,7 @@ export class AdminMWs { return next(new ErrorDTO(ErrorCodes.SETTINGS_ERROR, 'Settings error: ' + JSON.stringify(err, null, ' '), err)); } } + public static async updateVideoSettings(req: Request, res: Response, next: NextFunction) { if ((typeof req.body === 'undefined') || (typeof req.body.settings === 'undefined')) { return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'settings is needed')); diff --git a/backend/middlewares/GalleryMWs.ts b/backend/middlewares/GalleryMWs.ts index c39515c..2835520 100644 --- a/backend/middlewares/GalleryMWs.ts +++ b/backend/middlewares/GalleryMWs.ts @@ -108,43 +108,46 @@ export class GalleryMWs { if (Config.Client.RandomPhoto.enabled === false) { return next(); } - const query: RandomQuery = {}; - if (req.query.directory) { - query.directory = req.query.directory; - } - if (req.query.recursive === 'true') { - query.recursive = true; - } - if (req.query.orientation) { - query.orientation = parseInt(req.query.orientation.toString(), 10); - } - if (req.query.maxResolution) { - query.maxResolution = parseFloat(req.query.maxResolution.toString()); - } - if (req.query.minResolution) { - query.minResolution = parseFloat(req.query.minResolution.toString()); - } - if (req.query.fromDate) { - query.fromDate = new Date(req.query.fromDate); - } - if (req.query.toDate) { - query.toDate = new Date(req.query.toDate); - } - if (query.minResolution && query.maxResolution && query.maxResolution < query.minResolution) { - return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'Input error: min resolution is greater than the max resolution')); - } - if (query.toDate && query.fromDate && query.toDate.getTime() < query.fromDate.getTime()) { - return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'Input error: to date is earlier than from date')); - } + try { + const query: RandomQuery = {}; + if (req.query.directory) { + query.directory = req.query.directory; + } + if (req.query.recursive === 'true') { + query.recursive = true; + } + if (req.query.orientation) { + query.orientation = parseInt(req.query.orientation.toString(), 10); + } + if (req.query.maxResolution) { + query.maxResolution = parseFloat(req.query.maxResolution.toString()); + } + if (req.query.minResolution) { + query.minResolution = parseFloat(req.query.minResolution.toString()); + } + if (req.query.fromDate) { + query.fromDate = new Date(req.query.fromDate); + } + if (req.query.toDate) { + query.toDate = new Date(req.query.toDate); + } + if (query.minResolution && query.maxResolution && query.maxResolution < query.minResolution) { + return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'Input error: min resolution is greater than the max resolution')); + } + if (query.toDate && query.fromDate && query.toDate.getTime() < query.fromDate.getTime()) { + return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'Input error: to date is earlier than from date')); + } - const photo = await ObjectManagerRepository.getInstance() - .GalleryManager.getRandomPhoto(query); - if (!photo) { - return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'No photo found')); + const photo = await ObjectManagerRepository.getInstance() + .GalleryManager.getRandomPhoto(query); + if (!photo) { + return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'No photo found')); + } + + req.params.mediaPath = path.join(photo.directory.path, photo.directory.name, photo.name); + } catch (e) { + return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, 'Can\'t get random photo: ' + e.toString())); } - - req.params.mediaPath = path.join(photo.directory.path, photo.directory.name, photo.name); - return next(); } diff --git a/backend/middlewares/thumbnail/ThumbnailGeneratorMWs.ts b/backend/middlewares/thumbnail/ThumbnailGeneratorMWs.ts index 9efc34a..fc7443d 100644 --- a/backend/middlewares/thumbnail/ThumbnailGeneratorMWs.ts +++ b/backend/middlewares/thumbnail/ThumbnailGeneratorMWs.ts @@ -174,7 +174,8 @@ export class ThumbnailGeneratorMWs { await this.taskQue.execute(input); return next(); } catch (error) { - return next(new ErrorDTO(ErrorCodes.THUMBNAIL_GENERATION_ERROR, 'Error during generating thumbnail: ' + input.mediaPath, error.toString())); + return next(new ErrorDTO(ErrorCodes.THUMBNAIL_GENERATION_ERROR, + 'Error during generating thumbnail: ' + input.mediaPath, error.toString())); } } diff --git a/backend/model/sql/GalleryManager.ts b/backend/model/sql/GalleryManager.ts index 2d4df23..ac2916b 100644 --- a/backend/model/sql/GalleryManager.ts +++ b/backend/model/sql/GalleryManager.ts @@ -10,10 +10,10 @@ import {Utils} from '../../../common/Utils'; import {ProjectPath} from '../../ProjectPath'; import {Config} from '../../../common/config/private/Config'; import {ISQLGalleryManager} from './IGalleryManager'; -import {ReIndexingSensitivity} from '../../../common/config/private/IPrivateConfig'; +import {DatabaseType, ReIndexingSensitivity} from '../../../common/config/private/IPrivateConfig'; import {PhotoDTO} from '../../../common/entities/PhotoDTO'; import {OrientationType} from '../../../common/entities/RandomQueryDTO'; -import {Connection, Brackets} from 'typeorm'; +import {Brackets, Connection} from 'typeorm'; import {MediaEntity} from './enitites/MediaEntity'; import {MediaDTO} from '../../../common/entities/MediaDTO'; import {VideoEntity} from './enitites/VideoEntity'; @@ -264,34 +264,36 @@ export class GalleryManager implements IGalleryManager, ISQLGalleryManager { } if (queryFilter.fromDate) { - query.andWhere('media.metadata.creationDate >= :fromDate', { + query.andWhere('photo.metadata.creationDate >= :fromDate', { fromDate: queryFilter.fromDate.getTime() }); } if (queryFilter.toDate) { - query.andWhere('media.metadata.creationDate <= :toDate', { + query.andWhere('photo.metadata.creationDate <= :toDate', { toDate: queryFilter.toDate.getTime() }); } if (queryFilter.minResolution) { - query.andWhere('media.metadata.size.width * media.metadata.size.height >= :minRes', { + query.andWhere('photo.metadata.size.width * photo.metadata.size.height >= :minRes', { minRes: queryFilter.minResolution * 1000 * 1000 }); } if (queryFilter.maxResolution) { - query.andWhere('media.metadata.size.width * media.metadata.size.height <= :maxRes', { + query.andWhere('photo.metadata.size.width * photo.metadata.size.height <= :maxRes', { maxRes: queryFilter.maxResolution * 1000 * 1000 }); } if (queryFilter.orientation === OrientationType.landscape) { - query.andWhere('media.metadata.size.width >= media.metadata.size.height'); + query.andWhere('photo.metadata.size.width >= photo.metadata.size.height'); } if (queryFilter.orientation === OrientationType.portrait) { - query.andWhere('media.metadata.size.width <= media.metadata.size.height'); + query.andWhere('photo.metadata.size.width <= photo.metadata.size.height'); } - + if (Config.Server.database.type === DatabaseType.mysql) { + return await query.groupBy('RAND(), photo.id').limit(1).getOne(); + } return await query.groupBy('RANDOM()').limit(1).getOne(); }