]> git.lizzy.rs Git - nhentai.git/blob - nhentai/command.py
add html doujinshi viewer
[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 os
5 import signal
6 import platform
7
8 from nhentai.cmdline import cmd_parser, banner
9 from nhentai.parser import doujinshi_parser, search_parser, print_doujinshi
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
15
16 def main():
17     banner()
18     logger.info('Using mirror: {0}'.format(BASE_URL))
19     options = cmd_parser()
20
21     doujinshi_ids = []
22     doujinshi_list = []
23
24     if options.keyword:
25         doujinshis = search_parser(options.keyword, options.page)
26         print_doujinshi(doujinshis)
27         if options.is_download:
28             doujinshi_ids = map(lambda d: d['id'], doujinshis)
29     else:
30         doujinshi_ids = options.id
31
32     if doujinshi_ids:
33         for id in doujinshi_ids:
34             doujinshi_info = doujinshi_parser(id)
35             doujinshi_list.append(Doujinshi(**doujinshi_info))
36     else:
37         exit(0)
38
39     if not options.is_show:
40         downloader = Downloader(path=options.output_dir,
41                                 thread=options.threads, timeout=options.timeout)
42
43         for doujinshi in doujinshi_list:
44             doujinshi.downloader = downloader
45             doujinshi.download()
46
47             image_html = ''
48             previous = ''
49
50             doujinshi_dir = os.path.join(options.output_dir, str(doujinshi.id))
51             file_list = os.listdir(doujinshi_dir)
52             for index, image in enumerate(file_list):
53                 try:
54                     next_ = file_list[file_list.index(image) + 1]
55                 except IndexError:
56                     next_ = ''
57
58                 image_html += '<img src="{0}" class="image-item {1}" attr-prev="{2}" attr-next="{3}">\n'\
59                     .format(image, 'current' if index == 0 else '', previous, next_)
60                 previous = image
61
62             with open(os.path.join(os.path.dirname(__file__), 'doujinshi.html'), 'r') as template:
63                 html = template.read()
64
65             data = html.format(TITLE=doujinshi.name, IMAGES=image_html)
66             with open(os.path.join(doujinshi_dir, 'index.html'), 'w') as f:
67                 f.write(data)
68
69             logger.log(15, 'HTML Viewer has been write to \'{0}\''.format(os.path.join(doujinshi_dir, 'index.html')))
70
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. Quit.')
82     exit(1)
83
84
85 signal.signal(signal.SIGINT, signal_handler)
86
87 if __name__ == '__main__':
88     main()