From 6c518d3eb864ad11bd09d7b4e0428215846de376 Mon Sep 17 00:00:00 2001 From: shuaikangzhou <863909694@qq.com> Date: Wed, 29 Nov 2023 23:41:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=86=8D=E6=AC=A1=E8=A7=A3?= =?UTF-8?q?=E5=AF=86=E6=95=B0=E6=8D=AE=E5=BA=93=E6=97=B6=E6=98=BE=E7=A4=BA?= =?UTF-8?q?msg.db=E5=8D=A0=E7=94=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/DataBase/hard_link.py | 5 +++++ app/DataBase/misc.py | 10 +++++++++- app/DataBase/msg.py | 10 +++------- app/ui_pc/mainview.py | 5 ++++- app/ui_pc/tool/pc_decrypt/pc_decrypt.py | 19 +++++++++++++++++-- app/util/path.py | 22 ++++++++++++++++++++++ 6 files changed, 60 insertions(+), 11 deletions(-) diff --git a/app/DataBase/hard_link.py b/app/DataBase/hard_link.py index f93fc50..4927396 100644 --- a/app/DataBase/hard_link.py +++ b/app/DataBase/hard_link.py @@ -72,6 +72,11 @@ def get_image(content, thumb=False): return dat_image +def close(): + if DB: + DB.close() + + # 6b02292eecea118f06be3a5b20075afc_t if __name__ == '__main__': diff --git a/app/DataBase/misc.py b/app/DataBase/misc.py index 20e6e0e..29a5221 100644 --- a/app/DataBase/misc.py +++ b/app/DataBase/misc.py @@ -1,6 +1,7 @@ import os.path import sqlite3 import threading +import time lock = threading.Lock() DB = None @@ -33,7 +34,8 @@ def get_avatar_buffer(userName): lock.acquire(True) try: cursor.execute(sql, [userName]) - except AttributeError: + except: + time.sleep(0.5) init_database() finally: cursor.execute(sql, [userName]) @@ -46,5 +48,11 @@ def get_avatar_buffer(userName): return None +def close(): + global DB + if DB: + DB.close() + + if __name__ == '__main__': get_avatar_buffer('wxid_al2oan01b6fn11') diff --git a/app/DataBase/msg.py b/app/DataBase/msg.py index 62ef993..ce6ca18 100644 --- a/app/DataBase/msg.py +++ b/app/DataBase/msg.py @@ -81,18 +81,14 @@ def get_message_by_num(username_, local_id): def close(): - for db in DB: - db.close() + global DB + if DB: + DB.close() if __name__ == '__main__': msg_root_path = './Msg/' init_database() - - # username = 'wxid_0o18ef858vnu22' - # result = get_messages(username) - # pprint(result) - # pprint(len(result)) result = get_message_by_num('wxid_0o18ef858vnu22', 9999999) print(result) print(result[-1][0]) diff --git a/app/ui_pc/mainview.py b/app/ui_pc/mainview.py index 0b53c97..e4e8b3d 100644 --- a/app/ui_pc/mainview.py +++ b/app/ui_pc/mainview.py @@ -15,7 +15,7 @@ from PyQt5.QtGui import QPixmap, QFont, QDesktopServices from PyQt5.QtWidgets import * from app import config -from app.DataBase import msg, misc +from app.DataBase import msg, misc, micro_msg, hard_link from app.ui_pc.Icon import Icon from . import mainwindow from .chat import ChatWindow @@ -216,7 +216,10 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow): def close(self) -> bool: del self.listWidget del self.stackedWidget + misc.close() msg.close() + micro_msg.close() + hard_link.close() self.contact_window.close() diff --git a/app/ui_pc/tool/pc_decrypt/pc_decrypt.py b/app/ui_pc/tool/pc_decrypt/pc_decrypt.py index 19ca92e..b7c4eb3 100644 --- a/app/ui_pc/tool/pc_decrypt/pc_decrypt.py +++ b/app/ui_pc/tool/pc_decrypt/pc_decrypt.py @@ -7,9 +7,11 @@ from PyQt5.QtCore import pyqtSignal, QThread, QUrl, QFile, QIODevice, QTextStrea from PyQt5.QtGui import QDesktopServices from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog +from app.DataBase import msg, micro_msg, misc, hard_link from app.DataBase.merge import merge_databases from app.decrypt import get_wx_info, decrypt from app.log import logger +from app.util import path from . import decryptUi @@ -69,6 +71,14 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog): self.lineEdit.setFocus() self.checkBox.setChecked(True) self.get_wxidSignal.emit(self.info['wxid']) + directory = os.path.join(path.wx_path(), self.info['wxid']) + if os.path.exists(directory): + self.label_db_dir.setText(directory) + self.wx_dir = directory + self.checkBox_2.setChecked(True) + self.ready = True + if self.ready: + self.label_ready.setText('已就绪') if self.wx_dir and os.path.exists(os.path.join(self.wx_dir)): self.label_ready.setText('已就绪') except Exception as e: @@ -87,7 +97,7 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog): def select_db_dir(self): directory = QFileDialog.getExistingDirectory( self, "选取微信文件保存目录——能看到Msg文件夹", - os.path.expanduser('~\Documents') + path.wx_path() ) # 起始路径 db_dir = os.path.join(directory, 'Msg') if not os.path.exists(db_dir): @@ -186,6 +196,11 @@ class DecryptThread(QThread): pass def run(self): + misc.close() + msg.close() + micro_msg.close() + hard_link.close() + QThread.sleep(1) # data.decrypt(self.db_path, self.key) output_dir = 'app/DataBase/Msg' try: @@ -207,7 +222,7 @@ class DecryptThread(QThread): self.maxNumSignal.emit(len(tasks)) for i, task in enumerate(tasks): decrypt.decrypt(*task) - self.signal.emit(str(i + 1)) + self.signal.emit(str(i)) # print(self.db_path) self.okSignal.emit('ok') # self.signal.emit('100') diff --git a/app/util/path.py b/app/util/path.py index a9819f0..13129b4 100644 --- a/app/util/path.py +++ b/app/util/path.py @@ -1,4 +1,5 @@ import os +import winreg from app.person_pc import MePC from app.util import dat2pic @@ -17,3 +18,24 @@ def get_abs_path(path): return output_path if output_path else ':/icons/icons/404.png' else: return ':/icons/icons/404.png' + + +def wx_path(): + ## 获取当前用户名 + users = os.path.expandvars('$HOMEPATH') + ## 找到3ebffe94.ini配置文件 + f = open(r'C:' + users + '\\AppData\\Roaming\\Tencent\\WeChat\\All Users\\config\\3ebffe94.ini') + txt = f.read() + f.close() + # 打开Windows注册表 + reg_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, + "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders") + # 获取“我的文档”路径的注册表键值 + documents_path_value = winreg.QueryValueEx(reg_key, "Personal") + # 输出路径 + ##读取文件将路径放到wx_location变量里 + if txt == 'MyDocument:': + wx_location = documents_path_value[0] + '\WeChat Files' + else: + wx_location = txt + "\WeChat Files" + return wx_location