Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d549d46979 | ||
|
|
3f5b4b2585 | ||
|
|
1d596b02f7 | ||
|
|
cee53fb113 | ||
|
|
1e56cab73f | ||
|
|
0dc3c1e8e2 |
7
.github/ISSUE_TEMPLATE/bug_report.md
vendored
7
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -14,10 +14,12 @@ A clear and concise description of what you expected to happen.
|
|||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
**Please fill theses informations:**
|
**Please fill theses informations:**
|
||||||
(Add a X between brackets to make them ticked)
|
(Add a X between brackets to make them ticked if relevant)
|
||||||
- OS: [e.g:. Windows 10, Mac OS X 10.13, ...]
|
- OS: [e.g:. Windows 10, Mac OS X 10.13, ...]
|
||||||
- [ ] I'm using the latest version of Crunchy
|
- [ ] I'm using the latest version of Crunchy
|
||||||
- [ ] I have a premium accrount on CR
|
- [ ] I have a premium accrount on CR
|
||||||
|
- [ ] I am using a VPN
|
||||||
|
- My region in the world (country or continent):
|
||||||
- Serie you get a problem with (and specify which episode if it is specific to one):
|
- Serie you get a problem with (and specify which episode if it is specific to one):
|
||||||
- The command line you are running Crunchy with:
|
- The command line you are running Crunchy with:
|
||||||
- The message Crunchy is giving you, if any:
|
- The message Crunchy is giving you, if any:
|
||||||
@@ -29,4 +31,5 @@ If applicable, add screenshots to help explain your problem.
|
|||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
|
||||||
|
|
||||||
_Also don't hesitate to add labels you feel apropriate on your report._
|
_Also don't hesitate to add labels you feel apropriate on your report._
|
||||||
|
_Please don't edit logs if you are adding them, apart from removing sensitive informations like login/password_
|
||||||
37
README.md
37
README.md
@@ -66,27 +66,27 @@ The [command-line interface](http://en.wikipedia.org/wiki/Command-line_interface
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
-V, --version output the version number
|
-V, --version output the version number
|
||||||
-p, --pass <s> The password.
|
-p, --pass <s> The password.
|
||||||
-u, --user <s> The e-mail address or username.
|
-u, --user <s> The e-mail address or username.
|
||||||
-c, --cache Disables the cache.
|
-c, --cache Disables the cache.
|
||||||
-m, --merge Disables merging subtitles and videos.
|
-m, --merge Disables merging subtitles and videos.
|
||||||
-e, --episodes <s> Episode list. Read documentation on how to use
|
-e, --episodes <s> Episode list. Read documentation on how to use
|
||||||
-f, --format <s> The subtitle format. (Default: ass)
|
-f, --format <s> The subtitle format. (default: ass)
|
||||||
-o, --output <s> The output path.
|
-o, --output <s> The output path.
|
||||||
-s, --series <s> The series override.
|
-s, --series <s> The series name override.
|
||||||
-n, --filename <s> The name override.
|
-n, --nametmpl <s> Output name template (default: {SERIES_TITLE} - s{SEASON_NUMBER}e{EPISODE_NUMBER} - [{TAG}])
|
||||||
-t, --tag <s> The subgroup. (Default: CrunchyRoll) (default: CrunchyRoll)
|
-t, --tag <s> The subgroup. (default: CrunchyRoll)
|
||||||
-r, --resolution <s> The video resolution. (Default: 1080 (360, 480, 720, 1080)) (default: 1080)
|
-r, --resolution <s> The video resolution. (valid: 360, 480, 720, 1080) (default: 1080)
|
||||||
-g, --rebuildcrp Rebuild the crpersistant file.
|
-b, --batch <s> Batch file (default: CrunchyRoll.txt)
|
||||||
-b, --batch <s> Batch file (default: CrunchyRoll.txt)
|
--verbose Make tool verbose
|
||||||
--verbose Make tool verbose
|
--rebuildcrp Rebuild the crpersistant file.
|
||||||
--retry <i> Number or time to retry fetching an episode. Default: 5 (default: 5)
|
--retry <i> Number or time to retry fetching an episode. (default: 5)
|
||||||
-h, --help output usage information
|
-h, --help output usage information
|
||||||
|
|
||||||
#### Batch-mode
|
#### Batch-mode
|
||||||
|
|
||||||
When no sequence of series addresses is provided, the batch-mode source file will be read (which is *CrunchyRoll.txt* in the current work directory. Each line in this file is processed contain the URL of a series and can support some of the command line paramter (like *-e*). This makes it ideal to manage a large sequence of series addresses.
|
When no sequence of series addresses is provided, the batch-mode source file will be read (which is *CrunchyRoll.txt* in the current work directory. Each line in this file is processed contain the URL of a series and can support some of the command line parameter (like `-e`). This makes it ideal to manage a large sequence of series addresses.
|
||||||
|
|
||||||
#### Examples
|
#### Examples
|
||||||
|
|
||||||
@@ -109,6 +109,7 @@ Download episode 42 of *Fairy Tail* to `C:\Anime`:
|
|||||||
*Notice the '@' in front of the URL, it is there to tell Crunchy that the URL is an episode URL and not a series URL.*
|
*Notice the '@' in front of the URL, it is there to tell Crunchy that the URL is an episode URL and not a series URL.*
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
crunchy --output C:\Anime http://www.crunchyroll.com/fairy-tail -e 42
|
crunchy --output C:\Anime http://www.crunchyroll.com/fairy-tail -e 42
|
||||||
|
|
||||||
Download episode 10 to 42 (both included) of *Fairy Tail*:
|
Download episode 10 to 42 (both included) of *Fairy Tail*:
|
||||||
|
|||||||
2
package-lock.json
generated
2
package-lock.json
generated
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "crunchy",
|
"name": "crunchy",
|
||||||
"version": "1.3.5",
|
"version": "1.3.6",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=5.0"
|
"node": ">=5.0"
|
||||||
},
|
},
|
||||||
"version": "1.3.5",
|
"version": "1.3.6",
|
||||||
"bin": {
|
"bin": {
|
||||||
"crunchy": "./bin/crunchy",
|
"crunchy": "./bin/crunchy",
|
||||||
"crunchy.sh": "./bin/crunchy.sh"
|
"crunchy.sh": "./bin/crunchy.sh"
|
||||||
|
|||||||
15
src/batch.ts
15
src/batch.ts
@@ -265,17 +265,16 @@ function parse(args: string[]): IConfigLine
|
|||||||
// Episode filter
|
// Episode filter
|
||||||
.option('-e, --episodes <s>', 'Episode list. Read documentation on how to use')
|
.option('-e, --episodes <s>', 'Episode list. Read documentation on how to use')
|
||||||
// Settings
|
// Settings
|
||||||
.option('-f, --format <s>', 'The subtitle format. (Default: ass)')
|
.option('-f, --format <s>', 'The subtitle format.', 'ass')
|
||||||
.option('-o, --output <s>', 'The output path.')
|
.option('-o, --output <s>', 'The output path.')
|
||||||
.option('-s, --series <s>', 'The series override.')
|
.option('-s, --series <s>', 'The series name override.')
|
||||||
.option('-n, --filename <s>', 'The name override.')
|
.option('-n, --nametmpl <s>', 'Output name template', '{SERIES_TITLE} - s{SEASON_NUMBER}e{EPISODE_NUMBER} - [{TAG}]')
|
||||||
.option('-t, --tag <s>', 'The subgroup. (Default: CrunchyRoll)', 'CrunchyRoll')
|
.option('-t, --tag <s>', 'The subgroup.', 'CrunchyRoll')
|
||||||
.option('-r, --resolution <s>', 'The video resolution. (Default: 1080 (360, 480, 720, 1080))',
|
.option('-r, --resolution <s>', 'The video resolution. (valid: 360, 480, 720, 1080)', '1080')
|
||||||
'1080')
|
|
||||||
.option('-g, --rebuildcrp', 'Rebuild the crpersistant file.')
|
|
||||||
.option('-b, --batch <s>', 'Batch file', 'CrunchyRoll.txt')
|
.option('-b, --batch <s>', 'Batch file', 'CrunchyRoll.txt')
|
||||||
.option('--verbose', 'Make tool verbose')
|
.option('--verbose', 'Make tool verbose')
|
||||||
.option('--debug', 'Create a debug file. Use only if requested!')
|
.option('--debug', 'Create a debug file. Use only if requested!')
|
||||||
.option('--retry <i>', 'Number or time to retry fetching an episode. Default: 5', 5)
|
.option('--rebuildcrp', 'Rebuild the crpersistant file.')
|
||||||
|
.option('--retry <i>', 'Number or time to retry fetching an episode.', 5)
|
||||||
.parse(args);
|
.parse(args);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,11 +74,10 @@ function sanitiseFileName(str: string)
|
|||||||
*/
|
*/
|
||||||
function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, done: (err: Error, ign: boolean) => void)
|
function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, done: (err: Error, ign: boolean) => void)
|
||||||
{
|
{
|
||||||
let series = config.series || page.series;
|
const serieFolder = sanitiseFileName(config.series || page.series);
|
||||||
|
|
||||||
series = sanitiseFileName(series);
|
let fileName = sanitiseFileName(generateName(config, page));
|
||||||
let fileName = sanitiseFileName(name(config, page, series, ''));
|
let filePath = path.join(config.output || process.cwd(), serieFolder, fileName);
|
||||||
let filePath = path.join(config.output || process.cwd(), series, fileName);
|
|
||||||
|
|
||||||
if (fileExist(filePath + '.mkv'))
|
if (fileExist(filePath + '.mkv'))
|
||||||
{
|
{
|
||||||
@@ -95,8 +94,8 @@ function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, d
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
count = count + 1;
|
count = count + 1;
|
||||||
fileName = sanitiseFileName(name(config, page, series, '-' + count));
|
fileName = sanitiseFileName(generateName(config, page, '-' + count));
|
||||||
filePath = path.join(config.output || process.cwd(), series, fileName);
|
filePath = path.join(config.output || process.cwd(), serieFolder, fileName);
|
||||||
} while (fileExist(filePath + '.mkv'));
|
} while (fileExist(filePath + '.mkv'));
|
||||||
|
|
||||||
log.warn('Renaming to \'' + fileName + '\'...');
|
log.warn('Renaming to \'' + fileName + '\'...');
|
||||||
@@ -114,6 +113,7 @@ function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, d
|
|||||||
{
|
{
|
||||||
if (errM)
|
if (errM)
|
||||||
{
|
{
|
||||||
|
log.dispEpisode(fileName, 'Error...', true);
|
||||||
return done(errM, false);
|
return done(errM, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,6 +122,7 @@ function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, d
|
|||||||
{
|
{
|
||||||
if (errDS)
|
if (errDS)
|
||||||
{
|
{
|
||||||
|
log.dispEpisode(fileName, 'Error...', true);
|
||||||
return done(errDS, false);
|
return done(errDS, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,6 +134,7 @@ function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, d
|
|||||||
{
|
{
|
||||||
if (errDV)
|
if (errDV)
|
||||||
{
|
{
|
||||||
|
log.dispEpisode(fileName, 'Error...', true);
|
||||||
return done(errDV, false);
|
return done(errDV, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,6 +150,7 @@ function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, d
|
|||||||
{
|
{
|
||||||
if (errVM)
|
if (errVM)
|
||||||
{
|
{
|
||||||
|
log.dispEpisode(fileName, 'Error...', true);
|
||||||
return done(errVM, false);
|
return done(errVM, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,19 +214,16 @@ function downloadVideo(config: IConfig, page: IEpisodePage, player: IEpisodePla
|
|||||||
/**
|
/**
|
||||||
* Names the file based on the config, page, series and tag.
|
* Names the file based on the config, page, series and tag.
|
||||||
*/
|
*/
|
||||||
function name(config: IConfig, page: IEpisodePage, series: string, extra: string)
|
function generateName(config: IConfig, page: IEpisodePage, extra = '')
|
||||||
{
|
{
|
||||||
const episodeNum = parseInt(page.episode, 10);
|
const episodeNum = parseInt(page.episode, 10);
|
||||||
const volumeNum = parseInt(page.volume, 10);
|
const volumeNum = parseInt(page.volume, 10);
|
||||||
const episode = (episodeNum < 10 ? '0' : '') + page.episode;
|
const episode = (episodeNum < 10 ? '0' : '') + page.episode;
|
||||||
const volume = (volumeNum < 10 ? '0' : '') + page.volume;
|
const volume = (volumeNum < 10 ? '0' : '') + page.volume;
|
||||||
const tag = config.tag || 'CrunchyRoll';
|
const tag = config.tag || 'CrunchyRoll';
|
||||||
|
const series = config.series || page.series;
|
||||||
|
|
||||||
if (!page.filename) {
|
return config.nametmpl
|
||||||
return page.series + ' - s' + volume + 'e' + episode + ' - [' + tag + ']' + extra;
|
|
||||||
}
|
|
||||||
|
|
||||||
return page.filename
|
|
||||||
.replace(/{EPISODE_ID}/g, page.id.toString())
|
.replace(/{EPISODE_ID}/g, page.id.toString())
|
||||||
.replace(/{EPISODE_NUMBER}/g, episode)
|
.replace(/{EPISODE_NUMBER}/g, episode)
|
||||||
.replace(/{SEASON_NUMBER}/g, volume)
|
.replace(/{SEASON_NUMBER}/g, volume)
|
||||||
|
|||||||
2
src/interface/IConfig.d.ts
vendored
2
src/interface/IConfig.d.ts
vendored
@@ -10,7 +10,7 @@ interface IConfig {
|
|||||||
format?: string;
|
format?: string;
|
||||||
output?: string;
|
output?: string;
|
||||||
series?: string;
|
series?: string;
|
||||||
filename?: string;
|
nametmpl?: string;
|
||||||
tag?: string;
|
tag?: string;
|
||||||
resolution?: string;
|
resolution?: string;
|
||||||
video_format?: string;
|
video_format?: string;
|
||||||
|
|||||||
@@ -63,7 +63,6 @@ export default function(config: IConfig, task: IConfigTask, done: (err: Error) =
|
|||||||
{
|
{
|
||||||
if (page.episodes[i].retry <= 0)
|
if (page.episodes[i].retry <= 0)
|
||||||
{
|
{
|
||||||
log.dispEpisode(config.filename, 'Error...', true);
|
|
||||||
log.error(errD);
|
log.error(errD);
|
||||||
log.error('Cannot fetch episode "s' + page.episodes[i].volume + 'e' + page.episodes[i].episode +
|
log.error('Cannot fetch episode "s' + page.episodes[i].volume + 'e' + page.episodes[i].episode +
|
||||||
'", please rerun later');
|
'", please rerun later');
|
||||||
@@ -72,7 +71,6 @@ export default function(config: IConfig, task: IConfigTask, done: (err: Error) =
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
log.dispEpisode(config.filename, 'Error...', true);
|
|
||||||
if ((config.verbose) || (config.debug))
|
if ((config.verbose) || (config.debug))
|
||||||
{
|
{
|
||||||
if (config.debug)
|
if (config.debug)
|
||||||
|
|||||||
Reference in New Issue
Block a user