280 lines
8.3 KiB
Python
280 lines
8.3 KiB
Python
from xml.dom.minidom import Document
|
||
import os,re
|
||
from utils.comic.PathStr import pathStr
|
||
import json,shutil
|
||
|
||
|
||
class comicInfo():
|
||
document = Document()
|
||
pathComicInfo = None
|
||
|
||
root = "ComicInfo"
|
||
chapter = "Title"
|
||
comic_name = "Series"
|
||
dep = "Summary"
|
||
author = "Writer"
|
||
tag = "Genre"
|
||
cbs = "Publisher"
|
||
lang = "LanguageISO"
|
||
comic_names = "SeriesGroup"
|
||
tags = "Tag"
|
||
|
||
str_comicName = None
|
||
str_chapter = None
|
||
str_icon = None
|
||
str_homePage = None
|
||
|
||
chapter_node = None
|
||
comicName_node = None
|
||
dep_node = None
|
||
author_node = None
|
||
tag_node = None
|
||
cbs_node = None
|
||
lang_node = None
|
||
comicNames_node = None
|
||
tags_node = None
|
||
|
||
@classmethod
|
||
def setNodeAndValue(cls,node,value):
|
||
if not value == None:
|
||
c_node = cls.document.createElement(node)
|
||
node_text = cls.document.createTextNode(value)
|
||
c_node.appendChild(node_text)
|
||
return c_node
|
||
return None
|
||
|
||
@classmethod
|
||
def Root(cls):
|
||
return cls.document.createElement(cls.root)
|
||
|
||
@classmethod
|
||
def setChapterName(cls,value):
|
||
cls.str_chapter = cls.fixFileName(value)
|
||
cls.chapter_node = cls.setNodeAndValue(cls.chapter,value)
|
||
|
||
@classmethod
|
||
def setComicName(cls,value):
|
||
cls.str_comicName = cls.fixFileName(value)
|
||
cls.comicName_node = cls.setNodeAndValue(cls.comic_name, value)
|
||
|
||
@classmethod
|
||
def setComicNames(cls,value):
|
||
cls.comicNames_node = cls.setNodeAndValue(cls.comic_names,value)
|
||
|
||
@classmethod
|
||
def setDep(cls,value):
|
||
cls.dep_node = cls.setNodeAndValue(cls.dep, value)
|
||
|
||
@classmethod
|
||
def setAuthor(cls,value):
|
||
cls.author_node = cls.setNodeAndValue(cls.author,value)
|
||
|
||
@classmethod
|
||
def setLang(cls,value):
|
||
cls.lang_node = cls.setNodeAndValue(cls.lang, value)
|
||
|
||
@classmethod
|
||
def setTag(cls,value):
|
||
cls.tag_node = cls.setNodeAndValue(cls.tag, value)
|
||
|
||
@classmethod
|
||
def setTags(cls,value):
|
||
cls.tags_node = cls.setNodeAndValue(cls.tags,value)
|
||
|
||
@classmethod
|
||
def setCBS(cls,value):
|
||
cls.cbs_node = cls.setNodeAndValue(cls.cbs,value)
|
||
|
||
@classmethod
|
||
def setIcon(cls,value):
|
||
cls.str_icon = value
|
||
return cls.str_icon
|
||
|
||
@classmethod
|
||
def setHomePage(cls, value):
|
||
cls.str_homePage = value
|
||
|
||
@classmethod
|
||
def getHomePage(cls):
|
||
return cls.str_homePage
|
||
|
||
'''
|
||
获取网站主页
|
||
'''
|
||
@classmethod
|
||
def getBaseUrl(cls,url=None):
|
||
if url == None:
|
||
url = cls.str_homePage
|
||
num = 3
|
||
index = 0
|
||
for x in range(0, num):
|
||
index = str(url).find("/",index)+1
|
||
return url[0:index-1]
|
||
|
||
@classmethod
|
||
def getIcon(cls):
|
||
return cls.str_icon
|
||
|
||
@classmethod
|
||
def getComicName(cls):
|
||
return cls.str_comicName
|
||
|
||
@classmethod
|
||
def getChapter(cls):
|
||
return cls.str_chapter
|
||
|
||
@classmethod
|
||
def fixFileName(cls,filename,replace=None):
|
||
intab = r'[?*/\|.:><]'
|
||
str_replace = ""
|
||
if not replace == None:
|
||
str_replace = replace
|
||
filename = re.sub(intab, str_replace, filename)
|
||
return filename
|
||
|
||
@classmethod
|
||
def getDirConfComic(cls):
|
||
if not cls.str_comicName == None:
|
||
return os.path.join(pathStr.base_conf_path, cls.str_comicName)
|
||
else:
|
||
print("comicName不存在,退出中")
|
||
exit()
|
||
|
||
@classmethod
|
||
def getDirCBZComic(cls):
|
||
if not cls.str_comicName == None:
|
||
return os.path.join(pathStr.base_CBZ, cls.str_comicName)
|
||
else:
|
||
print("comicName不存在,退出中")
|
||
exit()
|
||
|
||
@classmethod
|
||
def getDirCBZComicChapter(cls):
|
||
if not cls.str_comicName == None and not cls.str_chapter == None:
|
||
return os.path.join(pathStr.base_CBZ,cls.str_comicName,cls.str_chapter)
|
||
else:
|
||
print("comicName不存在,退出中")
|
||
exit()
|
||
|
||
@classmethod
|
||
def getDirComic(cls):
|
||
if not cls.str_comicName == None:
|
||
return os.path.join(pathStr.base_comic_img, cls.str_comicName)
|
||
else:
|
||
print("comicName不存在,退出中")
|
||
exit()
|
||
|
||
@classmethod
|
||
def getDirComicChapter(cls):
|
||
if not cls.str_comicName == None and not cls.str_chapter == None:
|
||
return os.path.join(pathStr.base_comic_img,cls.str_comicName,cls.str_chapter)
|
||
else:
|
||
print("comicName与chapter 不存在,退出中")
|
||
exit()
|
||
@classmethod
|
||
def getPathComicInfoXML(cls):
|
||
try:
|
||
cls.pathComicInfo = os.path.join(pathStr.base_comic_img,cls.str_comicName,cls.str_chapter,"ComicInfo.xml")
|
||
except:
|
||
return None
|
||
return cls.pathComicInfo
|
||
|
||
@classmethod
|
||
def writeComicInfoXML(cls,chapter):
|
||
if cls.chapter == cls.fixFileName(chapter):
|
||
print(f"cls.chapter {cls.chapter} 与 chapter {chapter} 不相等,已自动跳过")
|
||
|
||
root = cls.Root()
|
||
newDocument = Document()
|
||
newDocument.appendChild(root)
|
||
if not cls.chapter_node == None:
|
||
root.appendChild(cls.chapter_node)
|
||
if not cls.comicName_node == None:
|
||
root.appendChild(cls.comicName_node)
|
||
if not cls.dep_node == None:
|
||
root.appendChild(cls.dep_node)
|
||
if not cls.author_node == None:
|
||
root.appendChild(cls.author_node)
|
||
if not cls.tag_node == None:
|
||
root.appendChild(cls.tag_node)
|
||
if not cls.cbs_node == None:
|
||
root.appendChild(cls.cbs_node)
|
||
if not cls.lang_node == None:
|
||
root.appendChild(cls.lang_node)
|
||
if not cls.comicNames_node == None:
|
||
root.appendChild(cls.comicNames_node)
|
||
if not cls.tags_node == None:
|
||
root.appendChild(cls.tags_node)
|
||
cls.getPathComicInfoXML()
|
||
base_dir = os.path.dirname(cls.pathComicInfo)
|
||
if not os.path.exists(base_dir):
|
||
os.makedirs(base_dir)
|
||
with open(cls.pathComicInfo , "w", encoding="utf-8") as fo:
|
||
newDocument.writexml(fo, indent='', addindent='\t', newl='\n', encoding="utf-8")
|
||
fo.close()
|
||
print("ComicInfo.xml 已生成 pathd=", cls.pathComicInfo)
|
||
|
||
#文件保存
|
||
@classmethod
|
||
def file_save(cls,path,data,mode=None):
|
||
result = {}
|
||
f = {}
|
||
dir_name = os.path.dirname(path)
|
||
if not os.path.exists(dir_name):
|
||
os.makedirs(dir_name)
|
||
save_path = os.path.join(path)
|
||
data = json.dumps(data)
|
||
if mode == None:
|
||
mode = "w+"
|
||
try:
|
||
f = open(save_path, mode, encoding="utf-8")
|
||
f.write(data)
|
||
f.close()
|
||
print("data=",data)
|
||
result = path + "文件写入成功"
|
||
except:
|
||
result = path + "文件写入失败"
|
||
return result
|
||
|
||
@classmethod
|
||
def nextSavePath(cls,next,data=None):
|
||
save_path = cls.getDirConfComic()+"/"+next+cls.str_chapter
|
||
if not data == None:
|
||
cls.file_save(save_path, data)
|
||
return save_path
|
||
|
||
@classmethod
|
||
def nextSaveInfoChapter(cls,chapter,data):
|
||
if not cls.str_chapter == chapter:
|
||
print(f"chapter {cls.str_chapter} 与 {chapter} 不一致,已自动跳过")
|
||
cls.nextSavePath("info_",data)
|
||
|
||
@classmethod
|
||
def nextInfoToImgChapter(cls):
|
||
info = cls.nextSavePath("info_")
|
||
img = cls.nextSavePath("img_")
|
||
shutil.move(info,img)
|
||
|
||
@classmethod
|
||
def nextImgToDownloadChapter(cls):
|
||
img = cls.nextSavePath("img_")
|
||
download = cls.nextSavePath("down_")
|
||
shutil.move(img, download)
|
||
|
||
@classmethod
|
||
def nextDownloadToCBZChapter(cls):
|
||
download = cls.nextSavePath("down_")
|
||
cbz = cls.nextSavePath("cbz_")
|
||
shutil.move(download, cbz)
|
||
|
||
@classmethod
|
||
def nextCBZToDoneChapter(cls):
|
||
cbz = cls.nextSavePath("cbz_")
|
||
done = cls.nextSavePath("done_")
|
||
shutil.move(cbz,done)
|
||
|
||
@classmethod
|
||
def nextExistsGetPath(cls,msg):
|
||
path = cls.nextSavePath(msg)
|
||
return os.path.exists(path)
|
||
|