1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/backend/model/sql/IndexingManager.ts
2017-07-25 21:09:37 +02:00

81 lines
2.5 KiB
TypeScript

import {IIndexingManager} from "../interfaces/IIndexingManager";
import {IndexingProgressDTO} from "../../../common/entities/settings/IndexingProgressDTO";
import {ObjectManagerRepository} from "../ObjectManagerRepository";
import {ISQLGalleryManager} from "./IGalleryManager";
import * as path from "path";
import {SQLConnection} from "./SQLConnection";
import {DirectoryEntity} from "./enitites/DirectoryEntity";
import {Logger} from "../../Logger";
const LOG_TAG = "[IndexingManager]";
export class IndexingManager implements IIndexingManager {
directoriesToIndex: string[] = [];
indexingProgress = null;
enabled = false;
private indexNewDirectory = async () => {
if (this.directoriesToIndex.length == 0) {
this.indexingProgress = null;
if (global.gc) {
global.gc();
}
return;
}
const directory = this.directoriesToIndex.shift();
this.indexingProgress.current = directory;
this.indexingProgress.left = this.directoriesToIndex.length;
const scanned = await (<ISQLGalleryManager>ObjectManagerRepository.getInstance().GalleryManager).indexDirectory(directory);
if (this.enabled == false) {
return;
}
this.indexingProgress.indexed++;
for (let i = 0; i < scanned.directories.length; i++) {
this.directoriesToIndex.push(path.join(scanned.directories[i].path, scanned.directories[i].name))
}
process.nextTick(this.indexNewDirectory);
};
startIndexing(): void {
if (this.directoriesToIndex.length == 0 && this.enabled == false) {
Logger.info(LOG_TAG, "Starting indexing");
this.indexingProgress = <IndexingProgressDTO>{
indexed: 0,
left: 0,
current: ""
};
this.directoriesToIndex.push("/");
this.enabled = true;
this.indexNewDirectory();
} else {
Logger.info(LOG_TAG, "Already indexing..");
}
}
getProgress(): IndexingProgressDTO {
return this.indexingProgress;
}
cancelIndexing(): void {
Logger.info(LOG_TAG, "Canceling indexing");
this.directoriesToIndex = [];
this.indexingProgress = null;
this.enabled = false;
if (global.gc) {
global.gc();
}
}
async reset(): Promise<void> {
Logger.info(LOG_TAG, "Resetting DB");
this.directoriesToIndex = [];
this.indexingProgress = null;
this.enabled = false;
const connection = await SQLConnection.getConnection();
return connection
.getRepository(DirectoryEntity)
.createQueryBuilder("directory")
.delete()
.execute();
}
}