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;
}
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)};
}
}
return 0;
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): 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}};
}));
}

View File

@ -1,6 +1,6 @@
interface IConfigTask {
address: string;
retry: number;
episode_min: number;
episode_max: number;
episode_min: IEpisodeNumber;
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)
{
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);
}