Browse Source

New way to specify episode range. Work in progress, may not work well.

Godzil 4 years ago
parent
commit
a7bc34df0d
4 changed files with 45 additions and 12 deletions
  1. 36 8
      src/batch.ts
  2. 2 2
      src/interface/IConfigTask.d.ts
  3. 4 0
      src/interface/IEpisodeNumber.d.ts
  4. 3 2
      src/series.ts

+ 36 - 8
src/batch.ts

@@ -200,7 +200,7 @@ function split(value: string): string[]
   return pieces;
 }
 
-function get_min_filter(filter: string): number
+function get_min_filter(filter: string): IEpisodeNumber
 {
   if (filter !== undefined)
   {
@@ -214,13 +214,41 @@ function get_min_filter(filter: string): number
 
     if (tok[0] !== '')
     {
-      return parseInt(tok[0], 10);
+      /* If first item is not empty, ie '10-20' */
+      if (tok[0].includes('e'))
+      {
+        /* include a e so we probably have something like 5e10
+           aka season 5 episode 10
+         */
+        const tok2 = tok[0].split('else');
+        if (tok2.length > 2)
+        {
+          log.error('Invalid episode filter \'' + filter + '\'');
+          process.exit(-1);
+        }
+
+        if (tok[0] !== '')
+        {
+          /* So season is properly filled */
+          return {season: parseInt(tok2[0], 10), episode: parseInt(tok2[1], 10)};
+        }
+        else
+        {
+          /* we have 'e10' */
+          return {season: 0, episode: parseInt(tok2[1], 10)};
+        }
+      }
+      else
+      {
+        return {season: 0, episode: parseInt(tok[0], 10)};
+      }
     }
   }
-  return 0;
+  /* First item is empty, ie '-20' */
+  return {season: 0, episode: 0};
 }
 
-function get_max_filter(filter: string): number
+function get_max_filter(filter: string): IEpisodeNumber
 {
   if (filter !== undefined)
   {
@@ -235,15 +263,15 @@ function get_max_filter(filter: string): number
     if ((tok.length > 1) && (tok[1] !== ''))
     {
       /* We have a max value */
-      return parseInt(tok[1], 10);
+      return  {season: +Infinity, episode: parseInt(tok[1], 10)};
     }
     else if ((tok.length === 1) && (tok[0] !== ''))
     {
       /* A single episode has been requested */
-      return parseInt(tok[0], 10);
+      return  {season: +Infinity, episode: parseInt(tok[0], 10) + 1};
     }
   }
-  return +Infinity;
+  return  {season: +Infinity, episode: +Infinity};
 }
 
 /**
@@ -290,7 +318,7 @@ function tasks(config: IConfigLine, batchPath: string, done: (err: Error, tasks?
                 episode_min: get_min_filter(config.episodes), episode_max: get_max_filter(config.episodes)};
       }
 
-      return {address: '', retry: 0, episode_min: 0, episode_max: 0};
+      return {address: '', retry: 0, episode_min: {season: 0, episode: 0}, episode_max: {season: 0, episode: 0}};
     }));
   }
 

+ 2 - 2
src/interface/IConfigTask.d.ts

@@ -1,6 +1,6 @@
 interface IConfigTask {
   address: string;
   retry: number;
-  episode_min: number;
-  episode_max: number;
+  episode_min: IEpisodeNumber;
+  episode_max: IEpisodeNumber;
 }

+ 4 - 0
src/interface/IEpisodeNumber.d.ts

@@ -0,0 +1,4 @@
+interface IEpisodeNumber {
+  season: number,
+  episode: number
+}

+ 3 - 2
src/series.ts

@@ -144,9 +144,10 @@ function download(cache: {[address: string]: number}, config: IConfig,
                   done: (err: any, ign: boolean) => void)
 {
   const episodeNumber = parseInt(item.episode, 10);
+  const seasonNumber = item.volume;
 
-  if ( (episodeNumber < task.episode_min) ||
-       (episodeNumber > task.episode_max) )
+  if ( (episodeNumber < task.episode_min.episode) ||
+       (episodeNumber > task.episode_max.episode) )
   {
     return done(null, false);
   }