import json,re from opencc import OpenCC from queue import Queue from utils.OldUtils import OldUtils class Comic: # ComicInfo.xml and ComicChapter.json bengin # value origin node dep dict_chapter = [None,None,"Title","章节名"] dict_comic_name = [None,None,"Series","漫画名"] dict_number = [None,None,"Number","编号"] dict_comic_names = [None,None,"SeriesGroup","别名"] dict_dep = [None,None,"Summary","概述"] dict_year = [None,None,"Year","年"] dict_month = [None,None,"Month","月"] dict_day = [None,None,"Day","日"] dict_author = [None,None,"Writer","作者"] dict_cbs = [None,None,"Publisher","出版社"] dict_genre = [None,None,"Genre","流派"] dict_tags = [None,None,"Tags","标签"] dict_homepage = [None,None,"Web","主页"] dict_page_count = [None,None,"PageCount","总页数"] dict_language = [None,None,"LanguageISO","语言"] dict_agerating = [None,None,"AgeRating","年龄分级"] dict_pages = [None,None,"Pages","页码"] CURRENT_DOWN_LINK = None # ComicInfo.xml and ComicChapter.json end dict_icon = [None,None,"Icon","图标"] dict_chapter_imgs = [None,None,"ChapterImgs","图像"] #主页 dict_list_chapter = [None,None,"ListChapter","全部章节名"] (update_at,current_chapter_img,file_chapter_imgs) = [None,None,None] #繁体中文转简体中文 @classmethod def ChineseConvert(cls, text,convert='t2s'): return OpenCC(convert).convert(str(text)) #处理成符合规定的文件名 @classmethod def fixFileName(cls,filename,replace=None): if not isinstance(filename,str): return filename intab = r'[?*/\|.:><]' str_replace = "" if replace != None: str_replace = replace filename = re.sub(intab, str_replace, filename) count = 1 while True: str_file = filename[0-count] if str_file == " ": count += 1 else: filename = filename[0:len(filename)+1-count] break return filename @classmethod def setValue(cls,value): if value != None: value = cls.ChineseConvert(value) return value @classmethod def setField(cls,field,value,origin=True,convert=True): if value != None: if origin: field[1] = value if convert: value = cls.ChineseConvert(value) field[0] = value return field @classmethod def getFieldValue(cls,field): if field == None: return None return field[0] @classmethod def setFieldOrigin(cls,filed,origin): filed[1] = origin return filed @classmethod def getFieldOrigin(cls,filed): return filed[1] @classmethod def getFieldNode(cls,filed): return filed[2] @classmethod def getValue(cls,field,exec=None): if exec != None: return cls.parseExec(field,exec=exec) return field #章节名 @classmethod def setChapterName(cls,value,exec=None): value = cls.fixFileName(cls.parseExec(value,exec=exec)) OldUtils.setOldChapter(value) cls.dict_chapter = cls.setField(cls.dict_chapter,value) @classmethod def getChapterName(cls): return cls.getFieldValue(cls.dict_chapter) @classmethod def getOriginChapterName(cls): return cls.getFieldOrigin(cls.dict_chapter) #漫画名 @classmethod def setComicName(cls,value,exec=None): value = cls.fixFileName(cls.parseExec(value,exec=exec)) OldUtils.setOldComicName(value) cls.dict_comic_name = cls.setField(cls.dict_comic_name,value) @classmethod def getComicName(cls): return cls.getFieldValue(cls.dict_comic_name) @classmethod def getOriginComicName(cls): return cls.getFieldOrigin(cls.dict_comic_name) #编号 @classmethod def setNumber(cls,value): cls.dict_number = cls.setField(cls.dict_number,value) @classmethod def getNumber(cls): return cls.getFieldValue(cls.dict_number) #概述 @classmethod def setDep(cls,value,exec=None): cls.dict_dep = cls.setField(cls.dict_dep,cls.parseExec(value,exec=exec)) @classmethod def getDep(cls): return cls.getFieldValue(cls.dict_dep) #作者 @classmethod def setAuthor(cls,value): cls.dict_author = cls.setField(cls.dict_author,value) @classmethod def getAuthor(cls): return cls.getFieldValue(cls.dict_author) #流派 @classmethod def setGenre(cls,value): cls.dict_genre = cls.setField(cls.dict_genre,value) @classmethod def getGenre(cls): return cls.getFieldValue(cls.dict_genre) #语言 @classmethod def setLanguage(cls,value): cls.dict_language = cls.setField(cls.dict_language,value) @classmethod def getLanguage(cls): return cls.getFieldValue(cls.dict_language) #年龄分级 @classmethod def setAgeRating(cls,value): cls.dict_agerating = cls.setField(cls.dict_agerating,value) @classmethod def getAgeRating(cls): return cls.getFieldValue(cls.dict_agerating) #标签 @classmethod def setTags(cls,value): cls.dict_tags = cls.setField(cls.dict_tags,value) @classmethod def getTags(cls): return cls.getFieldValue(cls.dict_tags) #总页数 @classmethod def setPageCount(cls,value): cls.dict_page_count = cls.setField(cls.dict_page_count,value) @classmethod def getPageCount(cls): return cls.getFieldValue(cls.dict_page_count) #------------------------------------------------------------------------ @classmethod def parseExec(cls,data,exec,item=True): if data !=None and exec != None: dots = str(exec).split(".") if not isinstance(data,dict): data = json.loads(data) for dot in dots: data = data.get(dot) return data @classmethod def setHomePage(cls,value): cls.dict_homepage = cls.setField(cls.dict_homepage,value) @classmethod def getHomePage(cls): return cls.getFieldValue(cls.dict_homepage) @classmethod def setIcon(cls,value): cls.dict_icon = cls.setField(cls.dict_icon,value,convert=False) @classmethod def getIcon(cls): return cls.getFieldValue(cls.dict_icon) @classmethod def setListChapter(cls,value): cls.dict_list_chapter = cls.setField(cls.dict_list_chapter,value,convert=False) @classmethod def getListChapter(cls): return cls.getFieldValue(cls.dict_list_chapter) @classmethod def getLenChapters(cls): return len(cls.getListChapter()) @classmethod def setChapterImgs(cls,value,exec=None,item=None): cls.dict_chapter_imgs = cls.setField(cls.dict_chapter_imgs,cls.parseExec(value,exec=exec,item=item),convert=False) @classmethod def getChapterImgs(cls): return cls.getFieldValue(cls.dict_chapter_imgs) @classmethod def setUpdateAt(cls,value): cls.update_at = value @classmethod def getUpdateAt(cls): return cls.update_at @classmethod def setCurrentChapterImg(cls,value): cls.current_chapter_img = value @classmethod def getCurrentChapterImg(cls): return cls.current_chapter_img @classmethod def setChapterFilesName(cls,value): cls.file_chapter_imgs= value @classmethod def getChapterFilesName(cls): return cls.file_chapter_imgs @classmethod def setCurrentDownLink(cls,value): cls.CURRENT_DOWN_LINK = value @classmethod def getCurrentDownLink(cls): return cls.CURRENT_DOWN_LINK class ListComic: LIST_COMIC_QUEUE = Queue() (LIST_COMIC_NAME,LIST_COMIC_LINK,LIST_COMIC_UPDATEAT) = [None,None,None] @classmethod def setListComicsLinksUpdateAt(cls,names,links,update_at): if isinstance(names,list) and isinstance(links,list) and isinstance(update_at,list): for x in range(0,len(names)): cls.LIST_COMIC_QUEUE.put([names[x],links[x],update_at[x]]) @classmethod def getListComicsLinksUpdateAt(cls): result = None if cls.LIST_COMIC_NAME != None and cls.LIST_COMIC_LINK != None: cls.setListComicsLinksUpdateAt(cls.LIST_COMIC_NAME,cls.LIST_COMIC_LINK,cls.LIST_COMIC_UPDATEAT) (cls.LIST_COMIC_NAME,cls.LIST_COMIC_LINK,cls.LIST_COMIC_UPDATEAT) = [None,None,None] if not cls.LIST_COMIC_QUEUE.empty(): result = cls.LIST_COMIC_QUEUE.get(False) return result @classmethod def addListComicChapterLink(cls,name,link,update_at): if name != None and link != None: cls.LIST_COMIC_QUEUE.put(name,link,update_at) @classmethod def getListValue(cls,result,type,start_add=None,result_type="list"): if result == None: return None if type == None: return result if result_type == "list" and type != None: data = [] for x in range(0, len(result)): if start_add != None: data.append(start_add+result[x].get(type)) else: data.append(result[x].get(type)) return data return result @classmethod def setListComicName(cls,value,type=None): cls.LIST_COMIC_NAME = cls.getListValue(value,type) @classmethod def getListComicName(cls): return cls.LIST_COMIC_NAME @classmethod def setListComicChapterLink(cls,value,type=None,start_add=None): cls.LIST_COMIC_LINK = cls.getListValue(value,type,start_add) @classmethod def getListComicChapterLink(cls): return cls.LIST_COMIC_LINK @classmethod def setListComicUpdateAt(cls,value,type=None): cls.LIST_COMIC_UPDATEAT = cls.getListValue(value,type) @classmethod def getListComicUpdateAt(cls): return cls.LIST_COMIC_UPDATEAT @classmethod def getListComicChapterLink(cls): return cls.LIST_COMIC_QUEUE.get(False) #domain end....