| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- import { Injectable } from '@nestjs/common';
- import { ConfigService } from './config.service';
- import { DatasetsService } from './datasets.service';
- import { DbService } from './db.service';
- import { HandbrakeService } from './handbrake.service';
- import { MaintenanceService } from './maintenance.service';
- import { TaskQueueService } from './task-queue.service';
- import { WatcherService } from './watcher.service';
- @Injectable()
- export class AppService {
- constructor(
- private readonly db: DbService,
- private readonly watcher: WatcherService,
- private readonly config: ConfigService,
- private readonly maintenance: MaintenanceService,
- private readonly handbrake: HandbrakeService,
- private readonly datasets: DatasetsService,
- private readonly taskQueue: TaskQueueService,
- ) {}
- listDatasets() {
- return this.datasets.getEnabledDatasetPaths();
- }
- listAllDatasets() {
- return this.datasets.getAllDatasetNames();
- }
- getDatasetConfig() {
- return this.datasets.getDatasetConfig();
- }
- getTotalSuccessfulFiles() {
- const datasetNames = this.datasets.getAllDatasetNames();
- let total = 0;
- for (const datasetName of datasetNames) {
- if (datasetName) {
- const files = this.db.getAllFiles(datasetName);
- total += files.length;
- }
- }
- return total;
- }
- getTotalProcessedFiles() {
- const datasetNames = this.datasets.getAllDatasetNames();
- let total = 0;
- for (const datasetName of datasetNames) {
- if (datasetName) {
- const files = this.db.getAllFiles(datasetName);
- total += files.length;
- }
- }
- return total;
- }
- deleteExpiredFiles(days?: number) {
- return this.db.deleteExpiredFiles(days);
- }
- migrateJsonToSqlite(opts?: { datasets?: string[]; dataDir?: string }) {
- return this.db.migrateJsonToSqlite(opts);
- }
- processWithHandbrake(input: string, output: string, preset: string) {
- return this.handbrake.processWithHandbrake(input, output, preset);
- }
- // Task queue methods
- createTask(taskData: {
- dataset: string;
- input: string;
- output: string;
- preset: string;
- priority?: number;
- status?: string;
- isRequeue?: boolean;
- }) {
- return this.taskQueue.createTask(taskData);
- }
- getQueueStatus() {
- return this.taskQueue.getQueueStatus();
- }
- getQueueSettings() {
- return this.taskQueue.getQueueSettings();
- }
- updateQueueSettings(settings: any) {
- return this.taskQueue.updateQueueSettings(settings);
- }
- getAllTasks() {
- return this.db.getAllTasks();
- }
- getTaskById(id: number) {
- return this.db.getTaskById(id);
- }
- updateTask(id: number, updates: any) {
- return this.db.updateTask(id, updates);
- }
- deleteTask(id: number) {
- return this.db.deleteTask(id);
- }
- getHandbrakePresets() {
- return this.handbrake.getPresetList();
- }
- cleanup(file: string, dirs: string[]) {
- return this.maintenance.cleanup(file, dirs);
- }
- purge(dirs: string[], dayMs?: number, cleanerMs?: number) {
- return this.maintenance.purge(dirs, dayMs, cleanerMs);
- }
- prune(dirs: string[]) {
- return this.maintenance.prune(dirs);
- }
- getSettings(key?: string, defaultValue?: any) {
- return this.config.getSettings(key, defaultValue);
- }
- setSettings(settings: Record<string, any>) {
- return this.config.setSettings(settings);
- }
- deleteSetting(key: string) {
- return this.config.deleteSetting(key);
- }
- getConfigFile(name: string) {
- return this.config.getConfigFile(name);
- }
- listConfigs() {
- return this.config.listConfigs();
- }
- startWatcher(watches: string[], options?: any) {
- return this.watcher.start(watches, options);
- }
- async stopWatcher() {
- return this.watcher.stop();
- }
- watcherStatus() {
- return this.watcher.status();
- }
- startTaskProcessing() {
- return this.taskQueue.start();
- }
- stopTaskProcessing(graceful = true) {
- return this.taskQueue.stop(graceful);
- }
- taskProcessingStatus() {
- return this.taskQueue.getQueueStatus();
- }
- // Task maintenance methods
- cleanupTasksByStatus(status: string, olderThanDays?: number) {
- return this.db.deleteTasksByStatus(status, olderThanDays);
- }
- cleanupOldTasks(days: number) {
- return this.db.deleteTasksOlderThan(days);
- }
- getTaskStats() {
- return this.db.getTaskStats();
- }
- archiveOldTasks(daysOld: number = 30): { changes?: number } {
- return this.db.archiveOldTasks(daysOld);
- }
- // Purge all tasks
- purgeAllTasks() {
- return this.db.purgeAllTasks();
- }
- // Duplicate management
- async scanDuplicateFiles(resetExisting?: boolean) {
- return await this.maintenance.findDuplicateFiles({ resetExisting });
- }
- listDuplicateGroups(status?: string, dataset?: string) {
- return this.db.listDuplicateGroups(status, dataset);
- }
- markDuplicateGroup(
- id: number,
- status: 'pending' | 'reviewed' | 'purged',
- note?: string,
- ) {
- return this.db.markDuplicateGroup(id, status, note);
- }
- purgeDuplicateFiles(id: number, files: string[], note?: string) {
- return this.maintenance.purgeDuplicateFiles(id, files, note);
- }
- // Destination file indexing
- async indexDestinationFiles(
- dataset: string,
- destination: string,
- options?: { reindex?: boolean; batchSize?: number },
- ) {
- return await this.maintenance.indexDestinationFiles(
- dataset,
- destination,
- options || {},
- );
- }
- async indexSingleFile(dataset: string, filePath: string) {
- return await this.maintenance.indexSingleFile(dataset, filePath);
- }
- async getIndexedDuplicateStats(dataset?: string) {
- return await this.maintenance.getIndexedDuplicateStats(dataset);
- }
- getDestinationFileCount(dataset: string, destination?: string) {
- return this.db.getDestinationFileCount(dataset, destination);
- }
- clearDestinationFiles(dataset: string, destination?: string) {
- return this.db.clearDestinationFiles(dataset, destination);
- }
- removeDuplicateFileEntries() {
- return this.db.removeDuplicateFileEntries();
- }
- // Scheduled maintenance
- scheduledTaskCleanup() {
- return this.maintenance.scheduledTaskCleanup();
- }
- getHello(): string {
- return 'Hello World!';
- }
- findFile(dataset: string, file: string) {
- return this.db.findFile(dataset, file);
- }
- setFile(dataset: string, file: string, payload: any) {
- return this.db.setFile(dataset, file, payload);
- }
- removeFile(dataset: string, file: string, soft = true) {
- return this.db.removeFile(dataset, file, soft);
- }
- clearAllFiles() {
- return this.db.clearAllFiles();
- }
- getAllFiles(dataset: string) {
- return this.db.getAllFiles(dataset);
- }
- getDeletedOlderThan(dataset: string, isoDate: string) {
- return this.db.getDeletedOlderThan(dataset, isoDate);
- }
- }
|