Add rename bookwalker manga

This commit is contained in:
2024-06-15 09:10:01 +08:00
parent 83def9bbfb
commit 4575f80cbd

84
rename_bw_manga.py Normal file
View File

@@ -0,0 +1,84 @@
from argparse import ArgumentParser
from json import loads
from os import listdir
from os.path import exists, isdir, join, splitext
from shutil import move
from typing import List
from zipfile import ZipFile
p = ArgumentParser()
p.add_argument("-r", "--recursive", help="Recursively process input directory",
action='store_true', default=False)
p.add_argument("-v", "--verbose", help="Enable verbose logging",
action='store_true', default=False)
p.add_argument("input", help="Input file/directory.", default='.', nargs='?')
def get_zip_files(dir: str, r: bool) -> List[str]:
if not isdir(dir):
if exists(dir) and dir.endswith('.zip'):
return [dir]
return []
files = listdir(dir)
re = []
for file in files:
file = join(dir, file)
if isdir(file):
if r:
re += get_zip_files(file, r)
elif file.endswith('.zip'):
re.append(file)
return re
def rename_zip(file: str, json_path: str, verbose: bool):
tmp = splitext(file)
tmp_file = tmp[0] + '_tmp' + tmp[1]
with ZipFile(file, 'r') as inp:
files = inp.namelist()
json_data = inp.open("configuration_pack.json")
if not json_data:
raise ValueError('Can not find configuration_pack.json in zip.')
files.remove("configuration_pack.json")
json_data = json_data.read()
with open(json_path, 'wb') as json:
json.write(json_data)
if verbose:
print(f'{file}/configuration_pack.json -> {json_path}')
data = loads(json_data)
config = data['configuration']
with ZipFile(tmp_file, 'w') as out:
clen = len(str(len(config['contents'])))
for c in config['contents']:
f = c['file']
fc = data[f]
plen = len(str(len(fc['FileLinkInfo']['PageLinkInfoList'])))
for page in fc['FileLinkInfo']['PageLinkInfoList']:
page_no = page['Page']['No']
page_src = f"{f}/{page_no}.{c['type']}"
page_dest = f"{str(c['index']).rjust(clen, '0')}_{f.replace('/', '_')}_{str(page_no).rjust(plen, '0')}.{c['type']}" # noqa: E501
page_data = inp.open(page_src)
if not page_data:
raise ValueError(f'Can not find {page_src}')
files.remove(page_src)
out.writestr(page_dest, page_data.read())
if verbose:
print(f'{file}/{page_src} -> {tmp_file}/{page_dest}')
files = [f for f in files if not f.endswith('/')]
if len(files) > 0:
print(files)
raise ValueError('Some file not used.')
move(tmp_file, file)
if verbose:
print(f'{tmp_file} -> {file}')
arg = p.parse_intermixed_args()
for file in get_zip_files(arg.input, arg.recursive):
json_path = splitext(file)[0] + '.json'
if exists(json_path):
if arg.verbose:
print(f'Skip file {file}.')
continue
rename_zip(file, json_path, arg.verbose)