]> git.lizzy.rs Git - nhentai.git/blob - nhentai/command.py
merge to functions
[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
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, LANGUAGE
14 from nhentai.utils import generate_html, generate_cbz, generate_main_html, generate_pdf, \
15     paging, check_cookie, signal_handler, DB
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     doujinshis = []
32     doujinshi_ids = []
33     doujinshi_list = []
34
35     page_list = paging(options.page)
36
37     if options.favorites:
38         if not options.is_download:
39             logger.warning('You do not specify --download option')
40
41         doujinshis = favorites_parser(page=page_list)
42
43     elif options.keyword:
44         if LANGUAGE:
45             logger.info('Using default language: {0}'.format(LANGUAGE))
46             options.keyword += ', language:{}'.format(LANGUAGE)
47         doujinshis = search_parser(options.keyword, sorting=options.sorting, page=page_list,
48                                    is_page_all=options.page_all)
49
50     elif not doujinshi_ids:
51         doujinshi_ids = options.id
52
53     print_doujinshi(doujinshis)
54     if options.is_download and doujinshis:
55         doujinshi_ids = [i['id'] for i in doujinshis]
56
57         if options.is_save_download_history:
58             with DB() as db:
59                 data = set(db.get_all())
60
61             doujinshi_ids = list(set(doujinshi_ids) - data)
62
63     if doujinshi_ids:
64         for i, id_ in enumerate(doujinshi_ids):
65             if options.delay:
66                 time.sleep(options.delay)
67
68             doujinshi_info = doujinshi_parser(id_)
69
70             if doujinshi_info:
71                 doujinshi_list.append(Doujinshi(name_format=options.name_format, **doujinshi_info))
72
73             if (i + 1) % 10 == 0:
74                 logger.info('Progress: %d / %d' % (i + 1, len(doujinshi_ids)))
75
76     if not options.is_show:
77         downloader = Downloader(path=options.output_dir, size=options.threads,
78                                 timeout=options.timeout, delay=options.delay)
79
80         for doujinshi in doujinshi_list:
81
82             doujinshi.downloader = downloader
83             doujinshi.download()
84             if options.is_save_download_history:
85                 with DB() as db:
86                     db.add_one(doujinshi.id)
87
88             if not options.is_nohtml and not options.is_cbz and not options.is_pdf:
89                 generate_html(options.output_dir, doujinshi)
90             elif options.is_cbz:
91                 generate_cbz(options.output_dir, doujinshi, options.rm_origin_dir)
92             elif options.is_pdf:
93                 generate_pdf(options.output_dir, doujinshi, options.rm_origin_dir)
94
95         if options.main_viewer:
96             generate_main_html(options.output_dir)
97
98         if not platform.system() == 'Windows':
99             logger.log(15, '🍻 All done.')
100         else:
101             logger.log(15, 'All done.')
102
103     else:
104         [doujinshi.show() for doujinshi in doujinshi_list]
105
106
107 signal.signal(signal.SIGINT, signal_handler)
108
109 if __name__ == '__main__':
110     main()