]> git.lizzy.rs Git - nhentai.git/blob - nhentai/command.py
Merge pull request #53 from symant233/master
[nhentai.git] / nhentai / command.py
1 #!/usr/bin/env python2.7
2 # coding: utf-8
3 from __future__ import unicode_literals, print_function
4 import signal
5 import platform
6 import time
7
8 from nhentai.cmdline import cmd_parser, banner
9 from nhentai.parser import doujinshi_parser, search_parser, print_doujinshi, favorites_parser, tag_parser, login
10 from nhentai.doujinshi import Doujinshi
11 from nhentai.downloader import Downloader
12 from nhentai.logger import logger
13 from nhentai.constant import BASE_URL
14 from nhentai.utils import generate_html, generate_cbz, generate_main_html
15
16
17 def main():
18     banner()
19     options = cmd_parser()
20     logger.info('Using mirror: {0}'.format(BASE_URL))
21
22     from nhentai.constant import PROXY 
23     # constant.PROXY will be changed after cmd_parser()
24     if PROXY != {}:
25         logger.info('Using proxy: {0}'.format(PROXY))
26
27     doujinshi_ids = []
28     doujinshi_list = []
29
30     if options.favorites:
31         if not options.is_download:
32             logger.warning('You do not specify --download option')
33
34         doujinshi_ids = favorites_parser()
35
36     elif options.tag:
37         doujinshis = tag_parser(options.tag, max_page=options.max_page)
38         print_doujinshi(doujinshis)
39         if options.is_download and doujinshis:
40             doujinshi_ids = map(lambda d: d['id'], doujinshis)
41
42     elif options.keyword:
43         doujinshis = search_parser(options.keyword, options.page)
44         print_doujinshi(doujinshis)
45         if options.is_download:
46             doujinshi_ids = map(lambda d: d['id'], doujinshis)
47
48     elif not doujinshi_ids:
49         doujinshi_ids = options.id
50
51     if doujinshi_ids:
52         for id_ in doujinshi_ids:
53             if options.delay:
54                 time.sleep(options.delay)
55             doujinshi_info = doujinshi_parser(id_)
56             doujinshi_list.append(Doujinshi(name_format=options.name_format, **doujinshi_info))
57
58     if not options.is_show:
59         downloader = Downloader(path=options.output_dir,
60                                 thread=options.threads, timeout=options.timeout, delay=options.delay)
61
62         for doujinshi in doujinshi_list:
63             doujinshi.downloader = downloader
64             doujinshi.download()
65             if not options.is_nohtml and not options.is_cbz:
66                 generate_html(options.output_dir, doujinshi)
67             elif options.is_cbz:
68                 generate_cbz(options.output_dir, doujinshi, options.rm_origin_dir)
69         if options.main_viewer:
70             generate_main_html(options.output_dir)
71         if not platform.system() == 'Windows':
72             logger.log(15, '🍻 All done.')
73         else:
74             logger.log(15, 'All done.')
75
76     else:
77         [doujinshi.show() for doujinshi in doujinshi_list]
78
79
80 def signal_handler(signal, frame):
81     logger.error('Ctrl-C signal received. Stopping...')
82     exit(1)
83
84
85 signal.signal(signal.SIGINT, signal_handler)
86
87 if __name__ == '__main__':
88     main()