PyComicPackRouMan/utils/CBZUtils.py
2022-12-21 01:34:08 +08:00

84 lines
3.0 KiB
Python

import os
from pathlib import Path
from zipfile import ZipFile
from utils.comic.ComicInfo import comicInfo
from utils.Ntfy import ntfy
class CBZUtils:
@classmethod
def readDirsOrFiles(cls,dir,type):
data = []
files = os.listdir(dir)
for file in files:
path = os.path.join(dir,file)
if type == "files" and os.path.isfile(path):
data.append(path)
if type == "dirs" and os.path.isdir(path):
data.append(path)
return data
@classmethod
def zip_compression(cls,source_dir, target_file):
target_dir = os.path.dirname(target_file)
if not os.path.exists(target_dir):
os.makedirs(target_dir)
if not os.path.exists(target_file):
with ZipFile(target_file, mode='w') as zf:
for path, dir_names, filenames in os.walk(source_dir):
path = Path(path)
arc_dir = path.relative_to(source_dir)
y = 0
for filename in filenames:
y = y + 1
print("打包中:" + str(y) + "/" + str(len(filenames)), os.path.join(source_dir, filename))
zf.write(path.joinpath(filename), arc_dir.joinpath(filename))
zf.close()
ntfy.sendMsg(f"打包完成:{target_file}")
#md5_file = md5(target_file)
#print("md5:", md5_file)
#msg[target_file] = md5_file
else:
print("文件已存在:", target_file)
return len(filenames)
@classmethod
def packAutoComicChapterCBZ(cls):
chapter_path = comicInfo.getDirComicChapter()
packCBZ_path = comicInfo.getDirCBZComicChapter()
if os.path.exists(chapter_path):
dirs = os.listdir(chapter_path)
for file in dirs:
if file.startswith("scramble="):
try:
os.remove(file)
except:
print(f"删除 {file} 发生错误,已跳过")
try:
size_zip = cls.zip_compression(chapter_path,packCBZ_path+".CBZ")
size_imgs = len(comicInfo.getChapterImgs())
if size_zip -1 == size_imgs:
ntfy.sendMsg(f"打包校验成功: {packCBZ_path}")
return True
else:
ntfy.sendMsg(f"打包检验不完整:{packCBZ_path}")
return False
except:
ntfy.sendMsg("CBZ打包失败")
comicInfo.nextCBZToDoneChapter()
@classmethod
def zip_info(cls,zip_path=None):
pack_cbz_path = comicInfo.getDirCBZComicChapter()
if zip_path == None:
zip_path = pack_cbz_path+".CBZ"
data = None
if os.path.exists(zip_path):
with ZipFile(zip_path, "r") as zfile:
data = zfile.namelist()
zfile.close()
return data