diff --git a/services/jobqueue.service.ts b/services/jobqueue.service.ts index 5e1cc08..a6eea9d 100644 --- a/services/jobqueue.service.ts +++ b/services/jobqueue.service.ts @@ -51,9 +51,10 @@ export default class JobQueueService extends Service { } }, }, + enqueue: { queue: true, - rest: "/GET enqueue", + rest: "GET /enqueue", handler: async ( ctx: Context<{ queueName: string; description: string }> ) => { @@ -73,6 +74,49 @@ export default class JobQueueService extends Service { return job.id; }, }, + checkForDeletedTorrents: { + queue: true, + rest: "GET /checkForDeletedTorrents", + handler: async (ctx: Context<{}>) => { + const job = await this.localQueue( + ctx, + "deletedTorrents", + "bird", + { + repeat: { + every: 10000, // Repeat every 10000 ms + limit: 100, // Limit to 100 repeats + }, + } + ); + return job; + }, + }, + deletedTorrents: { + rest: "GET /deletedTorrents", + handler: async ( + ctx: Context<{ + birdName: String; + }> + ) => { + console.info( + `Scheduled job for deleting torrents from mongo fired.` + ); + // 1. query mongo for infohashes + const infoHashes = await this.broker.call( + "library.getInfoHashes", + {} + ); + // 2. query qbittorrent to see if they exist + const torrents: any = await this.broker.call( + "qbittorrent.getTorrentRealTimeStats", + { infoHashes } + ); + console.log("sudarshan", torrents); + // 3. If they do, don't do anything + // 4. If they don't purge them from mongo + }, + }, // Comic Book Import Job Queue "enqueue.async": { handler: async ( @@ -437,6 +481,7 @@ export default class JobQueueService extends Service { }); }, }, + methods: {}, }); } } diff --git a/services/library.service.ts b/services/library.service.ts index 26ae9b2..066aed3 100644 --- a/services/library.service.ts +++ b/services/library.service.ts @@ -444,20 +444,45 @@ export default class ImportService extends Service { infoHash, } = ctx.params; console.log(JSON.stringify(ctx.params, null, 4)); - - return await Comic.findByIdAndUpdate( - new ObjectId(comicObjectId), - { - $push: { - "acquisition.torrent": { - infoHash, - name, - announce, + try { + return await Comic.findByIdAndUpdate( + new ObjectId(comicObjectId), + { + $push: { + "acquisition.torrent": { + infoHash, + name, + announce, + }, }, }, - }, - { new: true, safe: true, upsert: true } - ); + { new: true, safe: true, upsert: true } + ); + } catch (err) { + console.log(err); + } + }, + }, + getInfoHashes: { + rest: "GET /getInfoHashes", + handler: async (ctx: Context<{}>) => { + try { + return await Comic.aggregate([ + { + $unwind: "$acquisition.torrent", + }, + { + $group: { + _id: "$_id", + infoHashes: { + $push: "$acquisition.torrent.infoHash", + }, + }, + }, + ]); + } catch (err) { + return err; + } }, }, getComicBooks: { diff --git a/services/settings.service.ts b/services/settings.service.ts index 35666bf..361ca1f 100644 --- a/services/settings.service.ts +++ b/services/settings.service.ts @@ -38,7 +38,6 @@ export default class SettingsService extends Service { // Find the settings with the dynamic projection const settings = await Settings.find({}, projection); - // Check if settings are empty if (settings.length === 0) { return {}; }