修复找不到wx文件夹的问题#124 #115

This commit is contained in:
shuaikangzhou 2023-12-13 21:23:43 +08:00
parent e9d7b1b7c9
commit 858fc306b4
4 changed files with 50 additions and 13 deletions

View File

@ -1,4 +1,6 @@
import os.path import os.path
import subprocess
import sys
from os import system from os import system
import sqlite3 import sqlite3
import threading import threading
@ -8,7 +10,14 @@ from pilk import decode
lock = threading.Lock() lock = threading.Lock()
db_path = "./app/Database/Msg/MediaMSG.db" 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): def singleton(cls):
_instance = {} _instance = {}
@ -64,8 +73,18 @@ class MediaMsg:
f.write(buf) f.write(buf)
# open(silk_path, "wb").write() # open(silk_path, "wb").write()
decode(silk_path, pcm_path, 44100) 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}''' try:
system(cmd) # 调用系统上的 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 {silk_path}')
system(f'del {pcm_path}') system(f'del {pcm_path}')
print(mp3_path) print(mp3_path)

View File

@ -247,6 +247,11 @@ class ChildThread(QThread):
doc.write( doc.write(
f'''{{ type:34, text:'{audio_path}',is_send:{is_send},avatar_path:'{avatar}',voice_to_text:'{voice_to_text}'}},''' 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): def emoji(self, doc, message):
@ -314,11 +319,6 @@ class ChildThread(QThread):
elif self.output_type==Output.TXT: elif self.output_type==Output.TXT:
name = '' if is_send else self.contact.remark name = '' if is_send else self.contact.remark
if refer_msg: 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( doc.write(
f'''{str_time} {name}\n{content.get('title')}\n引用:{refer_msg.get('displayname')}:{refer_msg.get('content')}\n\n''' 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) self.text(f, message)
elif type_ == 3 and self.message_types.get(type_): elif type_ == 3 and self.message_types.get(type_):
self.image(f, message) 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_): elif type_ == 43 and self.message_types.get(type_):
self.video(f, message) self.video(f, message)
elif type_ == 47 and self.message_types.get(type_): elif type_ == 47 and self.message_types.get(type_):

View File

@ -107,15 +107,29 @@ def get_info_wxid(h_process):
def get_info_filePath(wxid="all"): def get_info_filePath(wxid="all"):
if not wxid: if not wxid:
return "None" return "None"
w_dir = "MyDocument:"
is_w_dir = False
try: try:
user_profile = os.environ.get("USERPROFILE") key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Tencent\WeChat", 0, winreg.KEY_READ)
path_3ebffe94 = os.path.join(user_profile, "AppData", "Roaming", "Tencent", "WeChat", "All Users", "config", value, _ = winreg.QueryValueEx(key, "FileSavePath")
"3ebffe94.ini") winreg.CloseKey(key)
with open(path_3ebffe94, "r", encoding="utf-8") as f: w_dir = value
w_dir = f.read() is_w_dir = True
except Exception as e: except Exception as e:
w_dir = "MyDocument:" 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:": if w_dir == "MyDocument:":
try: try:
# 打开注册表路径 # 打开注册表路径
@ -154,6 +168,8 @@ def get_key(db_path, addr_len):
return key_bytes return key_bytes
def verify_key(key, wx_db_path): def verify_key(key, wx_db_path):
if not wx_db_path:
return True
KEY_SIZE = 32 KEY_SIZE = 32
DEFAULT_PAGESIZE = 4096 DEFAULT_PAGESIZE = 4096
DEFAULT_ITER = 64000 DEFAULT_ITER = 64000

View File

@ -34,7 +34,7 @@ class ExportDialog(QDialog):
self.export_choices = {"文本": True, "图片": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择 self.export_choices = {"文本": True, "图片": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择
elif file_type == 'txt': elif file_type == 'txt':
self.export_type = Output.TXT self.export_type = Output.TXT
self.export_choices = {"文本": True, "图片": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择 self.export_choices = {"文本": True, "图片": True, "语音": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择
else: else:
self.export_choices = {"文本": True, "图片": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择 self.export_choices = {"文本": True, "图片": True, "视频": True, "表情包": True} # 定义导出的数据类型,默认全部选择
self.setWindowTitle(title) self.setWindowTitle(title)