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

This commit is contained in:
Godzil 2020-04-13 20:14:28 +01:00
parent b2ecd05586
commit a7bc34df0d
4 changed files with 45 additions and 12 deletions

View File

@ -200,7 +200,7 @@ function split(value: string): string[]
return pieces; return pieces;
} }
function get_min_filter(filter: string): number function get_min_filter(filter: string): IEpisodeNumber
{ {
if (filter !== undefined) if (filter !== undefined)
{ {
@ -214,13 +214,41 @@ function get_min_filter(filter: string): number
if (tok[0] !== '') if (tok[0] !== '')
{ {
return parseInt(tok[0], 10); /* If first item is not empty, ie '10-20' */
} if (tok[0].includes('e'))
} {
return 0; /* 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);
} }
function get_max_filter(filter: string): number 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)};
}
}
}
/* First item is empty, ie '-20' */
return {season: 0, episode: 0};
}
function get_max_filter(filter: string): IEpisodeNumber
{ {
if (filter !== undefined) if (filter !== undefined)
{ {
@ -235,15 +263,15 @@ function get_max_filter(filter: string): number
if ((tok.length > 1) && (tok[1] !== '')) if ((tok.length > 1) && (tok[1] !== ''))
{ {
/* We have a max value */ /* 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] !== '')) else if ((tok.length === 1) && (tok[0] !== ''))
{ {
/* A single episode has been requested */ /* 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)}; 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}};
})); }));
} }

View File

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

4
src/interface/IEpisodeNumber.d.ts vendored Normal file
View File

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

View File

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