From 117f811d13a4026c4a68a9b2db55985ab1f26ee6 Mon Sep 17 00:00:00 2001 From: shuaikangzhou <863909694@qq.com> Date: Mon, 15 Jan 2024 19:51:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=89=B9=E9=87=8F=E5=AF=BC?= =?UTF-8?q?=E5=87=BAdocx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/DataBase/exporter_csv.py | 2 +- app/DataBase/hard_link.py | 71 ++++++++++++++++++----------- app/ui/mainview.py | 3 +- app/ui/menu/export.py | 4 +- app/ui/menu/exportUi.py | 4 +- app/ui/tool/pc_decrypt/decryptUi.py | 2 +- 6 files changed, 53 insertions(+), 33 deletions(-) diff --git a/app/DataBase/exporter_csv.py b/app/DataBase/exporter_csv.py index 87a2933..5536110 100644 --- a/app/DataBase/exporter_csv.py +++ b/app/DataBase/exporter_csv.py @@ -7,7 +7,7 @@ from app.DataBase.output import ExporterBase class CSVExporter(ExporterBase): def to_csv(self): - print("【开始导出 CSV {self.contact.remark}】") + print(f"【开始导出 CSV {self.contact.remark}】") origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" os.makedirs(origin_docx_path, exist_ok=True) filename = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}/{self.contact.remark}_utf8.csv" diff --git a/app/DataBase/hard_link.py b/app/DataBase/hard_link.py index cc6ab0d..881f636 100644 --- a/app/DataBase/hard_link.py +++ b/app/DataBase/hard_link.py @@ -2,9 +2,10 @@ import binascii import os.path import sqlite3 import threading +import traceback import xml.etree.ElementTree as ET -from app.log import log +from app.log import log, logger from app.util.protocbuf.msg_pb2 import MessageBytesExtra image_db_lock = threading.Lock() @@ -32,6 +33,13 @@ def get_md5_from_xml(content, type_="img"): def decodeExtraBuf(extra_buf_content: bytes): + if not extra_buf_content: + return { + "region": ('', '', ''), + "signature": '', + "telephone": '', + "gender": 0, + } trunkName = { b"\x46\xCF\x10\xC4": "个性签名", b"\xA4\xD9\x02\x4A": "国家", @@ -46,33 +54,42 @@ def decodeExtraBuf(extra_buf_content: bytes): } res = {"手机号": ""} off = 0 - for key in trunkName: - trunk_head = trunkName[key] - try: - off = extra_buf_content.index(key) + 4 - except: - pass - char = extra_buf_content[off : off + 1] - off += 1 - if char == b"\x04": # 四个字节的int,小端序 - intContent = extra_buf_content[off : off + 4] - off += 4 - intContent = int.from_bytes(intContent, "little") - res[trunk_head] = intContent - elif char == b"\x18": # utf-16字符串 - lengthContent = extra_buf_content[off : off + 4] - off += 4 - lengthContent = int.from_bytes(lengthContent, "little") - strContent = extra_buf_content[off : off + lengthContent] - off += lengthContent - res[trunk_head] = strContent.decode("utf-16").rstrip("\x00") + try: + for key in trunkName: + trunk_head = trunkName[key] + try: + off = extra_buf_content.index(key) + 4 + except: + pass + char = extra_buf_content[off : off + 1] + off += 1 + if char == b"\x04": # 四个字节的int,小端序 + intContent = extra_buf_content[off : off + 4] + off += 4 + intContent = int.from_bytes(intContent, "little") + res[trunk_head] = intContent + elif char == b"\x18": # utf-16字符串 + lengthContent = extra_buf_content[off : off + 4] + off += 4 + lengthContent = int.from_bytes(lengthContent, "little") + strContent = extra_buf_content[off : off + lengthContent] + off += lengthContent + res[trunk_head] = strContent.decode("utf-16").rstrip("\x00") + return { + "region": (res["国家"], res["省份"], res["市"]), + "signature": res["个性签名"], + "telephone": res["手机号"], + "gender": res["性别"], + } + except: + logger.error(f'联系人解析错误:\n{traceback.format_exc()}') + return { + "region": ('', '', ''), + "signature": '', + "telephone": '', + "gender": 0, + } - return { - "region": (res["国家"], res["省份"], res["市"]), - "signature": res["个性签名"], - "telephone": res["手机号"], - "gender": res["性别"], - } def singleton(cls): diff --git a/app/ui/mainview.py b/app/ui/mainview.py index daea9e0..bb7a96d 100644 --- a/app/ui/mainview.py +++ b/app/ui/mainview.py @@ -290,8 +290,9 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow, QCursorGif): def close(self) -> bool: close_db() - super().close() self.contact_window.close() + + super().close() self.exitSignal.emit(True) diff --git a/app/ui/menu/export.py b/app/ui/menu/export.py index e5d6cd1..b168de0 100644 --- a/app/ui/menu/export.py +++ b/app/ui/menu/export.py @@ -64,13 +64,15 @@ class ExportDialog(QDialog, Ui_Dialog): self.comboBox_time.activated.connect(self.set_export_date) # 下面将输出重定向到textBrowser中 sys.stdout = EmittingStr(textWritten=self.outputWritten) - sys.stderr = EmittingStr(textWritten=self.outputWritten) + # sys.stderr = EmittingStr(textWritten=self.outputWritten) scroll_bar = ScrollBar() self.textBrowser.setVerticalScrollBar(scroll_bar) self.export_choices = {"文本": True, "图片": True, "语音": False, "视频": False, "表情包": False, '音乐与音频': False, '分享卡片': False, '文件': False, '拍一拍等系统消息': True} # 定义导出的数据类型,默认全部选择 self.setWindowTitle(title) + self.checkBox_word.setEnabled(False) + self.checkBox_word.setText('Docx(暂时不可用)') self.resize(800, 600) self.worker = None # 导出线程 for export_type, default_state in self.export_choices.items(): diff --git a/app/ui/menu/exportUi.py b/app/ui/menu/exportUi.py index 0c25746..d07be43 100644 --- a/app/ui/menu/exportUi.py +++ b/app/ui/menu/exportUi.py @@ -95,7 +95,7 @@ class Ui_Dialog(object): self.textBrowser.setObjectName("textBrowser") self.verticalLayout_3.addWidget(self.textBrowser) self.progressBar = QtWidgets.QProgressBar(Dialog) - self.progressBar.setProperty("value", 24) + self.progressBar.setProperty("value", 0) self.progressBar.setObjectName("progressBar") self.verticalLayout_3.addWidget(self.progressBar) self.horizontalLayout_4 = QtWidgets.QHBoxLayout() @@ -127,7 +127,7 @@ class Ui_Dialog(object): def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) - self.label_3.setText(_translate("Dialog", "导出过程中请不要退出")) + self.label_3.setText(_translate("Dialog", "导出过程中请不要退出,为减少卡顿请尽量不要超过十个")) self.btn_select_all.setText(_translate("Dialog", "全选")) self.comboBox_time.setItemText(0, _translate("Dialog", "全部时间")) self.comboBox_time.setItemText(1, _translate("Dialog", "最近三个月")) diff --git a/app/ui/tool/pc_decrypt/decryptUi.py b/app/ui/tool/pc_decrypt/decryptUi.py index f1a828f..5191984 100644 --- a/app/ui/tool/pc_decrypt/decryptUi.py +++ b/app/ui/tool/pc_decrypt/decryptUi.py @@ -170,7 +170,7 @@ class Ui_Dialog(object): self.label_ready.setObjectName("label_ready") self.horizontalLayout.addWidget(self.label_ready) self.progressBar = QtWidgets.QProgressBar(Dialog) - self.progressBar.setProperty("value", 50) + self.progressBar.setProperty("value", 0) self.progressBar.setObjectName("progressBar") self.horizontalLayout.addWidget(self.progressBar) self.verticalLayout.addLayout(self.horizontalLayout)