]> git.lizzy.rs Git - nhentai.git/blob - nhentai/command.py
Merge pull request #92 from RicterZ/dev
[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 import multiprocessing
8
9 from nhentai.cmdline import cmd_parser, banner
10 from nhentai.parser import doujinshi_parser, search_parser, print_doujinshi, favorites_parser, tag_parser, login
11 from nhentai.doujinshi import Doujinshi
12 from nhentai.downloader import Downloader, init_worker
13 from nhentai.logger import logger
14 from nhentai.constant import BASE_URL
15 from nhentai.utils import generate_html, generate_cbz, generate_main_html, check_cookie, signal_handler
16
17
18 def main():
19     banner()
20     options = cmd_parser()
21     logger.info('Using mirror: {0}'.format(BASE_URL))
22
23     from nhentai.constant import PROXY
24     # constant.PROXY will be changed after cmd_parser()
25     if PROXY != {}:
26         logger.info('Using proxy: {0}'.format(PROXY))
27
28     # check your cookie
29     check_cookie()
30
31     doujinshi_ids = []
32     doujinshi_list = []
33
34     if options.favorites:
35         if not options.is_download:
36             logger.warning('You do not specify --download option')
37
38         doujinshis = favorites_parser()
39         print_doujinshi(doujinshis)
40         if options.is_download and doujinshis:
41             doujinshi_ids = [i['id'] for i in doujinshis]
42
43     elif options.tag:
44         doujinshis = tag_parser(options.tag, sorting=options.sorting, max_page=options.max_page)
45         print_doujinshi(doujinshis)
46         if options.is_download and doujinshis:
47             doujinshi_ids = [i['id'] for i in doujinshis]
48
49     elif options.artist:
50         doujinshis = tag_parser(options.artist, max_page=options.max_page, index=1)
51         print_doujinshi(doujinshis)
52         if options.is_download and doujinshis:
53             doujinshi_ids = [i['id'] for i in doujinshis]
54
55     elif options.character:
56         doujinshis = tag_parser(options.character, max_page=options.max_page, index=2)
57         print_doujinshi(doujinshis)
58         if options.is_download and doujinshis:
59             doujinshi_ids = [i['id'] for i in doujinshis]
60
61     elif options.parody:
62         doujinshis = tag_parser(options.parody, max_page=options.max_page, index=3)
63         print_doujinshi(doujinshis)
64         if options.is_download and doujinshis:
65             doujinshi_ids = [i['id'] for i in doujinshis]
66
67     elif options.group:
68         doujinshis = tag_parser(options.group, max_page=options.max_page, index=4)
69         print_doujinshi(doujinshis)
70         if options.is_download and doujinshis:
71             doujinshi_ids = [i['id'] for i in doujinshis]
72
73     elif options.keyword:
74         doujinshis = search_parser(options.keyword, sorting=options.sorting, page=options.page)
75         print_doujinshi(doujinshis)
76         if options.is_download:
77             doujinshi_ids = [i['id'] for i in doujinshis]
78
79     elif not doujinshi_ids:
80         doujinshi_ids = options.id
81
82     if doujinshi_ids:
83         for i, id_ in enumerate(doujinshi_ids):
84             if options.delay:
85                 time.sleep(options.delay)
86
87             doujinshi_info = doujinshi_parser(id_)
88
89             if doujinshi_info:
90                 doujinshi_list.append(Doujinshi(name_format=options.name_format, **doujinshi_info))
91
92             if (i + 1) % 10 == 0:
93                 logger.info('Progress: %d / %d' % (i + 1, len(doujinshi_ids)))
94
95     if not options.is_show:
96         downloader = Downloader(path=options.output_dir, size=options.threads,
97                                 timeout=options.timeout, delay=options.delay)
98
99         for doujinshi in doujinshi_list:
100
101             doujinshi.downloader = downloader
102             doujinshi.download()
103
104             if not options.is_nohtml and not options.is_cbz:
105                 generate_html(options.output_dir, doujinshi)
106             elif options.is_cbz:
107                 generate_cbz(options.output_dir, doujinshi, options.rm_origin_dir)
108
109         if options.main_viewer:
110             generate_main_html(options.output_dir)
111
112         if not platform.system() == 'Windows':
113             logger.log(15, '🍻 All done.')
114         else:
115             logger.log(15, 'All done.')
116
117     else:
118         [doujinshi.show() for doujinshi in doujinshi_list]
119
120
121 signal.signal(signal.SIGINT, signal_handler)
122
123
124 if __name__ == '__main__':
125     main()