From b2fae226f9f80b5e25c3150fbc5d6ce7a68c94ce Mon Sep 17 00:00:00 2001 From: RicterZ Date: Sun, 11 Oct 2020 01:38:08 +0800 Subject: [PATCH] use config.json --- nhentai/cmdline.py | 106 +++++++++++++++++--------------------------- nhentai/command.py | 18 ++++---- nhentai/constant.py | 12 ++--- nhentai/parser.py | 4 +- nhentai/utils.py | 4 +- 5 files changed, 60 insertions(+), 84 deletions(-) diff --git a/nhentai/cmdline.py b/nhentai/cmdline.py index 39787cd..f1e8184 100644 --- a/nhentai/cmdline.py +++ b/nhentai/cmdline.py @@ -2,7 +2,9 @@ from __future__ import print_function import os import sys +import json from optparse import OptionParser + try: from itertools import ifilter as filter except ImportError: @@ -35,7 +37,29 @@ def banner(): ''' % __version__) +def load_config(): + if not os.path.exists(constant.NHENTAI_CONFIG_FILE): + return + + try: + with open(constant.NHENTAI_CONFIG_FILE, 'r') as f: + constant.CONFIG = json.load(f) + except json.JSONDecodeError: + logger.error('Failed to load config file.') + write_config() + + +def write_config(): + if not os.path.exists(constant.NHENTAI_HOME): + os.mkdir(constant.NHENTAI_HOME) + + with open(constant.NHENTAI_CONFIG_FILE, 'w') as f: + f.write(json.dumps(constant.CONFIG)) + + def cmd_parser(): + load_config() + parser = OptionParser('\n nhentai --search [keyword] --download' '\n NHENTAI=http://h.loli.club nhentai --id [ID ...]' '\n nhentai --file [filename]' @@ -128,83 +152,35 @@ def cmd_parser(): logger.info('Download history cleaned.') exit(0) - if os.path.exists(constant.NHENTAI_COOKIE): - with open(constant.NHENTAI_COOKIE, 'r') as f: - constant.COOKIE = f.read() - + # --- set config --- if args.cookie: - try: - if not os.path.exists(constant.NHENTAI_HOME): - os.mkdir(constant.NHENTAI_HOME) - - with open(constant.NHENTAI_COOKIE, 'w') as f: - f.write(args.cookie) - except Exception as e: - logger.error('Cannot create NHENTAI_HOME: {}'.format(str(e))) - exit(1) - + constant.CONFIG['cookie'] = args.cookie logger.info('Cookie saved.') + write_config() exit(0) - if os.path.exists(constant.NHENTAI_LANGUAGE) and not args.language: - with open(constant.NHENTAI_LANGUAGE, 'r') as f: - constant.LANGUAGE = f.read() - args.language = f.read() - if args.language: - try: - if not os.path.exists(constant.NHENTAI_HOME): - os.mkdir(constant.NHENTAI_HOME) - - with open(constant.NHENTAI_LANGUAGE, 'w') as f: - f.write(args.language) - except Exception as e: - logger.error('Cannot create NHENTAI_HOME: {}'.format(str(e))) - exit(1) - - logger.info('Default language now is {}.'.format(args.language)) + constant.CONFIG['language'] = args.language + logger.info('LANGUAGE now set to \'{0}\''.format(args.language)) + write_config() exit(0) - - if args.clean_language: - try: - if not os.path.exists(constant.NHENTAI_HOME): - os.mkdir(constant.NHENTAI_HOME) - - with open(constant.NHENTAI_LANGUAGE, 'w') as f: - f.close() - except Exception as e: - logger.error('Cannot create NHENTAI_HOME: {}'.format(str(e))) - exit(1) - - logger.info('Language now is DEFAULT') - exit(0) - - if os.path.exists(constant.NHENTAI_PROXY): - with open(constant.NHENTAI_PROXY, 'r') as f: - link = f.read() - constant.PROXY = {'http': link, 'https': link} + # TODO: search without language if args.proxy: - try: - if not os.path.exists(constant.NHENTAI_HOME): - os.mkdir(constant.NHENTAI_HOME) - - proxy_url = urlparse(args.proxy) - if proxy_url.scheme not in ('http', 'https'): - logger.error('Invalid protocol \'{0}\' of proxy, ignored'.format(proxy_url.scheme)) - else: - with open(constant.NHENTAI_PROXY, 'w') as f: - f.write(args.proxy) - - except Exception as e: - logger.error('Cannot create NHENTAI_HOME: {}'.format(str(e))) - exit(1) - + proxy_url = urlparse(args.proxy) + if proxy_url.scheme not in ('http', 'https'): + logger.error('Invalid protocol \'{0}\' of proxy, ignored'.format(proxy_url.scheme)) + constant.CONFIG['proxy'] = { + 'http': args.proxy, + 'https': args.proxy, + } logger.info('Proxy \'{0}\' saved.'.format(args.proxy)) + write_config() exit(0) + # --- end set config --- if args.favorites: - if not constant.COOKIE: + if not constant.CONFIG['cookie']: logger.warning('Cookie has not been set, please use `nhentai --cookie \'COOKIE\'` to set it.') exit(1) diff --git a/nhentai/command.py b/nhentai/command.py index 963cd84..9b0a99e 100644 --- a/nhentai/command.py +++ b/nhentai/command.py @@ -1,16 +1,19 @@ #!/usr/bin/env python2.7 # coding: utf-8 from __future__ import unicode_literals, print_function +import json +import os import signal import platform import time +from nhentai import constant from nhentai.cmdline import cmd_parser, banner from nhentai.parser import doujinshi_parser, search_parser, print_doujinshi, favorites_parser from nhentai.doujinshi import Doujinshi from nhentai.downloader import Downloader from nhentai.logger import logger -from nhentai.constant import BASE_URL, LANGUAGE +from nhentai.constant import NHENTAI_CONFIG_FILE, BASE_URL from nhentai.utils import generate_html, generate_cbz, generate_main_html, generate_pdf, \ paging, check_cookie, signal_handler, DB @@ -20,10 +23,9 @@ def main(): options = cmd_parser() logger.info('Using mirror: {0}'.format(BASE_URL)) - from nhentai.constant import PROXY - # constant.PROXY will be changed after cmd_parser() - if PROXY: - logger.info('Using proxy: {0}'.format(PROXY)) + # CONFIG['proxy'] will be changed after cmd_parser() + if constant.CONFIG['proxy']: + logger.info('Using proxy: {0}'.format(constant.CONFIG['proxy'])) # check your cookie check_cookie() @@ -41,9 +43,9 @@ def main(): doujinshis = favorites_parser(page=page_list) elif options.keyword: - if LANGUAGE: - logger.info('Using default language: {0}'.format(LANGUAGE)) - options.keyword += ', language:{}'.format(LANGUAGE) + if constant.CONFIG['language']: + logger.info('Using default language: {0}'.format(constant.CONFIG['language'])) + options.keyword += ' language:{}'.format(constant.CONFIG['language']) doujinshis = search_parser(options.keyword, sorting=options.sorting, page=page_list, is_page_all=options.page_all) diff --git a/nhentai/constant.py b/nhentai/constant.py index c6b40c4..8ec89f7 100644 --- a/nhentai/constant.py +++ b/nhentai/constant.py @@ -26,12 +26,12 @@ u = urlparse(BASE_URL) IMAGE_URL = '%s://i.%s/galleries' % (u.scheme, u.hostname) NHENTAI_HOME = os.path.join(os.getenv('HOME', tempfile.gettempdir()), '.nhentai') -NHENTAI_PROXY = os.path.join(NHENTAI_HOME, 'proxy') -NHENTAI_COOKIE = os.path.join(NHENTAI_HOME, 'cookie') -NHENTAI_LANGUAGE = os.path.join(NHENTAI_HOME, 'language') NHENTAI_HISTORY = os.path.join(NHENTAI_HOME, 'history.sqlite3') +NHENTAI_CONFIG_FILE = os.path.join(NHENTAI_HOME, 'config.json') -PROXY = {} +CONFIG = { + 'proxy': {}, + 'cookie': '', + 'language': '', +} -COOKIE = '' -LANGUAGE = '' diff --git a/nhentai/parser.py b/nhentai/parser.py index c61f8f7..484c0f6 100644 --- a/nhentai/parser.py +++ b/nhentai/parser.py @@ -1,7 +1,6 @@ # coding: utf-8 from __future__ import unicode_literals, print_function -import sys import os import re import time @@ -204,10 +203,9 @@ def search_parser(keyword, sorting, page, is_page_all=False): init_response = request('get', url.replace('%2B', '+')).json() page = range(1, init_response['num_pages']+1) + total = '/{0}'.format(page[-1]) if is_page_all else '' for p in page: i = 0 - if is_page_all: - total = '/{0}'.format(page[-1]) logger.info('Searching doujinshis using keywords "{0}" on page {1}{2}'.format(keyword, p, total)) while i < 3: diff --git a/nhentai/utils.py b/nhentai/utils.py index 2a0cb5c..fb73559 100644 --- a/nhentai/utils.py +++ b/nhentai/utils.py @@ -20,9 +20,9 @@ def request(method, url, **kwargs): session.headers.update({ 'Referer': constant.LOGIN_URL, 'User-Agent': 'nhentai command line client (https://github.com/RicterZ/nhentai)', - 'Cookie': constant.COOKIE + 'Cookie': constant.CONFIG['cookie'] }) - return getattr(session, method)(url, proxies=constant.PROXY, verify=False, **kwargs) + return getattr(session, method)(url, proxies=constant.CONFIG['proxy'], verify=False, **kwargs) def check_cookie(): -- 2.44.0