X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=nhentai%2Fdoujinshi.py;h=b7d03d4ccbe08ef9854967a4afacafe850e29abc;hb=443fcdc7da42e46c680e748c6acfae48c956c5a9;hp=d7de7d369b8aec9cb6072b18c1e81cb5e6ac4af3;hpb=a56d3ca18c0021dfe7826163316ff712d4aecb28;p=nhentai.git diff --git a/nhentai/doujinshi.py b/nhentai/doujinshi.py index d7de7d3..b7d03d4 100644 --- a/nhentai/doujinshi.py +++ b/nhentai/doujinshi.py @@ -1,12 +1,18 @@ # coding: utf-8 -from __future__ import print_function, unicode_literals + from tabulate import tabulate -from future.builtins import range from nhentai.constant import DETAIL_URL, IMAGE_URL from nhentai.logger import logger from nhentai.utils import format_filename +MAX_FIELD_LENGTH = 100 +EXT_MAP = { + 'j': 'jpg', + 'p': 'png', + 'g': 'gif', +} + class DoujinshiInfo(dict): def __init__(self, **kwargs): @@ -19,9 +25,18 @@ class DoujinshiInfo(dict): return '' +def trunk_string(string): + if len(string) >= MAX_FIELD_LENGTH: + string = string[:MAX_FIELD_LENGTH] + u'…' + + return string + + class Doujinshi(object): - def __init__(self, name=None, id=None, img_id=None, ext='jpg', pages=0, **kwargs): + def __init__(self, name=None, pretty_name=None, id=None, img_id=None, + ext='', pages=0, name_format='[%i][%a][%t]', **kwargs): self.name = name + self.pretty_name = pretty_name self.id = id self.img_id = img_id self.ext = ext @@ -30,31 +45,46 @@ class Doujinshi(object): self.url = '%s/%d' % (DETAIL_URL, self.id) self.info = DoujinshiInfo(**kwargs) - def __repr__(self): - return ''.format(self.name) + name_format = name_format.replace('%i', str(self.id)) + name_format = name_format.replace('%a', self.info.artists) - def show(self): - table = [ + name_format = name_format.replace('%t', trunk_string(self.name)) + name_format = name_format.replace('%p', trunk_string(self.pretty_name)) + name_format = name_format.replace('%s', trunk_string(self.info.subtitle)) + self.filename = format_filename(name_format) + + self.table = [ + ["Parodies", self.info.parodies], ["Doujinshi", self.name], ["Subtitle", self.info.subtitle], ["Characters", self.info.characters], ["Authors", self.info.artists], - ["Language", self.info.language], + ["Languages", self.info.languages], ["Tags", self.info.tags], ["URL", self.url], ["Pages", self.pages], ] - logger.info(u'Print doujinshi information of {0}\n{1}'.format(self.id, tabulate(table))) + + def __repr__(self): + return ''.format(self.name) + + def show(self): + + logger.info(u'Print doujinshi information of {0}\n{1}'.format(self.id, tabulate(self.table))) def download(self): - logger.info('Start download doujinshi: %s' % self.name) + logger.info('Starting to download doujinshi: %s' % self.name) if self.downloader: download_queue = [] - for i in range(1, self.pages + 1): - download_queue.append('%s/%d/%d.%s' % (IMAGE_URL, int(self.img_id), i, self.ext)) - self.downloader.download(download_queue, format_filename('%s-%s' % (self.id, self.name[:200]))) + if len(self.ext) != self.pages: + logger.warning('Page count and ext count do not equal') + + for i in range(1, min(self.pages, len(self.ext)) + 1): + download_queue.append('%s/%d/%d.%s' % (IMAGE_URL, int(self.img_id), i, self.ext[i - 1])) + + self.downloader.download(download_queue, self.filename) else: - logger.critical('Downloader has not be loaded') + logger.critical('Downloader has not been loaded') if __name__ == '__main__':