فهرست منبع

database updates

Timothy Pomeroy 4 سال پیش
والد
کامیت
961fb11c11
6فایلهای تغییر یافته به همراه42 افزوده شده و 12797 حذف شده
  1. 0 98
      data/kids.json
  2. 0 2597
      data/movies.json
  3. 0 10017
      data/pr0n.json
  4. 1 51
      data/radarr.json
  5. 1 9
      data/tvshows.json
  6. 40 25
      index.js

+ 0 - 98
data/kids.json

@@ -1,96 +1,5 @@
 {
   "files": [
-    {
-      "input": "/Shares/Torrents/finished/Kids/Dragon.Rider.2021.HDRip.XviD.AC3-EVO/Dragon.Rider.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Dragon Rider (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-02-19T05:14:08.312Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Earwig and the Witch.2021.HDRip.XviD.AC3-EVO/Earwig and the Witch.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Earwig and the Witch (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-02-19T05:14:08.352Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Scooby.Doo.The.Sword.And.The.Scoob.2021.DVDRip.XviD.AC3-EVO/Scooby.Doo.The.Sword.And.The.Scoob.2021.DVDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Scooby Doo the Sword and the Scoob (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-02-19T05:14:08.382Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/The.Donkey.King.2020.HDRip.XviD.AC3-EVO/The.Donkey.King.2020.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/The Donkey King (2020).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-02-19T05:14:08.415Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Two.by.Two.Overboard.2021.HDRip.XviD.AC3-EVO/Two.by.Two.Overboard.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Two by Two Overboard (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-02-19T05:14:08.471Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Raya.and.the.Last.Dragon.2021.HDRip.XviD.AC3-EVO/Raya.and.the.Last.Dragon.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Raya and the Last Dragon (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-03-05T16:06:43.392Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/The.Clockwork.Girl.2021.HDRip.XviD.AC3-EVO/The.Clockwork.Girl.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/The Clockwork Girl (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-04-22T05:11:08.307Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Justice.Society.World.War.II.2021.HDRip.XviD.AC3-EVO/Justice.Society.World.War.II.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Justice Society World War Ii (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-04-27T02:30:16.143Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Cruella.2021.HDRip.XviD.AC3-EVO/Cruella.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Cruella (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-07-08T18:54:34.718Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Riverdance.The.Animated.Adventure.2021.HDRip.XviD.AC3-EVO/Riverdance.The.Animated.Adventure.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Riverdance the Animated Adventure (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-07-08T18:54:34.735Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Wish.Dragon.2021.HDRip.XviD.AC3-EVO/Wish.Dragon.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Wish Dragon (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-07-08T18:54:34.767Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Batman.The.Long.Halloween.Part.2.2021.HDRip.XviD.AC3-EVO/Batman.The.Long.Halloween.Part.2.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Batman the Long Halloween Part 2 (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-07-27T15:11:54.073Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Spirit.Untamed.2021.BRRip.XviD.AC3-EVO/Spirit.Untamed.2021.BRRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Spirit Untamed (2021).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-09-29T05:09:38.252Z"
-    },
     {
       "input": "/Shares/Torrents/finished/Kids/Around.the.World.in.80.Days.2021.HDRip.XviD.AC3-EVO/Around.the.World.in.80.Days.2021.HDRip.XviD.AC3-EVO.avi",
       "output": "/Shares/Movies/Kids/Around the World in 80 Days (2021).m4v",
@@ -98,13 +7,6 @@
       "processed": true,
       "date": "2021-12-19T22:02:57.456Z"
     },
-    {
-      "input": "/Shares/Torrents/finished/Kids/Clifford.the.Big.Red.Dog.2021.HDRip.XviD.AC3-EVO/Clifford.the.Big.Red.Dog.2021.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Kids/Clifford the Big Red Dog (2021).m4v",
-      "status": "deleted",
-      "processed": true,
-      "date": "2021-12-22T06:44:34.324Z"
-    },
     {
       "input": "/Shares/Torrents/finished/Kids/Bongee.Bear.and.the.Kingdom.of.Rhythm.2021.HDRip.XviD.AC3-EVO/Bongee.Bear.and.the.Kingdom.of.Rhythm.2021.HDRip.XviD.AC3-EVO.avi",
       "output": "/Shares/Movies/Kids/Bongee Bear and the Kingdom of Rhythm (2021).m4v",

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 2597
data/movies.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 10017
data/pr0n.json


+ 1 - 51
data/radarr.json

@@ -1,53 +1,3 @@
 {
-  "files": [
-    {
-      "input": "/Shares/Torrents/finished/radarr/Once.Upon.a.Time.in.Hollywood.2019.BDRip.x264-SPARKS[rarbg]/Once.Upon.a.Time.in.Hollywood.2019.BDRip.x264-SPARKS.mkv",
-      "output": "/Users/pomeroyt/Desktop/Convert/done/Once Upon a Time in Hollywood (2019).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2019-11-27T04:55:00.620Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/radarr/Gemini.Man.2019.1080p.WEBRip.x264-Rapta.mkv",
-      "output": "/Users/pomeroyt/Desktop/Convert/done/Gemini Man (2019).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2019-11-30T15:06:37.553Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/radarr/Abominable.2019.1080p.WEB-DL.H264.AC3-EVO/Abominable.2019.1080p.WEB-DL.H264.AC3-EVO.mkv",
-      "output": "/Shares/TVShows/Downloads/Abominable (2019).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2020-01-21T23:52:49.985Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/radarr/2050.2019.HDRip.XviD.AC3-EVO/2050.2019.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/TVShows/Downloads/2050 (2019).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2020-02-06T14:54:38.524Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/radarr/Jojo.Rabbit.2019.DVDScr.XVID.AC3.HQ.Hive-CM8/Jojo.Rabbit.2019.DVDScr.XVID.AC3.HQ.Hive-CM8.avi",
-      "output": "/Shares/Movies/Downloads/Jojo Rabbit (2019).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2020-02-22T20:15:36.856Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/radarr/Jojo.Rabbit.2019.HDRip.XviD.AC3-EVO/Jojo.Rabbit.2019.HDRip.XviD.AC3-EVO.avi",
-      "output": "/Shares/Movies/Downloads/Jojo Rabbit (2019).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2020-04-07T20:58:46.892Z"
-    },
-    {
-      "input": "/Shares/Torrents/finished/radarr/Wonder Woman 1984.2020.1080p.WEB-DL.H264.DD5.1-EVO/Wonder Woman 1984.2020.1080p.WEB-DL.H264.DD5.1-EVO.mkv",
-      "output": "/Shares/Movies/Downloads/Wonder Woman 1984 (2020).m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2021-01-09T18:04:02.323Z"
-    }
-  ]
+  "files": []
 }

+ 1 - 9
data/tvshows.json

@@ -1,11 +1,3 @@
 {
-  "files": [
-    {
-      "input": "/Shares/Torrents/finished/TV/His.Dark.Materials.S01E02.1080p.HDTV.H264-BRISK/his.dark.materials.s01e02.1080p.hdtv.h264-brisk.mkv",
-      "output": "/Users/pomeroyt/Desktop/Convert/done/his dark materials s01e02.m4v",
-      "status": "success",
-      "processed": true,
-      "date": "2019-11-25T17:03:39.928Z"
-    }
-  ]
+  "files": []
 }

+ 40 - 25
index.js

@@ -44,16 +44,16 @@ const help = () => {
   return console.log(message);
 };
 
-String.prototype.toTitleCase = function() {
+String.prototype.toTitleCase = function () {
   var i, j, str, lowers, uppers;
-  str = this.replace(/([^\W_]+[^\s-]*) */g, function(txt) {
+  str = this.replace(/([^\W_]+[^\s-]*) */g, function (txt) {
     return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
   });
   // Certain minor words should be left lowercase unless
   // they are the first or last words in the string
   lowers = (settings && settings.titlecase && settings.titlecase.lowers) || [];
   for (i = 0, j = lowers.length; i < j; i++)
-    str = str.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'), function(txt) {
+    str = str.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'), function (txt) {
       return txt.toLowerCase();
     });
   // Certain words such as initialisms or acronyms should be left uppercase
@@ -82,11 +82,7 @@ const findFile = (db, file) => {
 
 // set a file in the db
 const setFile = (db, file, payload) => {
-  if (!payload && typeof file === 'object')
-    return db
-      .get('files')
-      .push(file)
-      .write();
+  if (!payload && typeof file === 'object') return db.get('files').push(file).write();
   return db
     .get('files')
     .find({
@@ -104,7 +100,7 @@ const removeFile = (db, file, soft = true) => {
       .find({
         input: file,
       })
-      .assign({ status:"deleted", date: new Date() })
+      .assign({ status: 'deleted', date: new Date() })
       .write(); // remove file from database
   return db
     .get('files')
@@ -115,13 +111,13 @@ const removeFile = (db, file, soft = true) => {
 };
 
 // write process output
-const processOutput = str => {
+const processOutput = (str) => {
   process.stdout.clearLine();
   process.stdout.cursorTo(0);
   process.stdout.write(str);
 };
 
-const getFilesize = async file => {
+const getFilesize = async (file) => {
   let stats = fs.existsSync(file) ? fs.statSync(file) : false;
   let bytes = stats ? stats['size'] : 0;
   return bytes && bytes > 0 ? bytes / 1024 : 0;
@@ -138,14 +134,14 @@ const processWithHandbrake = (input, output, preset) => {
         output: output,
         preset: preset,
       })
-      .on('start', err => {
+      .on('start', (err) => {
         processOutput(` -> "${outputName}" [starting] (${new Date()} with "${preset}")`);
       })
-      .on('error', err => {
+      .on('error', (err) => {
         processOutput(` -> "${outputName}" [errored] (${new Date()}: ${err.message || err})\n`);
         reject(err);
       })
-      .on('progress', progress => {
+      .on('progress', (progress) => {
         processOutput(` -> "${outputName}" [transcoding] (${progress.percentComplete}%, ETA: ${progress.eta})`);
       })
       .on('cancelled', () => {
@@ -159,7 +155,7 @@ const processWithHandbrake = (input, output, preset) => {
   });
 };
 
-const processFile = async file => {
+const processFile = async (file) => {
   let db,
     options,
     preset = 'Fast 1080p30',
@@ -234,7 +230,7 @@ const processFile = async file => {
   if (fs.existsSync(output)) {
     let outputSize = await getFilesize(output); //get output filesize
     let inputSize = await getFilesize(input); //get output filesize
-    if (outputSize > inputSize/4) {
+    if (outputSize > inputSize / 4) {
       //make sure its bigger than 100k
       processOutput(` -> "${path.basename(file)}" [skipping] (already processed)\n`);
       setFile(db, file, {
@@ -279,7 +275,7 @@ const processFile = async file => {
 };
 
 // cleanup removes from the db
-const cleanup = file => {
+const cleanup = (file) => {
   let db;
   for (let i = 0, l = dirs.length; i < l; i++) {
     let dir = dirs[i]; // pointer to the dir
@@ -315,7 +311,7 @@ const opts = {
   ignoreInitial: ignoreInitial,
   persistent: true,
   usePolling: true,
-  interval: 10*1000,
+  interval: 10 * 1000,
   depth: 1,
   awaitWriteFinish: {
     stabilityThreshold: 3000,
@@ -361,20 +357,20 @@ const main = async () => {
   const watcher = chokidar.watch(watches, opts); // init our watcher
   console.log('Watching:', watches);
   watcher
-    .on('add', async file => {
+    .on('add', async (file) => {
       // when a file is added ...
       queue.push(file); // push the file onto the queue to be processed
     })
-    .on('change', file => {
+    .on('change', (file) => {
       // when a file changes ...
       console.log(` -> "${file}" [changed] (${new Date()})`);
     })
-    .on('unlink', async file => {
+    .on('unlink', async (file) => {
       // when a file is removed ...
       console.log(` -> "${file}" [removed] (${new Date()})`);
       cleanup(file);
     })
-    .on('error', error => {
+    .on('error', (error) => {
       console.error(` -> "${file}" [errored] (${new Date()}: ${error.message || error})`);
     });
 };
@@ -386,9 +382,11 @@ const purge = () => {
   for (let i = 0, l = dirs.length; i < l; i++) {
     let dir = dirs[i]; // pointer to the dir
     db = getDbForDir(dir); // init the db connection
-    let files = db.get('files').filter(file => file.status && file.status === "deleted" && file.processed && file.date && new Date(file.date).getTime() < ago.getTime());
+    let files = db
+      .get('files')
+      .filter((file) => file.status && file.status === 'deleted' && file.processed && file.date && new Date(file.date).getTime() < ago.getTime());
     for (let file of files) {
-      console.log(` --> purging`,file.input,`(${new Date()})`);
+      console.log(` --> purging`, file.input, `(${new Date()})`);
       if (file && file.input) removeFile(db, file.input, false);
     }
   }
@@ -397,10 +395,27 @@ const purge = () => {
   }, CLEANER);
 };
 
+const prune = () => {
+  let db;
+  console.log(` -> Checking for any "processed" files that need pruning.`);
+  for (let i = 0, l = dirs.length; i < l; i++) {
+    let dir = dirs[i]; // pointer to the dir
+    db = getDbForDir(dir); // init the db connection
+    let files = db.get('files').filter((file) => file && file.processed);
+    for (let file of files) {
+      let exists = fs.existsSync(file.input); // check if the file actually exists
+      if (!exists) {
+        console.log(` --> pruning`, file.input, `(${new Date()})`);
+        removeFile(db, file.input, false); //soft remove
+      }
+    }
+  }
+};
 
 (async () => {
   main();
   purge();
-})().catch(err => {
+  prune();
+})().catch((err) => {
   console.log(` -> Error: ${err.message || err}`);
 });

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است