diff --git a/app/DataBase/media_msg.py b/app/DataBase/media_msg.py index 8e07183..46ba2e7 100644 --- a/app/DataBase/media_msg.py +++ b/app/DataBase/media_msg.py @@ -1,4 +1,6 @@ import os.path +import subprocess +import sys from os import system import sqlite3 import threading @@ -8,7 +10,14 @@ from pilk import decode lock = threading.Lock() db_path = "./app/Database/Msg/MediaMSG.db" +def get_ffmpeg_path(): + # 获取打包后的资源目录 + resource_dir = getattr(sys, '_MEIPASS', os.path.abspath(os.path.dirname(__file__))) + # 构建 FFmpeg 可执行文件的路径 + ffmpeg_path = os.path.join(resource_dir, 'app', 'resources', 'ffmpeg.exe') + + return ffmpeg_path def singleton(cls): _instance = {} @@ -64,8 +73,18 @@ class MediaMsg: f.write(buf) # open(silk_path, "wb").write() decode(silk_path, pcm_path, 44100) - cmd = f'''{os.path.join(os.getcwd(),'app','resources','ffmpeg.exe')} -loglevel quiet -y -f s16le -i {pcm_path} -ar 44100 -ac 1 {mp3_path}''' - system(cmd) + try: + # 调用系统上的 ffmpeg 可执行文件 + # 获取 FFmpeg 可执行文件的路径 + ffmpeg_path = get_ffmpeg_path() + # 调用 FFmpeg + # subprocess.run([ffmpeg_path, f'''-loglevel quiet -y -f s16le -i {pcm_path} -ar 44100 -ac 1 {mp3_path}'''], check=True) + cmd = f'''{get_ffmpeg_path()} -loglevel quiet -y -f s16le -i {pcm_path} -ar 44100 -ac 1 {mp3_path}''' + system(cmd) + except subprocess.CalledProcessError as e: + print(f"Error: {e}") + cmd = f'''{os.path.join(os.getcwd(),'app','resources','ffmpeg.exe')} -loglevel quiet -y -f s16le -i {pcm_path} -ar 44100 -ac 1 {mp3_path}''' + system(cmd) system(f'del {silk_path}') system(f'del {pcm_path}') print(mp3_path) diff --git a/app/DataBase/output_pc.py b/app/DataBase/output_pc.py index 34ddb48..2f06831 100644 --- a/app/DataBase/output_pc.py +++ b/app/DataBase/output_pc.py @@ -247,6 +247,11 @@ class ChildThread(QThread): doc.write( f'''{{ type:34, text:'{audio_path}',is_send:{is_send},avatar_path:'{avatar}',voice_to_text:'{voice_to_text}'}},''' ) + if self.output_type == Output.TXT: + name = '你' if is_send else self.contact.remark + doc.write( + f'''{str_time} {name}\n[语音]\n\n''' + ) def emoji(self, doc, message): @@ -314,11 +319,6 @@ class ChildThread(QThread): elif self.output_type==Output.TXT: name = '你' if is_send else self.contact.remark if refer_msg: - referText = f"{refer_msg.get('displayname')}:{refer_msg.get('content')}" - emojiText = findall(r"(\[.+?\])", referText) - for emoji_text in emojiText: - if emoji_text in emoji: - referText = referText.replace(emoji_text, emoji[emoji_text]) doc.write( f'''{str_time} {name}\n{content.get('title')}\n引用:{refer_msg.get('displayname')}:{refer_msg.get('content')}\n\n''' ) @@ -461,6 +461,8 @@ class ChildThread(QThread): self.text(f, message) elif type_ == 3 and self.message_types.get(type_): self.image(f, message) + elif type_ == 34 and self.message_types.get(type_): + self.audio(f, message) elif type_ == 43 and self.message_types.get(type_): self.video(f, message) elif type_ == 47 and self.message_types.get(type_): diff --git a/app/decrypt/get_wx_info.py b/app/decrypt/get_wx_info.py index 208743f..9b84414 100644 --- a/app/decrypt/get_wx_info.py +++ b/app/decrypt/get_wx_info.py @@ -107,15 +107,29 @@ def get_info_wxid(h_process): def get_info_filePath(wxid="all"): if not wxid: return "None" + w_dir = "MyDocument:" + is_w_dir = False + try: - user_profile = os.environ.get("USERPROFILE") - path_3ebffe94 = os.path.join(user_profile, "AppData", "Roaming", "Tencent", "WeChat", "All Users", "config", - "3ebffe94.ini") - with open(path_3ebffe94, "r", encoding="utf-8") as f: - w_dir = f.read() + key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Tencent\WeChat", 0, winreg.KEY_READ) + value, _ = winreg.QueryValueEx(key, "FileSavePath") + winreg.CloseKey(key) + w_dir = value + is_w_dir = True except Exception as e: w_dir = "MyDocument:" + if not is_w_dir: + try: + user_profile = os.environ.get("USERPROFILE") + path_3ebffe94 = os.path.join(user_profile, "AppData", "Roaming", "Tencent", "WeChat", "All Users", "config", + "3ebffe94.ini") + with open(path_3ebffe94, "r", encoding="utf-8") as f: + w_dir = f.read() + is_w_dir = True + except Exception as e: + w_dir = "MyDocument:" + if w_dir == "MyDocument:": try: # 打开注册表路径 @@ -154,6 +168,8 @@ def get_key(db_path, addr_len): return key_bytes def verify_key(key, wx_db_path): + if not wx_db_path: + return True KEY_SIZE = 32 DEFAULT_PAGESIZE = 4096 DEFAULT_ITER = 64000 diff --git a/app/ui_pc/contact/export_dialog.py b/app/ui_pc/contact/export_dialog.py index cf71ec0..7786fc6 100644 --- a/app/ui_pc/contact/export_dialog.py +++ b/app/ui_pc/contact/export_dialog.py @@ -34,7 +34,7 @@ class ExportDialog(QDialog): self.export_choices = {"文本": True, "图片": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择 elif file_type == 'txt': self.export_type = Output.TXT - self.export_choices = {"文本": True, "图片": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择 + self.export_choices = {"文本": True, "图片": True, "语音": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择 else: self.export_choices = {"文本": True, "图片": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择 self.setWindowTitle(title)