2018-03-31 03:30:30 +08:00
|
|
|
import {DirectoryDTO} from '../../../common/entities/DirectoryDTO';
|
2018-11-29 06:49:33 +08:00
|
|
|
import {IGalleryManager, RandomQuery} from '../interfaces/IGalleryManager';
|
2018-03-31 03:30:30 +08:00
|
|
|
import * as path from 'path';
|
|
|
|
import * as fs from 'fs';
|
|
|
|
import {DiskManager} from '../DiskManger';
|
|
|
|
import {ProjectPath} from '../../ProjectPath';
|
|
|
|
import {Config} from '../../../common/config/private/Config';
|
|
|
|
import {ReIndexingSensitivity} from '../../../common/config/private/IPrivateConfig';
|
2018-10-22 06:24:17 +08:00
|
|
|
import {PhotoDTO} from '../../../common/entities/PhotoDTO';
|
2019-01-07 06:15:52 +08:00
|
|
|
import {DiskMangerWorker} from '../threading/DiskMangerWorker';
|
2016-04-22 19:23:44 +08:00
|
|
|
|
2016-05-09 23:04:56 +08:00
|
|
|
export class GalleryManager implements IGalleryManager {
|
2016-04-22 19:23:44 +08:00
|
|
|
|
2017-07-21 05:00:49 +08:00
|
|
|
public listDirectory(relativeDirectoryName: string, knownLastModified?: number, knownLastScanned?: number): Promise<DirectoryDTO> {
|
2018-05-13 00:19:51 +08:00
|
|
|
// If it seems that the content did not changed, do not work on it
|
2017-07-20 02:47:09 +08:00
|
|
|
if (knownLastModified && knownLastScanned) {
|
|
|
|
const stat = fs.statSync(path.join(ProjectPath.ImageFolder, relativeDirectoryName));
|
2019-01-07 06:15:52 +08:00
|
|
|
const lastModified = DiskMangerWorker.calcLastModified(stat);
|
2017-07-28 05:10:16 +08:00
|
|
|
if (Date.now() - knownLastScanned <= Config.Server.indexing.cachedFolderTimeout &&
|
2018-05-13 00:19:51 +08:00
|
|
|
lastModified === knownLastModified &&
|
2017-07-28 05:10:16 +08:00
|
|
|
Config.Server.indexing.reIndexingSensitivity < ReIndexingSensitivity.high) {
|
2017-07-21 05:00:49 +08:00
|
|
|
return Promise.resolve(null);
|
2017-07-20 02:47:09 +08:00
|
|
|
}
|
|
|
|
}
|
2017-07-04 01:17:49 +08:00
|
|
|
return DiskManager.scanDirectory(relativeDirectoryName);
|
|
|
|
}
|
2016-04-22 19:23:44 +08:00
|
|
|
|
2018-11-29 06:49:33 +08:00
|
|
|
getRandomPhoto(queryFilter: RandomQuery): Promise<PhotoDTO> {
|
2018-11-05 02:28:32 +08:00
|
|
|
throw new Error('Random media is not supported without database');
|
2018-10-22 06:24:17 +08:00
|
|
|
}
|
2017-07-04 01:17:49 +08:00
|
|
|
}
|