diff --git a/app/DataBase/output_pc.py b/app/DataBase/output_pc.py index 11600f7..492c5fb 100644 --- a/app/DataBase/output_pc.py +++ b/app/DataBase/output_pc.py @@ -284,11 +284,7 @@ class ChildThread(QThread): timestamp = message[5] if self.output_type == Output.HTML: emoji_path = get_emoji(str_content, thumb=True, output_path=origin_docx_path + '/emoji') - if emoji_path == "": - shutil.copy(f"{os.path.abspath('.')}/app/resources/icons/404.png", origin_docx_path + '/emoji/404.png') - emoji_path = "./emoji/404.png" - else: - emoji_path = './emoji/' + os.path.basename(emoji_path) + emoji_path = './emoji/' + os.path.basename(emoji_path) if self.is_5_min(timestamp): doc.write( f'''{{ type:0, text: '{str_time}',is_send:0,avatar_path:''}},''' @@ -473,7 +469,7 @@ class ChildThread(QThread): self.emoji(f, message) elif type_ == 10000 and self.message_types.get(type_): self.system_msg(f, message) - elif type_ == 49 and sub_type == 57 and self.message_types.get(1): + elif type_ == 49 and sub_type == 57: self.refermsg(f,message) f.write(html_end) f.close() diff --git a/app/util/emoji.py b/app/util/emoji.py index f6b707a..d2a4d7f 100644 --- a/app/util/emoji.py +++ b/app/util/emoji.py @@ -11,8 +11,7 @@ emoji.py import os import traceback import xml.etree.ElementTree as ET -import sqlite3 -import threading + import requests from app.log import log, logger @@ -44,10 +43,7 @@ def get_image_format(header): def parser_xml(xml_string): assert type(xml_string) == str # Parse the XML string - try: - root = ET.fromstring(xml_string) - except: - root = ET.fromstring(xml_string.replace("&", "&")) + root = ET.fromstring(xml_string) emoji = root.find('./emoji') # Accessing attributes of the 'emoji' element fromusername = emoji.get('fromusername') @@ -65,67 +61,10 @@ def parser_xml(xml_string): 'height': height, 'cdnurl': cdnurl, 'thumburl': thumburl if thumburl else cdnurl, - 'md5': (md5 if md5 else androidmd5).lower(), + 'md5': md5 if md5 else androidmd5, } -def singleton(cls): - _instance = {} - - def inner(): - if cls not in _instance: - _instance[cls] = cls() - return _instance[cls] - - return inner - -lock = threading.Lock() -db_path = "./app/Database/Msg/Emotion.db" - -@singleton -class Emotion: - def __init__(self): - self.DB = None - self.cursor: sqlite3.Cursor = None - self.open_flag = False - self.init_database() - - def init_database(self): - if not self.open_flag: - if os.path.exists(db_path): - self.DB = sqlite3.connect(db_path, check_same_thread=False) - # '''创建游标''' - self.cursor = self.DB.cursor() - self.open_flag = True - if lock.locked(): - lock.release() - - def get_emoji_url(self, md5: str): - sql = ''' - select CDNUrl - from CustomEmotion - where md5 = ? - ''' - try: - lock.acquire(True) - self.cursor.execute(sql, [md5]) - return self.cursor.fetchone()[0] - except: - md5 = md5.upper() - sql = """ - select Data - from EmotionItem - where md5 = ? - """ - self.cursor.execute(sql, [md5]) - try: - return self.cursor.fetchone()[0] - except: - return "" - finally: - lock.release() - -emoji_db = Emotion() - +@log def download(url, output_dir, name, thumb=False): if not url: return ':/icons/icons/404.png' @@ -153,44 +92,23 @@ def get_emoji(xml_string, thumb=True, output_path=root_path) -> str: prefix = 'th_' if thumb else '' file_path = os.path.join(output_path, prefix + md5 + f) if os.path.exists(file_path): - # print('表情包已存在', file_path) + print('表情包已存在') return file_path url = emoji_info['thumburl'] if thumb else emoji_info['cdnurl'] - if not url or url == "": - url = emoji_db.get_emoji_url(md5) - if type(url) == str and url != "": - print("下载表情包ing:", url) - emoji_path = download(url, output_path, md5, thumb) - return emoji_path - elif type(url) == bytes: - image_format = get_image_format(url[:8]) - if image_format: - if thumb: - output_path = os.path.join(output_path, 'th_' + md5 + '.' + image_format) - else: - output_path = os.path.join(output_path, md5 + '.' + image_format) - else: - output_path = os.path.join(output_path, md5) - with open(output_path, 'wb') as f: - f.write(url) - print("表情包数据库加载", output_path) - return output_path - else: - print("!!!未知表情包数据,信息:", xml_string, emoji_info, url) - return "" + print("下载表情包ing:", url) + emoji_path = download(url, output_path, md5, thumb) + return emoji_path except: logger.error(traceback.format_exc()) return "" if __name__ == '__main__': - db_path = r"..\DataBase\Msg\Emotion.db" - xml_string = '' - print(get_emoji(xml_string, thumb=False, output_path=".")) - # ET.fromstring() - # print(res1, res1['md5']) + xml_string = ' ' + res1 = parser_xml(xml_string) + print(res1, res1['md5']) # download(res1['cdnurl'], "./data/emoji/", res1['md5']) # download(res1['thumburl'], "./data/emoji/", res1['md5'], True) - # print(get_emoji(xml_string, True)) - # print(get_emoji(xml_string, False)) + print(get_emoji(xml_string, True)) + print(get_emoji(xml_string, False)) # http://vweixinf.tc.qq.com/110/20403/stodownload?m=3a4d439aba02dce4834b2c54e9f15597&filekey=3043020101042f302d02016e0402534804203361346434333961626130326463653438333462326335346539663135353937020213f0040d00000004627466730000000131&hy=SH&storeid=323032313037323030373236313130303039653236646365316535316534383236386234306230303030303036653033303034666233&ef=3&bizid=1022