]> git.lizzy.rs Git - nhentai.git/blobdiff - nhentai/utils.py
fix download issues
[nhentai.git] / nhentai / utils.py
index 255cbfb49ab95fef8083e09caf77a4d12190d31d..f884d2f0901d2306eedb1fcc315f775725e042c5 100644 (file)
@@ -1,7 +1,11 @@
 # coding: utf-8
 from __future__ import unicode_literals, print_function
 
+import sys
 import os
+import string
+import zipfile
+import shutil
 from nhentai.logger import logger
 
 
@@ -28,44 +32,77 @@ def urlparse(url):
     return urlparse(url)
 
 
+def readfile(path):
+    loc = os.path.dirname(__file__)
+
+    with open(os.path.join(loc, path), 'r') as file:
+        return file.read()
+
+
 def generate_html(output_dir='.', doujinshi_obj=None):
     image_html = ''
-    previous = ''
 
     if doujinshi_obj is not None:
-        doujinshi_dir = os.path.join(output_dir, str(doujinshi_obj.id))
+        doujinshi_dir = os.path.join(output_dir, doujinshi_obj.filename)
     else:
         doujinshi_dir = '.'
 
     file_list = os.listdir(doujinshi_dir)
     file_list.sort()
 
-    for index, image in enumerate(file_list):
+    for image in file_list:
         if not os.path.splitext(image)[1] in ('.jpg', '.png'):
             continue
 
-        try:
-            next_ = file_list[file_list.index(image) + 1]
-        except IndexError:
-            next_ = ''
+        image_html += '<img src="{0}" class="image-item"/>\n'\
+            .format(image)
 
-        image_html += '<img src="{0}" class="image-item {1}" attr-prev="{2}" attr-next="{3}">\n'\
-            .format(image, 'current' if index == 0 else '', previous, next_)
-        previous = image
-
-    with open(os.path.join(os.path.dirname(__file__), 'doujinshi.html'), 'r') as template:
-        html = template.read()
+    html = readfile('viewer/index.html')
+    css = readfile('viewer/styles.css')
+    js = readfile('viewer/scripts.js')
 
     if doujinshi_obj is not None:
         title = doujinshi_obj.name
+        if sys.version_info < (3, 0):
+            title = title.encode('utf-8')
     else:
         title = 'nHentai HTML Viewer'
 
-    data = html.format(TITLE=title, IMAGES=image_html)
-    with open(os.path.join(doujinshi_dir, 'index.html'), 'w') as f:
-        f.write(data)
+    data = html.format(TITLE=title, IMAGES=image_html, SCRIPTS=js, STYLES=css)
+    try:
+        if sys.version_info < (3, 0):
+            with open(os.path.join(doujinshi_dir, 'index.html'), 'w') as f:
+                f.write(data)
+        else:
+            with open(os.path.join(doujinshi_dir, 'index.html'), 'wb') as f:
+                f.write(data.encode('utf-8'))
 
-    logger.log(15, 'HTML Viewer has been write to \'{0}\''.format(os.path.join(doujinshi_dir, 'index.html')))
+        logger.log(15, 'HTML Viewer has been write to \'{0}\''.format(os.path.join(doujinshi_dir, 'index.html')))
+    except Exception as e:
+        logger.warning('Writen HTML Viewer failed ({})'.format(str(e)))
+
+
+def generate_cbz(output_dir='.', doujinshi_obj=None, rm_origin_dir=False):
+    if doujinshi_obj is not None:
+        doujinshi_dir = os.path.join(output_dir, doujinshi_obj.filename)
+        cbz_filename = os.path.join(os.path.join(doujinshi_dir, '..'), '%s.cbz' % doujinshi_obj.id)
+    else:
+        cbz_filename = './doujinshi.cbz'
+        doujinshi_dir = '.'
+
+    file_list = os.listdir(doujinshi_dir)
+    file_list.sort()
+
+    logger.info('Writing CBZ file to path: {}'.format(cbz_filename))
+    with zipfile.ZipFile(cbz_filename, 'w') as cbz_pf:
+        for image in file_list:
+            image_path = os.path.join(doujinshi_dir, image)
+            cbz_pf.write(image_path, image)
+
+    if rm_origin_dir:
+        shutil.rmtree(doujinshi_dir, ignore_errors=True)
+
+    logger.log(15, 'Comic Book CBZ file has been write to \'{0}\''.format(doujinshi_dir))
 
 
 def format_filename(s):
@@ -79,7 +116,12 @@ and append a file extension like '.txt', so I avoid the potential of using
 an invalid filename.
 
 """
-    valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
+    valid_chars = "-_.()[] %s%s" % (string.ascii_letters, string.digits)
     filename = ''.join(c for c in s if c in valid_chars)
     filename = filename.replace(' ', '_')  # I don't like spaces in filenames.
+    if len(filename) > 100:
+        filename = filename[:100] + '...]'
+
+    # Remove [] from filename
+    filename = filename.replace('[]', '')
     return filename