jul11co-mangadl
Version:
Jul11co Web Manga Downloader
262 lines (212 loc) • 8.86 kB
JavaScript
var path = require('path');
var urlutil = require('url');
var utils = require('jul11co-wdt').Utils;
module.exports = {
name: 'Hentai24h',
website: 'http://hentai24h.org',
match: function(link, options) {
return /hentai24h\.org/g.test(link);
},
dispatch: function(saver, $, page, options, callback) {
if (options.group_by_site && !options.orig_output_dir) {
options.orig_output_dir = options.output_dir;
options.output_dir = path.join(options.output_dir, 'Hentai24h');
saver.setMangaOutputDir(options.output_dir);
}
var downloadChapter = function(cb) {
if ($('#chapter').length) {
if (saver.isDone(page.url)) {
return cb();
}
var chapter_url = page.url;
var chapter_title = $('#chapter h1').first().children('a').text().trim();
$('.chap-content img').each(function(){
var image_lazy_src = $(this).attr('data-lazy-src');
if (image_lazy_src && image_lazy_src != "") {
$(this).attr('src', image_lazy_src);
}
});
var chapter_images = saver.getImages($, page, '.chap-content');
if (options.debug) console.log(chapter_images);
var chapter_url_obj = urlutil.parse(chapter_url);
var chapter_output_dir_name = path.basename(chapter_url_obj.pathname,'.html');
var chapter_output_dir = path.join(options.output_dir, chapter_output_dir_name);
saver.downloadMangaChapter({
chapter_url: page.url,
chapter_title: chapter_title,
chapter_images: chapter_images,
output_dir: chapter_output_dir
}, options, cb);
} else {
cb();
}
}
if ($('#list-drop').length) { // multi-chapters manga
options.manga_chapters = options.manga_chapters || [];
if (options.manga_chapters.indexOf(page.url) != -1) {
return downloadChapter(callback);
}
console.log('----');
console.log('Manga page: ' + page.url);
var manga_title = $('#chapter h1').first().text().trim();
manga_title = utils.replaceAll(manga_title, '/', '-');
console.log('Manga title: ' + manga_title);
if (options.auto_manga_dir && !options.manga_output_changed && !options.batch_download) {
options.output_dir = path.join(options.output_dir, manga_title);
saver.setMangaOutputDir(options.output_dir);
options.manga_output_changed = true;
} else if (/*options.auto_manga_dir && */options.batch_download) {
var manga_output_dir = path.join(options.batch_output_dir, manga_title);
saver.deleteStateData(page.url);
saver.setMangaOutputDir(manga_output_dir, {save_old_state: true});
options.output_dir = manga_output_dir;
}
if (saver.isDone(page.url) && !options.refresh_info) {
return callback();
}
saver.setStateData('url', page.url);
if (options.save_index_html) {
saver.saveHtmlSync(path.join(options.output_dir, 'index.html'), $.html());
}
var manga_info = this.getMangaInfo($, page, options);
if (manga_info && manga_info.url) {
saver.saveJsonSync(path.join(options.output_dir, 'manga.json'), manga_info);
}
var chapter_links = []; // saver.getLinks($, page, '.list-chapter');
$('#list-drop select').first().children().each(function() {
var link = $(this).attr('value');
chapter_links.push(link);
});
options.manga_chapters = chapter_links;
saver.downloadMangaChapters(chapter_links, options, callback);
} else if ($('#chapter').length) { // single-chapter manga
console.log('----');
console.log('Manga page: ' + page.url);
var manga_title = $('#chapter h1').first().text().trim();
manga_title = utils.replaceAll(manga_title, '/', '-');
console.log('Manga title: ' + manga_title);
if (options.auto_manga_dir && !options.manga_output_changed && !options.batch_download) {
options.output_dir = path.join(options.output_dir, manga_title);
saver.setMangaOutputDir(options.output_dir);
options.manga_output_changed = true;
} else if (/*options.auto_manga_dir && */options.batch_download) {
var manga_output_dir = path.join(options.batch_output_dir, manga_title);
saver.deleteStateData(page.url);
saver.setMangaOutputDir(manga_output_dir, {save_old_state: true});
options.output_dir = manga_output_dir;
}
if (saver.isDone(page.url) && !options.refresh_info) {
return callback();
}
saver.setStateData('url', page.url);
if (options.save_index_html) {
saver.saveHtmlSync(path.join(options.output_dir, 'index.html'), $.html());
}
var manga_info = this.getMangaInfo($, page, options);
if (manga_info && manga_info.url) {
saver.saveJsonSync(path.join(options.output_dir, 'manga.json'), manga_info);
}
return downloadChapter(callback);
} else if ($('#comic ul.items').length) {
options.paging_links = options.paging_links || {};
if (options.paging_links[page.url]) {
return callback();
}
options.paging_links[page.url] = 1;
console.log('--');
console.log('Manga list: ' + page.url);
options.batch_download = true;
if (!options.batch_url) {
options.batch_url = page.url;
}
if (!options.batch_output_dir) {
options.batch_output_dir = options.output_dir;
}
if (options.batch_output_dir != options.output_dir) {
saver.deleteStateData(page.url);
saver.setMangaOutputDir(options.batch_output_dir, {save_old_state: true});
options.output_dir = options.batch_output_dir;
}
if (!saver.getStateData('url')) {
saver.updateStateData('url', page.url);
}
var paging_links = saver.getLinks($, page, '.page_nav');
$('#comic ul.items .page').remove();
var manga_links = saver.getLinks($, page, '#comic ul.items');
saver.downloadMangaList(manga_links, options, function(err) {
if (err) return callback(err);
saver.setMangaOutputDir(options.batch_output_dir, {save_old_state: true});
options.output_dir = options.batch_output_dir;
manga_links.forEach(function(link) {
if (!saver.isVisited(link)) saver.setVisited(link);
});
saver.setStateData('last_update', new Date());
if (options.all_pages && paging_links.length > 0) {
if (options.refresh_info) {
paging_links = paging_links.filter(function(link) {
return !options.paging_links[link];
});
paging_links.forEach(function(link) {
saver.updateStateData(link, {visited: 0});
});
} else {
paging_links = paging_links.filter(function(link) {
return !saver.isVisited(link);
});
}
saver.processPages(paging_links, options, callback);
} else {
callback();
}
});
} else {
callback();
}
},
getMangaInfo: function($, page, options) {
var manga_info = {};
if ($('#chapter').length) {
manga_info.url = page.url;
manga_info.name = $('#chapter h1 a').first().text().trim();
if ($('#list-drop').length) {
manga_info.cover_image = $('.chap-content img').first().attr('src');
}
var manga_tags = [];
$('.chap-description a').each(function() {
var link_url = $(this).attr('href');
if (link_url && link_url.indexOf('/tag/') != -1) {
manga_tags.push({
name: $(this).text().trim(),
url: link_url
})
}
});
if (manga_tags.length) manga_info.tags = manga_tags;
var manga_chapters = [];
if ($('#list-drop select').length) {
$('#list-drop select').first().children().each(function() {
var link = $(this).attr('value');
manga_chapters.push({
url: link,
name: $(this).text().trim()
});
});
}
if (options.include_chapters || options.with_chapters) {
manga_info.chapters = manga_chapters;
}
manga_info.chapter_count = manga_chapters.length;
if (options.verbose) {
console.log('Manga:');
console.log(' Name:', manga_info.name);
console.log(' Cover image:', manga_info.cover_image);
// console.log(' Description:', manga_info.description);
// console.log(' Authors:', manga_info.authors);
console.log(' Tags:', manga_info.genres);
// console.log(' Status:', manga_info.status);
console.log(' Chapter count:', manga_info.chapter_count);
}
}
return manga_info;
}
}