refactor video files scanner

This commit is contained in:
Jurgis Sakalauskas
2023-01-06 15:58:49 +02:00
parent 1631a97417
commit 8d354027fc
24 changed files with 486 additions and 222 deletions
@@ -0,0 +1,59 @@
import { Injectable } from '@nestjs/common';
import { VideoFilesScannerService } from './Scanner/video-files-scanner.service';
import { VideoFilesUpdateRepository } from './video-files-update.repository';
import { FileEntityExpander } from './Expander/file-entity.expander';
import { FileEntity } from '../Entity/file.entity';
import { StreamProviderEnum } from '../../Streamer/ReadStreamProvider/stream-provider.enum';
@Injectable()
export class VideoFilesUpdateService {
constructor(
private readonly scanner: VideoFilesScannerService,
private readonly repository: VideoFilesUpdateRepository,
private readonly expander: FileEntityExpander,
) {}
async updateFsVideoFiles(): Promise<void> {
const [filesInFs, filesToRelativePaths] = await this.scanner.scanNewFiles();
await this.repository.markRemovedFilesAsDeleted(filesInFs);
const filesInDb = await this.repository.getMatchingPaths(filesInFs);
const filesToAddToDb = filesInFs.filter(
(filePath) => !filesInDb.includes(filePath),
);
const entitiesToSave = [];
for (const fileToAddToDb of filesToAddToDb) {
if (this.checkPathToIgnore(fileToAddToDb)) {
continue;
}
const fileEntity = await this.buildFileEntity(
fileToAddToDb,
filesToRelativePaths[fileToAddToDb],
);
entitiesToSave.push(fileEntity);
}
await this.repository.saveFiles(entitiesToSave);
}
private checkPathToIgnore(filePath: string): boolean {
//todo - move to separate provider, include in settings
return filePath.indexOf('AOE1') > -1;
}
private async buildFileEntity(
path: string,
relativePath: string,
): Promise<FileEntity> {
const fileEntity = await this.repository.findOrCreateFile(path, false);
fileEntity.relativePath = relativePath;
fileEntity.streamProvider = StreamProviderEnum.fs;
return await this.expander.expand(fileEntity);
}
}