UNPKG

jul11co-mangadl

Version:
332 lines (272 loc) 11 kB
var path = require('path'); var urlutil = require('url'); var utils = require('jul11co-wdt').Utils; module.exports = { name: 'Pururin', website: 'http://pururin.io', match: function(link, options) { return /pururin\.us\//g.test(link) || /pururin\.io\//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, 'Pururin'); saver.setMangaOutputDir(options.output_dir); } // saver.saveHtmlFile($, page, options); var state = saver.getStateData(page.url); if (state && state.done && !options.refresh_info) { if (options.cbz && state.chapter_images) { return saver.createComicFile(page.output_dir, state.chapter_images, callback); } else { return callback(); } } var linkExists = function(link, container) { var links = saver.getLinks($, page, container || 'body', { filters: [link] }); return (links.length > 0); } if (/\/gallery\//g.test(page.url) && $('.gallery-info').length) { console.log('----'); console.log('Gallery page: ' + page.url); var manga_title = $('.gallery-info .title').first().text().trim(); manga_title = utils.replaceAll(manga_title, '/', '-'); console.log('Gallery: ' + manga_title); options.current_manga_title = manga_title; if (options.language && !linkExists('/' + options.language + '.html', '.gallery-info-block')) { console.log('No language matched: ', options.language); return callback(); } if (options.category && !linkExists('/' + options.category + '.html', '.gallery-info-block')) { console.log('No category matched: ', options.category); return callback(); } if (options.tag && !linkExists('/' + options.tag + '.html', '.gallery-info-block')) { console.log('No tag matched: ', options.tag); return callback(); } if (options.artist && !linkExists('/' + options.artist + '.html', '.gallery-info-block')) { console.log('No artist matched: ', options.artist); return callback(); } if (options.auto_manga_dir && !options.batch_download) { options.output_dir = path.join(options.output_dir, manga_title); saver.setMangaOutputDir(options.output_dir); } 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); var chapter_links = []; // chapter_links = saver.getLinks($, page, '.table-data', { // filters: ['/view/'] // }); // chapter_links = saver.getLinks($, page, '.hentai-preview', { // filters: ['/read/'] // }); if ($('a.read-more').length) { var read_more_link = $('a.read-more').attr('href'); if (chapter_links.indexOf(read_more_link) == -1) { chapter_links.push(read_more_link); } } saver.downloadMangaChapters(chapter_links, options, callback); } else if (/\/view\//g.test(page.url) && $('.imageView').length) { // Get images on current page // var images = saver.getImages($, page, '.imageView'); var chapter_script = $.html('.imageView .image-controls script'); if (!chapter_script) { console.log('No chapter script available'); return callback(); } var tmp = utils.extractSubstring(chapter_script, 'var d = {', '};'); tmp = '{' + tmp + '}'; var chapter_images = []; try { var page_images_obj = JSON.parse(tmp); if (page_images_obj) { // console.log(page_images_obj); for (var page_number in page_images_obj) { chapter_images.push({ src: page_images_obj[page_number].chapter_image }); } } } catch(e) { console.log(e); return callback(); } if (options.debug) console.log(chapter_images); var chapter_url = page.url; var chapter_title = page.title.split('-')[0].trim(); 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: chapter_url, chapter_title: chapter_title, chapter_images: chapter_images, output_dir: chapter_output_dir }, options, callback); } else if (/\/read\//g.test(page.url) && $('.image-viewer').length) { // Get images on current page // var images = saver.getImages($, page, '#images-holder'); var chapter_script = $.html('script'); if (!chapter_script) { console.log('No chapter script available'); return callback(); } var tmp = utils.extractSubstring(chapter_script, 'var chapters = {', '} ;'); tmp = '{' + tmp + '}'; var chapter_images = []; try { var chapter_images_obj = JSON.parse(tmp); if (chapter_images_obj) { for (var page_number in chapter_images_obj) { chapter_images.push({ src: chapter_images_obj[page_number].image, alt: 'Page ' + chapter_images_obj[page_number].page }); } } } catch(e) { console.log(e); return callback(); } if (options.debug) console.log(chapter_images); var chapter_url = page.url; var chapter_title = options.current_manga_title || page.title.trim(); if (chapter_title.indexOf('Page 1 | ') == 0) { chapter_title = utils.replaceAll(chapter_title, 'Page 1 | ', ''); chapter_title = chapter_title.split('|')[0].trim(); } var chapter_url_obj = urlutil.parse(chapter_url); var chapter_output_dir_name = path.basename(chapter_url_obj.pathname); var chapter_output_dir = path.join(options.output_dir, chapter_output_dir_name); if (!options.request_timeout) { options.request_timeout = 20000; // 20 seconds } saver.downloadMangaChapter({ chapter_url: chapter_url, chapter_title: chapter_title, chapter_images: images, output_dir: chapter_output_dir }, options, callback); } else if ($('.gallery-list .gallery-block').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 gallery_links = saver.getLinks($, page, '.gallery-list .gallery-block', { filters: ['/gallery/'] }); var paging_links = saver.getLinks($, page, '.pager'); saver.downloadMangaList(gallery_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; gallery_links.forEach(function(link) { if (!saver.isVisited(link)) saver.setVisited(link); }); saver.setStateData('last_update', new Date()); if (options.all_pages && paging_links.length) { 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 if ($('.gallery-listing').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 gallery_links = saver.getLinks($, page, '.gallery-listing', { filters: ['/gallery/'] }); var paging_links = saver.getLinks($, page, '.pager'); saver.downloadMangaList(gallery_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; gallery_links.forEach(function(link) { if (!saver.isVisited(link)) saver.setVisited(link); }); saver.setStateData('last_update', new Date()); if (options.all_pages && paging_links.length) { 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(); } } }