# coding: utf-8 from __future__ import unicode_literals, print_function import sys import re import os import string import zipfile import shutil import requests from nhentai import constant from nhentai.logger import logger from nhentai.serializer import serialize, set_js_database def request(method, url, **kwargs): session = requests.Session() session.headers.update({ 'Referer': constant.LOGIN_URL, 'User-Agent': 'nhentai command line client (https://github.com/RicterZ/nhentai)', 'Cookie': constant.COOKIE }) return getattr(session, method)(url, proxies=constant.PROXY, verify=False, **kwargs) def check_cookie(): response = request('get', constant.BASE_URL).text username = re.findall('"/users/\d+/(.*?)"', response) if not username: logger.error('Cannot get your username, please check your cookie or use `nhentai --cookie` to set your cookie') else: logger.info('Login successfully! Your username: {}'.format(username[0])) class _Singleton(type): """ A metaclass that creates a Singleton base class when called. """ _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(_Singleton, cls).__call__(*args, **kwargs) return cls._instances[cls] class Singleton(_Singleton(str('SingletonMeta'), (object,), {})): pass def urlparse(url): try: from urlparse import urlparse except ImportError: from urllib.parse import urlparse return urlparse(url) def readfile(path): loc = os.path.dirname(__file__) with open(os.path.join(loc, path), 'r') as file: return file.read() def generate_html(output_dir='.', doujinshi_obj=None): image_html = '' if doujinshi_obj is not None: doujinshi_dir = os.path.join(output_dir, doujinshi_obj.filename) else: doujinshi_dir = '.' file_list = os.listdir(doujinshi_dir) file_list.sort() for image in file_list: if not os.path.splitext(image)[1] in ('.jpg', '.png'): continue image_html += '\n'\ .format(image) html = readfile('viewer/index.html') css = readfile('viewer/styles.css') js = readfile('viewer/scripts.js') if doujinshi_obj is not None: serialize(doujinshi_obj, doujinshi_dir) name = doujinshi_obj.name if sys.version_info < (3, 0): name = doujinshi_obj.name.encode('utf-8') else: name = {'title': 'nHentai HTML Viewer'} data = html.format(TITLE=name, IMAGES=image_html, SCRIPTS=js, STYLES=css) try: if sys.version_info < (3, 0): with open(os.path.join(doujinshi_dir, 'index.html'), 'w') as f: f.write(data) else: with open(os.path.join(doujinshi_dir, 'index.html'), 'wb') as f: f.write(data.encode('utf-8')) logger.log(15, 'HTML Viewer has been write to \'{0}\''.format(os.path.join(doujinshi_dir, 'index.html'))) except Exception as e: logger.warning('Writen HTML Viewer failed ({})'.format(str(e))) def generate_main_html(output_dir='./'): """ Generate a main html to show all the contain doujinshi. With a link to their `index.html`. Default output folder will be the CLI path. """ image_html = '' main = readfile('viewer/main.html') css = readfile('viewer/main.css') js = readfile('viewer/main.js') element = '\n\