]> git.lizzy.rs Git - nhentai.git/blob - nhentai/command.py
aad850ad7c6bf59a1893313c3ed062e3ece45015
[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, check_cookie
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     # check your cookie
28     check_cookie()
29
30     doujinshi_ids = []
31     doujinshi_list = []
32
33     if options.favorites:
34         if not options.is_download:
35             logger.warning('You do not specify --download option')
36
37         doujinshis = favorites_parser()
38         print_doujinshi(doujinshis)
39         if options.is_download and doujinshis:
40             doujinshi_ids = map(lambda d: d['id'], doujinshis)
41
42     elif options.tag:
43         doujinshis = tag_parser(options.tag, max_page=options.max_page)
44         print_doujinshi(doujinshis)
45         if options.is_download and doujinshis:
46             doujinshi_ids = map(lambda d: d['id'], doujinshis)
47
48     elif options.artist:
49         doujinshis = tag_parser(options.artist, max_page=options.max_page, index=1)
50         print_doujinshi(doujinshis)
51         if options.is_download and doujinshis:
52             doujinshi_ids = map(lambda d: d['id'], doujinshis)
53
54     elif options.character:
55         doujinshis = tag_parser(options.character, max_page=options.max_page, index=2)
56         print_doujinshi(doujinshis)
57         if options.is_download and doujinshis:
58             doujinshi_ids = map(lambda d: d['id'], doujinshis)
59
60     elif options.parody:
61         doujinshis = tag_parser(options.parody, max_page=options.max_page, index=3)
62         print_doujinshi(doujinshis)
63         if options.is_download and doujinshis:
64             doujinshi_ids = map(lambda d: d['id'], doujinshis)
65
66     elif options.group:
67         doujinshis = tag_parser(options.group, max_page=options.max_page, index=4)
68         print_doujinshi(doujinshis)
69         if options.is_download and doujinshis:
70             doujinshi_ids = map(lambda d: d['id'], doujinshis)
71
72     elif options.keyword:
73         doujinshis = search_parser(options.keyword, options.page)
74         print_doujinshi(doujinshis)
75         if options.is_download:
76             doujinshi_ids = map(lambda d: d['id'], doujinshis)
77
78     elif not doujinshi_ids:
79         doujinshi_ids = options.id
80
81     if doujinshi_ids:
82         for id_ in doujinshi_ids:
83             if options.delay:
84                 time.sleep(options.delay)
85             doujinshi_info = doujinshi_parser(id_)
86             doujinshi_list.append(Doujinshi(name_format=options.name_format, **doujinshi_info))
87
88     if not options.is_show:
89         downloader = Downloader(path=options.output_dir,
90                                 thread=options.threads, timeout=options.timeout, delay=options.delay)
91
92         for doujinshi in doujinshi_list:
93             doujinshi.downloader = downloader
94             doujinshi.download()
95             if not options.is_nohtml and not options.is_cbz:
96                 generate_html(options.output_dir, doujinshi)
97             elif options.is_cbz:
98                 generate_cbz(options.output_dir, doujinshi, options.rm_origin_dir)
99         if options.main_viewer:
100             generate_main_html(options.output_dir)
101         if not platform.system() == 'Windows':
102             logger.log(15, '🍻 All done.')
103         else:
104             logger.log(15, 'All done.')
105
106     else:
107         [doujinshi.show() for doujinshi in doujinshi_list]
108
109
110 def signal_handler(signal, frame):
111     logger.error('Ctrl-C signal received. Stopping...')
112     exit(1)
113
114
115 signal.signal(signal.SIGINT, signal_handler)
116
117 if __name__ == '__main__':
118     main()