Add script to create CZB files.
This commit is contained in:
parent
1478f22099
commit
63f2ea4758
2 changed files with 72 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
Dosage 2.3 (released xx.xx.2013)
|
||||
|
||||
Features:
|
||||
- scripts: Added script to create a CBZ archive for a given comic
|
||||
directory.
|
||||
|
||||
|
||||
Dosage 2.2 (released 30.4.2013)
|
||||
|
||||
Features:
|
||||
|
|
65
scripts/create-cbz.py
Executable file
65
scripts/create-cbz.py
Executable file
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env python
|
||||
# Copyright (C) 2013 Bastian Kleineidam
|
||||
"""
|
||||
Creates a CBZ file in the comic directory.
|
||||
Uses an ordered symlink directory (see order-symlinks.py) if it exists,
|
||||
else the plain files are used.
|
||||
"""
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
import os
|
||||
import zipfile
|
||||
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
|
||||
from dosagelib.configuration import App
|
||||
|
||||
|
||||
# known image file extensions
|
||||
ImageExts = (
|
||||
".jpg",
|
||||
".jpeg",
|
||||
".gif",
|
||||
".png",
|
||||
)
|
||||
|
||||
def is_image(filename):
|
||||
"""Determine if given filename is an image."""
|
||||
# note: isfile() also accepts symlinks
|
||||
return os.path.isfile(filename) and filename.lower().endswith(ImageExts)
|
||||
|
||||
|
||||
def get_cbz_comment():
|
||||
"""Return a UTF-8 encoded comment no longer than 65535 bytes.
|
||||
At the moment this just returns the application name and version,
|
||||
since cbz readers do not seem to use the comment string anyway."""
|
||||
return (u"Created by %s" % App).encode('utf-8')
|
||||
|
||||
|
||||
def create_cbz(directory):
|
||||
"""Creates or updates a CBZ from files in the given comic directory."""
|
||||
if not os.path.isdir(directory):
|
||||
print("ERROR: Directory", directory, "not found.")
|
||||
return
|
||||
base = os.path.basename(directory.rstrip(os.path.sep))
|
||||
zipname = '%s.cbz' % base
|
||||
zipname = os.path.join(directory, zipname)
|
||||
d = os.path.join(directory, 'inorder')
|
||||
if os.path.isdir(d):
|
||||
# use directory with ordered symlinks
|
||||
directory = d
|
||||
if os.path.exists(zipname):
|
||||
os.remove(zipname)
|
||||
with zipfile.ZipFile(zipname, 'w') as myzip:
|
||||
for filename in sorted(os.listdir(d)):
|
||||
fullname = os.path.join(d, filename)
|
||||
if is_image(fullname):
|
||||
myzip.write(fullname)
|
||||
myzip.comment = get_cbz_comment()
|
||||
print("INFO: Created", zipname)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) > 1:
|
||||
for arg in sys.argv[1:]:
|
||||
create_cbz(arg)
|
||||
else:
|
||||
print("Usage: %s <comic-dir>..." % os.path.basename(sys.argv[0]))
|
Loading…
Reference in a new issue