1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2025-01-14 14:43:17 +08:00

fixing mysql random error

This commit is contained in:
Patrik J. Braun 2018-11-21 16:07:37 +01:00
parent 2110054f43
commit 5625f37d6b
4 changed files with 53 additions and 46 deletions

View File

@ -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'));

View File

@ -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();
}

View File

@ -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()));
}
}

View File

@ -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();
}