jul11co-mangadl
Version:
Jul11co Web Manga Downloader
204 lines (171 loc) • 6.76 kB
JavaScript
var path = require('path');
var urlutil = require('url');
var utils = require('jul11co-wdt').Utils;
module.exports = {
name: 'HeyManga',
website: 'http://www.heymanga.me',
match: function(link, options) {
return /www\.heymanga\.me\/manga\//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, 'HeyManga');
saver.setMangaOutputDir(options.output_dir);
}
if ($('#fuzetsu_list').length) {
var link_obj = urlutil.parse(page.url);
var page_number = path.basename(link_obj.pathname);
var chapter_url = link_obj.protocol + '//' + link_obj.hostname + path.dirname(link_obj.pathname);
// console.log('Manga chapter page: ' + chapter_url);
var links = saver.getLinks($, page, '#main-container', {
filters: [ chapter_url + '/' ]
});
if (options.verbose) console.log(links);
if (typeof options.chapter_pages == 'undefined') {
// It's is a page of a manga chapter
// Init data holder for chapter pages in options (passed through all callback)
options.chapter_pages = {};
}
for (var i = 0; i < links.length; i++) {
var chapter_page_link = links[i];
if (typeof options.chapter_pages[chapter_page_link] == 'undefined') {
// console.log('Add chapter page link: ' + chapter_page_link);
options.chapter_pages[chapter_page_link] = {
visited: false,
images: []
};
}
}
if (typeof options.chapter_pages != 'undefined'
&& typeof options.chapter_pages[page.url] != 'undefined') {
options.chapter_pages[page.url].visited = true;
} else {
// console.log('Wrong state! This page not included in chapter page links');
// return callback();
options.chapter_pages[page.url] = {
visited: true,
images: []
};
}
// Get images on current page
// var images = saver.getImages($, page, '#viewer', { blacklist: [ '.gif' ]});
var images = [];
$('.img-fill').each(function() {
var img_src = $(this).attr('src');
if (img_src && img_src.indexOf('//') == 0) {
img_src = 'https:' + img_src;
}
if (img_src.indexOf('i4.heymanga.me') > 0) {
img_src = img_src.replace('i4.heymanga.me', 'i1.heymanga.me');
}
images.push({
src: img_src,
alt: $(this).attr('alt')
});
});
if (options.verbose) console.log(images);
// Save to options
options.chapter_pages[page.url].images = options.chapter_pages[page.url].images.concat(images);
// Check if all chapter pages are visited
var all_chapter_pages_visited = true;
for (var prop in options.chapter_pages) {
if (options.chapter_pages[prop].visited == false) {
all_chapter_pages_visited = false;
break;
}
}
if (all_chapter_pages_visited) {
// if (options.verbose) {
// console.log('All chapter pages were visited. It\'s time to download');
// }
var chapter_page_images = [];
for (var prop in options.chapter_pages) {
var page_number = parseInt(path.basename(prop));
chapter_page_images.push({
page_number: page_number,
images: options.chapter_pages[prop].images
});
}
// sort by page number (from lower to higher)
chapter_page_images.sort(function(a,b) {
if (a.page_number < b.page_number) return -1;
if (a.page_number > b.page_number) return 1;
return 0;
});
// It's time to download images
var chapter_images = [];
for (var i = 0; i < chapter_page_images.length; i++) {
chapter_images = chapter_images.concat(chapter_page_images[i].images);
}
if (options.verbose) console.log(chapter_images);
// Reset chapter_pages
options.chapter_pages = {};
// https://www.heymanga.me/manga/<MANGANAME>/<CHAPTER>
var chapter_path = chapter_url.replace('https://www.heymanga.me/manga/','');
// <MANGANAME>/<CHAPTER>
chapter_path = chapter_path.split('/')[1]; // get CHAPTER
var output_dir = path.join((options.output_dir || '.'), chapter_path);
if (options.verbose) {
console.log('Options output dir : ' + options.output_dir);
console.log('Page output dir : ' + page.output_dir);
console.log('Output dir : ' + output_dir);
}
// var output_dir = page.output_dir;
var chapter_title = $('#mangainfo h1.mb8').text().trim();
saver.downloadMangaChapter({
chapter_url: chapter_url,
chapter_title: chapter_title,
chapter_images: chapter_images,
output_dir: output_dir
}, options, function(err) {
if (err) return callback(err);
callback();
});
} else {
// Get next unprocessed page in options.chapter_pages
var next_page = '';
for (var prop in options.chapter_pages) {
if (options.chapter_pages[prop].visited == false) {
next_page = prop;
break;
}
}
// Process next page
saver.processPage(next_page, options, function(err) {
if (err) {
return callback(err);
}
callback();
});
}
} else if ($('#chapters').length) {
console.log('Chapter list');
// if (options.group_by_site) {
// options.output_dir = path.join(options.output_dir, 'Heymanga');
// saver.setMangaOutputDir(options.output_dir);
// }
if (options.auto_manga_dir) {
var manga_title = page.title.split('- Read')[0].trim();
console.log('Manga title: ' + manga_title);
options.output_dir = path.join(options.output_dir, manga_title);
saver.setMangaOutputDir(options.output_dir);
}
saver.setStateData('url', page.url);
var chapter_links = saver.getLinks($, page, '#chapters', {
filters: ['www.heymanga.me/manga/']
});
if (options.verbose) console.log(chapter_links);
chapter_links = chapter_links.filter(function(link) {
return !saver.isVisited(link);
});
console.log(chapter_links.length + ' new chapters');
saver.processPages(chapter_links, options, function(err) {
if (err) return callback(err);
callback();
});
} else {
callback();
}
}
}