mirror of
https://github.com/LC044/WeChatMsg
synced 2025-02-21 01:52:35 +08:00
词云新增自定义词
This commit is contained in:
parent
3d77a01748
commit
6feb0fc490
@ -72,6 +72,7 @@ def wordcloud_(wxid, time_range=None):
|
|||||||
|
|
||||||
def get_wordcloud(text):
|
def get_wordcloud(text):
|
||||||
total_msg_len = len(text)
|
total_msg_len = len(text)
|
||||||
|
jieba.load_userdict('./app/data/new_words.txt')
|
||||||
# 使用jieba进行分词,并加入停用词
|
# 使用jieba进行分词,并加入停用词
|
||||||
words = jieba.cut(text)
|
words = jieba.cut(text)
|
||||||
# 统计词频
|
# 统计词频
|
||||||
|
@ -23,6 +23,10 @@ about = f'''
|
|||||||
|
|
||||||
# 数据存放文件路径
|
# 数据存放文件路径
|
||||||
|
|
||||||
info_file_path = './app/data/info.json' # 个人信息文件
|
INFO_FILE_PATH = './app/data/info.json' # 个人信息文件
|
||||||
db_dir = './app/Database/Msg'
|
DB_DIR = './app/Database/Msg'
|
||||||
output_dir = './data/' # 输出文件夹
|
OUTPUT_DIR = './data/' # 输出文件夹
|
||||||
|
|
||||||
|
# 全局参数
|
||||||
|
|
||||||
|
SEND_LOG_FLAG = True # 是否发送错误日志
|
||||||
|
@ -8,7 +8,7 @@ from PyQt5.QtWidgets import QApplication, QDialog, QCheckBox, QMessageBox
|
|||||||
|
|
||||||
from app.DataBase import msg_db
|
from app.DataBase import msg_db
|
||||||
from app.components import ScrollBar
|
from app.components import ScrollBar
|
||||||
from app.config import output_dir
|
from app.config import OUTPUT_DIR
|
||||||
from app.ui.menu.export_time_range import TimeRangeDialog
|
from app.ui.menu.export_time_range import TimeRangeDialog
|
||||||
from .exportUi import Ui_Dialog
|
from .exportUi import Ui_Dialog
|
||||||
from app.util.exporter.output import Output
|
from app.util.exporter.output import Output
|
||||||
@ -174,7 +174,7 @@ class ExportDialog(QDialog, Ui_Dialog):
|
|||||||
reply.setIcon(QMessageBox.Information)
|
reply.setIcon(QMessageBox.Information)
|
||||||
reply.setWindowTitle('OK')
|
reply.setWindowTitle('OK')
|
||||||
reply.setText(
|
reply.setText(
|
||||||
f"导出聊天记录成功\n在{output_dir}目录下(跟exe文件在一起)\n{os.path.normpath(os.path.join(os.getcwd(), output_dir))}")
|
f"导出聊天记录成功\n在{OUTPUT_DIR}目录下(跟exe文件在一起)\n{os.path.normpath(os.path.join(os.getcwd(), OUTPUT_DIR))}")
|
||||||
reply.addButton("确认", QMessageBox.AcceptRole)
|
reply.addButton("确认", QMessageBox.AcceptRole)
|
||||||
reply.addButton("取消", QMessageBox.RejectRole)
|
reply.addButton("取消", QMessageBox.RejectRole)
|
||||||
api = reply.exec_()
|
api = reply.exec_()
|
||||||
|
@ -26,7 +26,7 @@ from app.ui.home.home_window import HomeWindow
|
|||||||
from .menu.export import ExportDialog
|
from .menu.export import ExportDialog
|
||||||
from app.util.exporter.output import Output
|
from app.util.exporter.output import Output
|
||||||
from ..components.QCursorGif import QCursorGif
|
from ..components.QCursorGif import QCursorGif
|
||||||
from ..config import info_file_path, db_dir
|
from ..config import INFO_FILE_PATH, DB_DIR
|
||||||
from ..log import logger
|
from ..log import logger
|
||||||
from ..person import Me
|
from ..person import Me
|
||||||
|
|
||||||
@ -304,8 +304,8 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow, QCursorGif):
|
|||||||
self.action_update.setIcon(Icon.Update_Icon)
|
self.action_update.setIcon(Icon.Update_Icon)
|
||||||
|
|
||||||
def load_data(self, flag=True):
|
def load_data(self, flag=True):
|
||||||
if os.path.exists(info_file_path):
|
if os.path.exists(INFO_FILE_PATH):
|
||||||
with open(info_file_path, 'r', encoding='utf-8') as f:
|
with open(INFO_FILE_PATH, 'r', encoding='utf-8') as f:
|
||||||
dic = json.loads(f.read())
|
dic = json.loads(f.read())
|
||||||
wxid = dic.get('wxid')
|
wxid = dic.get('wxid')
|
||||||
if wxid:
|
if wxid:
|
||||||
@ -355,7 +355,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow, QCursorGif):
|
|||||||
close_db()
|
close_db()
|
||||||
import shutil
|
import shutil
|
||||||
try:
|
try:
|
||||||
shutil.rmtree(db_dir)
|
shutil.rmtree(DB_DIR)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
return
|
return
|
||||||
@ -371,7 +371,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow, QCursorGif):
|
|||||||
close_db()
|
close_db()
|
||||||
import shutil
|
import shutil
|
||||||
try:
|
try:
|
||||||
shutil.rmtree(db_dir)
|
shutil.rmtree(DB_DIR)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
QMessageBox.critical(self, "数据库错误", "请重启电脑后重试")
|
QMessageBox.critical(self, "数据库错误", "请重启电脑后重试")
|
||||||
|
@ -11,7 +11,7 @@ from app.DataBase import micro_msg_db, misc_db
|
|||||||
from app.util.exporter.output import Output
|
from app.util.exporter.output import Output
|
||||||
from app.components import ScrollBar
|
from app.components import ScrollBar
|
||||||
from app.components.export_contact_item import ContactQListWidgetItem
|
from app.components.export_contact_item import ContactQListWidgetItem
|
||||||
from app.config import output_dir
|
from app.config import OUTPUT_DIR
|
||||||
from app.person import Contact
|
from app.person import Contact
|
||||||
from app.ui.menu.exportUi import Ui_Dialog
|
from app.ui.menu.exportUi import Ui_Dialog
|
||||||
from app.ui.menu.export_time_range import TimeRangeDialog
|
from app.ui.menu.export_time_range import TimeRangeDialog
|
||||||
@ -213,7 +213,7 @@ class ExportDialog(QDialog, Ui_Dialog):
|
|||||||
reply = QMessageBox(self)
|
reply = QMessageBox(self)
|
||||||
reply.setIcon(QMessageBox.Information)
|
reply.setIcon(QMessageBox.Information)
|
||||||
reply.setWindowTitle('OK')
|
reply.setWindowTitle('OK')
|
||||||
reply.setText(f"导出聊天记录成功\n在{output_dir}目录下(跟exe文件在一起)\n{os.path.normpath(os.path.join(os.getcwd(),output_dir))}")
|
reply.setText(f"导出聊天记录成功\n在{OUTPUT_DIR}目录下(跟exe文件在一起)\n{os.path.normpath(os.path.join(os.getcwd(), OUTPUT_DIR))}")
|
||||||
reply.addButton("确认", QMessageBox.AcceptRole)
|
reply.addButton("确认", QMessageBox.AcceptRole)
|
||||||
reply.addButton("取消", QMessageBox.RejectRole)
|
reply.addButton("取消", QMessageBox.RejectRole)
|
||||||
api = reply.exec_()
|
api = reply.exec_()
|
||||||
|
@ -11,7 +11,7 @@ from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog
|
|||||||
from app.DataBase import msg_db, misc_db, close_db
|
from app.DataBase import msg_db, misc_db, close_db
|
||||||
from app.DataBase.merge import merge_databases, merge_MediaMSG_databases
|
from app.DataBase.merge import merge_databases, merge_MediaMSG_databases
|
||||||
from app.components.QCursorGif import QCursorGif
|
from app.components.QCursorGif import QCursorGif
|
||||||
from app.config import info_file_path, db_dir
|
from app.config import INFO_FILE_PATH, DB_DIR
|
||||||
from app.decrypt import get_wx_info, decrypt
|
from app.decrypt import get_wx_info, decrypt
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.util import path
|
from app.util import path
|
||||||
@ -186,7 +186,7 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog, QCursorGif):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
os.makedirs('./app/data', exist_ok=True)
|
os.makedirs('./app/data', exist_ok=True)
|
||||||
with open(info_file_path, "w", encoding="utf-8") as f:
|
with open(INFO_FILE_PATH, "w", encoding="utf-8") as f:
|
||||||
json.dump(dic, f, ensure_ascii=False, indent=4)
|
json.dump(dic, f, ensure_ascii=False, indent=4)
|
||||||
except:
|
except:
|
||||||
with open('./info.json', 'w', encoding='utf-8') as f:
|
with open('./info.json', 'w', encoding='utf-8') as f:
|
||||||
@ -216,7 +216,7 @@ class DecryptThread(QThread):
|
|||||||
msg_db.close()
|
msg_db.close()
|
||||||
# micro_msg_db.close()
|
# micro_msg_db.close()
|
||||||
# hard_link_db.close()
|
# hard_link_db.close()
|
||||||
output_dir = db_dir
|
output_dir = DB_DIR
|
||||||
os.makedirs(output_dir, exist_ok=True)
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
tasks = []
|
tasks = []
|
||||||
if os.path.exists(self.db_path):
|
if os.path.exists(self.db_path):
|
||||||
@ -246,14 +246,14 @@ class DecryptThread(QThread):
|
|||||||
self.signal.emit(str(i))
|
self.signal.emit(str(i))
|
||||||
# print(self.db_path)
|
# print(self.db_path)
|
||||||
# 目标数据库文件
|
# 目标数据库文件
|
||||||
target_database = os.path.join(db_dir, 'MSG.db')
|
target_database = os.path.join(DB_DIR, 'MSG.db')
|
||||||
# 源数据库文件列表
|
# 源数据库文件列表
|
||||||
source_databases = [os.path.join(db_dir, f"MSG{i}.db") for i in range(1, 50)]
|
source_databases = [os.path.join(DB_DIR, f"MSG{i}.db") for i in range(1, 50)]
|
||||||
import shutil
|
import shutil
|
||||||
if os.path.exists(target_database):
|
if os.path.exists(target_database):
|
||||||
os.remove(target_database)
|
os.remove(target_database)
|
||||||
try:
|
try:
|
||||||
shutil.copy2(os.path.join(db_dir, 'MSG0.db'), target_database) # 使用一个数据库文件作为模板
|
shutil.copy2(os.path.join(DB_DIR, 'MSG0.db'), target_database) # 使用一个数据库文件作为模板
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
logger.error(traceback.format_exc())
|
logger.error(traceback.format_exc())
|
||||||
self.errorSignal.emit(True)
|
self.errorSignal.emit(True)
|
||||||
@ -265,13 +265,13 @@ class DecryptThread(QThread):
|
|||||||
QMessageBox.critical("错误", "数据库不存在\n请检查微信版本是否为最新")
|
QMessageBox.critical("错误", "数据库不存在\n请检查微信版本是否为最新")
|
||||||
|
|
||||||
# 音频数据库文件
|
# 音频数据库文件
|
||||||
target_database = os.path.join(db_dir,'MediaMSG.db')
|
target_database = os.path.join(DB_DIR, 'MediaMSG.db')
|
||||||
# 源数据库文件列表
|
# 源数据库文件列表
|
||||||
if os.path.exists(target_database):
|
if os.path.exists(target_database):
|
||||||
os.remove(target_database)
|
os.remove(target_database)
|
||||||
source_databases = [os.path.join(db_dir,f"MediaMSG{i}.db") for i in range(1, 50)]
|
source_databases = [os.path.join(DB_DIR, f"MediaMSG{i}.db") for i in range(1, 50)]
|
||||||
try:
|
try:
|
||||||
shutil.copy2(os.path.join(db_dir,'MediaMSG0.db'), target_database) # 使用一个数据库文件作为模板
|
shutil.copy2(os.path.join(DB_DIR, 'MediaMSG0.db'), target_database) # 使用一个数据库文件作为模板
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
logger.error(traceback.format_exc())
|
logger.error(traceback.format_exc())
|
||||||
self.errorSignal.emit(True)
|
self.errorSignal.emit(True)
|
||||||
|
@ -2,7 +2,7 @@ import json
|
|||||||
import os.path
|
import os.path
|
||||||
from PyQt5.QtCore import pyqtSignal
|
from PyQt5.QtCore import pyqtSignal
|
||||||
from PyQt5.QtWidgets import QWidget, QMessageBox
|
from PyQt5.QtWidgets import QWidget, QMessageBox
|
||||||
|
from app.config import SEND_LOG_FLAG
|
||||||
from .settingUi import Ui_Form
|
from .settingUi import Ui_Form
|
||||||
|
|
||||||
Stylesheet = """
|
Stylesheet = """
|
||||||
@ -64,6 +64,12 @@ QCheckBox::indicator:checked{
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def set_SEND_LOG_FLAG(flag):
|
||||||
|
# noinspection PyGlobalUndefined
|
||||||
|
global SEND_LOG_FLAG
|
||||||
|
SEND_LOG_FLAG = flag
|
||||||
|
|
||||||
|
|
||||||
class SettingControl(QWidget, Ui_Form):
|
class SettingControl(QWidget, Ui_Form):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
@ -72,6 +78,7 @@ class SettingControl(QWidget, Ui_Form):
|
|||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
self.btn_addstopword.clicked.connect(self.add_stopwords)
|
self.btn_addstopword.clicked.connect(self.add_stopwords)
|
||||||
|
self.btn_addnewword_2.clicked.connect(self.add_new_words)
|
||||||
self.init_ui()
|
self.init_ui()
|
||||||
self.read_data()
|
self.read_data()
|
||||||
|
|
||||||
@ -82,13 +89,17 @@ class SettingControl(QWidget, Ui_Form):
|
|||||||
def set_error_log(self):
|
def set_error_log(self):
|
||||||
if self.checkBox_send_error_log.isChecked():
|
if self.checkBox_send_error_log.isChecked():
|
||||||
self.label_error_log.setText('开')
|
self.label_error_log.setText('开')
|
||||||
|
set_SEND_LOG_FLAG(True)
|
||||||
else:
|
else:
|
||||||
self.label_error_log.setText('关')
|
self.label_error_log.setText('关')
|
||||||
|
set_SEND_LOG_FLAG(False)
|
||||||
|
print('SEND_LOG_FLAG:', SEND_LOG_FLAG)
|
||||||
|
|
||||||
def read_data(self):
|
def read_data(self):
|
||||||
os.makedirs('./app/data', exist_ok=True)
|
os.makedirs('./app/data', exist_ok=True)
|
||||||
stopwords = ['裂开', '苦涩', '叹气', '凋谢', '让我看看', '酷', '奋斗', '疑问', '擦汗', '抠鼻', '鄙视', '勾引',
|
stopwords = ['裂开', '苦涩', '叹气', '凋谢', '让我看看', '酷', '奋斗', '疑问', '擦汗', '抠鼻', '鄙视', '勾引',
|
||||||
'奸笑', '嘿哈', '捂脸', '机智', '加油', '吃瓜', '尴尬', '炸弹', '旺柴']
|
'奸笑', '嘿哈', '捂脸', '机智', '加油', '吃瓜', '尴尬', '炸弹', '旺柴']
|
||||||
|
new_words = ['YYDS', '666', '显眼包', '遥遥领先']
|
||||||
if os.path.exists('./app/data/stopwords.txt'):
|
if os.path.exists('./app/data/stopwords.txt'):
|
||||||
with open('./app/data/stopwords.txt', 'r', encoding='utf-8') as f:
|
with open('./app/data/stopwords.txt', 'r', encoding='utf-8') as f:
|
||||||
stopwords = set(f.read().splitlines())
|
stopwords = set(f.read().splitlines())
|
||||||
@ -98,6 +109,15 @@ class SettingControl(QWidget, Ui_Form):
|
|||||||
stopwords = '\n'.join(stopwords)
|
stopwords = '\n'.join(stopwords)
|
||||||
with open('./app/data/stopwords.txt', 'w', encoding='utf-8') as f:
|
with open('./app/data/stopwords.txt', 'w', encoding='utf-8') as f:
|
||||||
f.write(stopwords)
|
f.write(stopwords)
|
||||||
|
if os.path.exists('./app/data/new_words.txt'):
|
||||||
|
with open('./app/data/new_words.txt', 'r', encoding='utf-8') as f:
|
||||||
|
stopwords = set(f.read().splitlines())
|
||||||
|
self.plainTextEdit_newword.setPlainText(' '.join(new_words))
|
||||||
|
else:
|
||||||
|
self.plainTextEdit_newword.setPlainText(' '.join(new_words))
|
||||||
|
stopwords = '\n'.join(stopwords)
|
||||||
|
with open('./app/data/new_words.txt', 'w', encoding='utf-8') as f:
|
||||||
|
f.write(stopwords)
|
||||||
|
|
||||||
def add_stopwords(self):
|
def add_stopwords(self):
|
||||||
text = self.plainTextEdit.toPlainText()
|
text = self.plainTextEdit.toPlainText()
|
||||||
@ -105,3 +125,10 @@ class SettingControl(QWidget, Ui_Form):
|
|||||||
with open('./app/data/stopwords.txt', 'w', encoding='utf-8') as f:
|
with open('./app/data/stopwords.txt', 'w', encoding='utf-8') as f:
|
||||||
f.write(stopwords)
|
f.write(stopwords)
|
||||||
QMessageBox.about(self, "添加成功", "停用词添加成功")
|
QMessageBox.about(self, "添加成功", "停用词添加成功")
|
||||||
|
|
||||||
|
def add_new_words(self):
|
||||||
|
text = self.plainTextEdit_newword.toPlainText()
|
||||||
|
new_words = '\n'.join(text.split())
|
||||||
|
with open('./app/data/new_words.txt', 'w', encoding='utf-8') as f:
|
||||||
|
f.write(new_words)
|
||||||
|
QMessageBox.about(self, "添加成功", "自定义词添加成功")
|
||||||
|
@ -14,9 +14,9 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
|||||||
class Ui_Form(object):
|
class Ui_Form(object):
|
||||||
def setupUi(self, Form):
|
def setupUi(self, Form):
|
||||||
Form.setObjectName("Form")
|
Form.setObjectName("Form")
|
||||||
Form.resize(587, 573)
|
Form.resize(638, 696)
|
||||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form)
|
self.verticalLayout_6 = QtWidgets.QVBoxLayout(Form)
|
||||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
self.verticalLayout_6.setObjectName("verticalLayout_6")
|
||||||
self.scrollArea = QtWidgets.QScrollArea(Form)
|
self.scrollArea = QtWidgets.QScrollArea(Form)
|
||||||
self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame)
|
self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame)
|
||||||
self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
|
self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
|
||||||
@ -25,7 +25,7 @@ class Ui_Form(object):
|
|||||||
self.scrollArea.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
self.scrollArea.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||||
self.scrollArea.setObjectName("scrollArea")
|
self.scrollArea.setObjectName("scrollArea")
|
||||||
self.scrollAreaWidgetContents = QtWidgets.QWidget()
|
self.scrollAreaWidgetContents = QtWidgets.QWidget()
|
||||||
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 552, 555))
|
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, -20, 595, 728))
|
||||||
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
|
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
|
||||||
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
|
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
|
||||||
self.verticalLayout_3.setObjectName("verticalLayout_3")
|
self.verticalLayout_3.setObjectName("verticalLayout_3")
|
||||||
@ -68,6 +68,46 @@ class Ui_Form(object):
|
|||||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||||
self.verticalLayout_4.addLayout(self.verticalLayout)
|
self.verticalLayout_4.addLayout(self.verticalLayout)
|
||||||
self.verticalLayout_3.addWidget(self.widget)
|
self.verticalLayout_3.addWidget(self.widget)
|
||||||
|
self.widget_3 = QtWidgets.QWidget(self.scrollAreaWidgetContents)
|
||||||
|
self.widget_3.setStyleSheet("QWidget{\n"
|
||||||
|
" background-color:rgb(251,251,251);\n"
|
||||||
|
" border-radius: 10px;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QPushButton{\n"
|
||||||
|
" background-color: rgb(250,252,253);\n"
|
||||||
|
" border-radius: 5px;\n"
|
||||||
|
" padding: 8px;\n"
|
||||||
|
" border-right: 2px solid #888888; /* 按钮边框,2px宽,白色 */\n"
|
||||||
|
" border-bottom: 2px solid #888888; /* 按钮边框,2px宽,白色 */\n"
|
||||||
|
" border-left: 1px solid #ffffff; /* 按钮边框,2px宽,白色 */\n"
|
||||||
|
" border-top: 1px solid #ffffff; /* 按钮边框,2px宽,白色 */\n"
|
||||||
|
"}\n"
|
||||||
|
"QPushButton:hover { \n"
|
||||||
|
" background-color: lightgray;\n"
|
||||||
|
"}")
|
||||||
|
self.widget_3.setObjectName("widget_3")
|
||||||
|
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.widget_3)
|
||||||
|
self.verticalLayout_5.setObjectName("verticalLayout_5")
|
||||||
|
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
|
||||||
|
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.widget_3)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.verticalLayout_2.addWidget(self.label_2)
|
||||||
|
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||||
|
self.plainTextEdit_newword = QtWidgets.QPlainTextEdit(self.widget_3)
|
||||||
|
self.plainTextEdit_newword.setFrameShape(QtWidgets.QFrame.Box)
|
||||||
|
self.plainTextEdit_newword.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||||
|
self.plainTextEdit_newword.setPlainText("")
|
||||||
|
self.plainTextEdit_newword.setObjectName("plainTextEdit_newword")
|
||||||
|
self.horizontalLayout_3.addWidget(self.plainTextEdit_newword)
|
||||||
|
self.btn_addnewword_2 = QtWidgets.QPushButton(self.widget_3)
|
||||||
|
self.btn_addnewword_2.setObjectName("btn_addnewword_2")
|
||||||
|
self.horizontalLayout_3.addWidget(self.btn_addnewword_2)
|
||||||
|
self.verticalLayout_2.addLayout(self.horizontalLayout_3)
|
||||||
|
self.verticalLayout_5.addLayout(self.verticalLayout_2)
|
||||||
|
self.verticalLayout_3.addWidget(self.widget_3)
|
||||||
self.widget_2 = QtWidgets.QWidget(self.scrollAreaWidgetContents)
|
self.widget_2 = QtWidgets.QWidget(self.scrollAreaWidgetContents)
|
||||||
self.widget_2.setStyleSheet("QWidget{\n"
|
self.widget_2.setStyleSheet("QWidget{\n"
|
||||||
" background-color:rgb(251,251,251);\n"
|
" background-color:rgb(251,251,251);\n"
|
||||||
@ -90,22 +130,22 @@ class Ui_Form(object):
|
|||||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget_2)
|
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget_2)
|
||||||
self.horizontalLayout_2.setContentsMargins(9, -1, -1, -1)
|
self.horizontalLayout_2.setContentsMargins(9, -1, -1, -1)
|
||||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
self.commandLinkButton = QtWidgets.QCommandLinkButton(self.widget_2)
|
self.commandLinkButton_send_error_log = QtWidgets.QCommandLinkButton(self.widget_2)
|
||||||
self.commandLinkButton.setEnabled(True)
|
self.commandLinkButton_send_error_log.setEnabled(True)
|
||||||
self.commandLinkButton.setTabletTracking(False)
|
self.commandLinkButton_send_error_log.setTabletTracking(False)
|
||||||
self.commandLinkButton.setFocusPolicy(QtCore.Qt.StrongFocus)
|
self.commandLinkButton_send_error_log.setFocusPolicy(QtCore.Qt.StrongFocus)
|
||||||
self.commandLinkButton.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
|
self.commandLinkButton_send_error_log.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
|
||||||
self.commandLinkButton.setToolTipDuration(-1)
|
self.commandLinkButton_send_error_log.setToolTipDuration(-1)
|
||||||
self.commandLinkButton.setLayoutDirection(QtCore.Qt.LeftToRight)
|
self.commandLinkButton_send_error_log.setLayoutDirection(QtCore.Qt.LeftToRight)
|
||||||
self.commandLinkButton.setAutoFillBackground(False)
|
self.commandLinkButton_send_error_log.setAutoFillBackground(False)
|
||||||
self.commandLinkButton.setCheckable(False)
|
self.commandLinkButton_send_error_log.setCheckable(False)
|
||||||
self.commandLinkButton.setChecked(False)
|
self.commandLinkButton_send_error_log.setChecked(False)
|
||||||
self.commandLinkButton.setAutoRepeat(False)
|
self.commandLinkButton_send_error_log.setAutoRepeat(False)
|
||||||
self.commandLinkButton.setAutoExclusive(False)
|
self.commandLinkButton_send_error_log.setAutoExclusive(False)
|
||||||
self.commandLinkButton.setAutoDefault(False)
|
self.commandLinkButton_send_error_log.setAutoDefault(False)
|
||||||
self.commandLinkButton.setDefault(False)
|
self.commandLinkButton_send_error_log.setDefault(False)
|
||||||
self.commandLinkButton.setObjectName("commandLinkButton")
|
self.commandLinkButton_send_error_log.setObjectName("commandLinkButton_send_error_log")
|
||||||
self.horizontalLayout_2.addWidget(self.commandLinkButton)
|
self.horizontalLayout_2.addWidget(self.commandLinkButton_send_error_log)
|
||||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
self.horizontalLayout_2.addItem(spacerItem)
|
self.horizontalLayout_2.addItem(spacerItem)
|
||||||
self.label_error_log = QtWidgets.QLabel(self.widget_2)
|
self.label_error_log = QtWidgets.QLabel(self.widget_2)
|
||||||
@ -120,7 +160,7 @@ class Ui_Form(object):
|
|||||||
self.checkBox_send_error_log = QtWidgets.QCheckBox(self.widget_2)
|
self.checkBox_send_error_log = QtWidgets.QCheckBox(self.widget_2)
|
||||||
self.checkBox_send_error_log.setText("")
|
self.checkBox_send_error_log.setText("")
|
||||||
self.checkBox_send_error_log.setIconSize(QtCore.QSize(64, 64))
|
self.checkBox_send_error_log.setIconSize(QtCore.QSize(64, 64))
|
||||||
self.checkBox_send_error_log.setChecked(False)
|
self.checkBox_send_error_log.setChecked(True)
|
||||||
self.checkBox_send_error_log.setObjectName("checkBox_send_error_log")
|
self.checkBox_send_error_log.setObjectName("checkBox_send_error_log")
|
||||||
self.horizontalLayout_2.addWidget(self.checkBox_send_error_log)
|
self.horizontalLayout_2.addWidget(self.checkBox_send_error_log)
|
||||||
self.verticalLayout_3.addWidget(self.widget_2)
|
self.verticalLayout_3.addWidget(self.widget_2)
|
||||||
@ -138,7 +178,7 @@ class Ui_Form(object):
|
|||||||
self.radioButton.setObjectName("radioButton")
|
self.radioButton.setObjectName("radioButton")
|
||||||
self.verticalLayout_3.addWidget(self.radioButton)
|
self.verticalLayout_3.addWidget(self.radioButton)
|
||||||
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
|
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
|
||||||
self.verticalLayout_2.addWidget(self.scrollArea)
|
self.verticalLayout_6.addWidget(self.scrollArea)
|
||||||
|
|
||||||
self.retranslateUi(Form)
|
self.retranslateUi(Form)
|
||||||
QtCore.QMetaObject.connectSlotsByName(Form)
|
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||||
@ -149,9 +189,11 @@ class Ui_Form(object):
|
|||||||
self.label.setText(_translate("Form", "文本框里输入年度报告词云停用词,每个词之间用空格隔开"))
|
self.label.setText(_translate("Form", "文本框里输入年度报告词云停用词,每个词之间用空格隔开"))
|
||||||
self.plainTextEdit.setPlainText(_translate("Form", "哈哈哈 发呆"))
|
self.plainTextEdit.setPlainText(_translate("Form", "哈哈哈 发呆"))
|
||||||
self.btn_addstopword.setText(_translate("Form", "添加停用词"))
|
self.btn_addstopword.setText(_translate("Form", "添加停用词"))
|
||||||
self.commandLinkButton.setText(_translate("Form", "收集错误日志"))
|
self.label_2.setText(_translate("Form", "文本框里输入年度报告词云自定义词,每个词之间用空格隔开"))
|
||||||
self.commandLinkButton.setDescription(_translate("Form", "收集错误信息以帮助改进"))
|
self.btn_addnewword_2.setText(_translate("Form", "添加自定义词"))
|
||||||
self.label_error_log.setText(_translate("Form", "关"))
|
self.commandLinkButton_send_error_log.setText(_translate("Form", "收集错误日志"))
|
||||||
|
self.commandLinkButton_send_error_log.setDescription(_translate("Form", "收集错误信息以帮助改进"))
|
||||||
|
self.label_error_log.setText(_translate("Form", "开"))
|
||||||
self.checkBox_2.setText(_translate("Form", "CheckBox"))
|
self.checkBox_2.setText(_translate("Form", "CheckBox"))
|
||||||
self.checkBox.setText(_translate("Form", "CheckBox"))
|
self.checkBox.setText(_translate("Form", "CheckBox"))
|
||||||
self.commandLinkButton_2.setText(_translate("Form", "CommandLinkButton"))
|
self.commandLinkButton_2.setText(_translate("Form", "CommandLinkButton"))
|
||||||
|
@ -8,10 +8,10 @@ import filecmp
|
|||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal, QThread
|
from PyQt5.QtCore import pyqtSignal, QThread
|
||||||
|
|
||||||
from app.config import output_dir
|
from app.config import OUTPUT_DIR
|
||||||
from app.person import Me, Contact
|
from app.person import Me, Contact
|
||||||
|
|
||||||
os.makedirs(os.path.join(output_dir, '聊天记录'), exist_ok=True)
|
os.makedirs(os.path.join(OUTPUT_DIR, '聊天记录'), exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
def set_global_font(doc, font_name):
|
def set_global_font(doc, font_name):
|
||||||
@ -104,7 +104,7 @@ class ExporterBase(QThread):
|
|||||||
self.last_timestamp = 0
|
self.last_timestamp = 0
|
||||||
self.time_range = time_range
|
self.time_range = time_range
|
||||||
self.messages = messages
|
self.messages = messages
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
makedirs(origin_path)
|
makedirs(origin_path)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
@ -3,13 +3,13 @@ import os
|
|||||||
|
|
||||||
from app.DataBase import msg_db
|
from app.DataBase import msg_db
|
||||||
from app.util.exporter.exporter import ExporterBase
|
from app.util.exporter.exporter import ExporterBase
|
||||||
from app.config import output_dir
|
from app.config import OUTPUT_DIR
|
||||||
|
|
||||||
|
|
||||||
class CSVExporter(ExporterBase):
|
class CSVExporter(ExporterBase):
|
||||||
def to_csv(self):
|
def to_csv(self):
|
||||||
print(f"【开始导出 CSV {self.contact.remark}】")
|
print(f"【开始导出 CSV {self.contact.remark}】")
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
os.makedirs(origin_path, exist_ok=True)
|
os.makedirs(origin_path, exist_ok=True)
|
||||||
filename = os.path.join(origin_path,f"{self.contact.remark}_utf8.csv")
|
filename = os.path.join(origin_path,f"{self.contact.remark}_utf8.csv")
|
||||||
columns = ['localId', 'TalkerId', 'Type', 'SubType',
|
columns = ['localId', 'TalkerId', 'Type', 'SubType',
|
||||||
|
@ -12,7 +12,7 @@ from docxcompose.composer import Composer
|
|||||||
|
|
||||||
from app.DataBase import msg_db, hard_link_db
|
from app.DataBase import msg_db, hard_link_db
|
||||||
from app.util.exporter.exporter import ExporterBase, escape_js_and_html
|
from app.util.exporter.exporter import ExporterBase, escape_js_and_html
|
||||||
from app.config import output_dir
|
from app.config import OUTPUT_DIR
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.person import Me
|
from app.person import Me
|
||||||
from app.util.compress_content import parser_reply, share_card, music_share
|
from app.util.compress_content import parser_reply, share_card, music_share
|
||||||
@ -76,7 +76,7 @@ class DocxExporter(ExporterBase):
|
|||||||
run = content.paragraphs[0].add_run()
|
run = content.paragraphs[0].add_run()
|
||||||
str_content = escape_js_and_html(str_content)
|
str_content = escape_js_and_html(str_content)
|
||||||
image_path = hard_link_db.get_image(str_content, BytesExtra, thumb=True)
|
image_path = hard_link_db.get_image(str_content, BytesExtra, thumb=True)
|
||||||
base_path = os.path.join(output_dir, '聊天记录', self.contact.remark, 'image')
|
base_path = os.path.join(OUTPUT_DIR, '聊天记录', self.contact.remark, 'image')
|
||||||
if not os.path.exists(os.path.join(Me().wx_dir, image_path)):
|
if not os.path.exists(os.path.join(Me().wx_dir, image_path)):
|
||||||
image_thumb_path = hard_link_db.get_image(str_content, BytesExtra, thumb=False)
|
image_thumb_path = hard_link_db.get_image(str_content, BytesExtra, thumb=False)
|
||||||
if not os.path.exists(os.path.join(Me().wx_dir, image_thumb_path)):
|
if not os.path.exists(os.path.join(Me().wx_dir, image_thumb_path)):
|
||||||
@ -239,7 +239,7 @@ class DocxExporter(ExporterBase):
|
|||||||
return content_cell
|
return content_cell
|
||||||
|
|
||||||
def music_share(self, doc, message):
|
def music_share(self, doc, message):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
is_send = message[4]
|
is_send = message[4]
|
||||||
timestamp = message[5]
|
timestamp = message[5]
|
||||||
content = music_share(message[11])
|
content = music_share(message[11])
|
||||||
@ -282,7 +282,7 @@ class DocxExporter(ExporterBase):
|
|||||||
app_logo = ''
|
app_logo = ''
|
||||||
|
|
||||||
def merge_docx(self, conRemark, n):
|
def merge_docx(self, conRemark, n):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录')
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录')
|
||||||
all_file_path = []
|
all_file_path = []
|
||||||
for i in range(n):
|
for i in range(n):
|
||||||
file_name = f"{conRemark}{i}.docx"
|
file_name = f"{conRemark}{i}.docx"
|
||||||
@ -305,7 +305,7 @@ class DocxExporter(ExporterBase):
|
|||||||
|
|
||||||
def export(self):
|
def export(self):
|
||||||
print(f"【开始导出 DOCX {self.contact.remark}】")
|
print(f"【开始导出 DOCX {self.contact.remark}】")
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
messages = msg_db.get_messages(self.contact.wxid, time_range=self.time_range)
|
messages = msg_db.get_messages(self.contact.wxid, time_range=self.time_range)
|
||||||
Me().save_avatar(os.path.join(origin_path, 'avatar', f'{Me().wxid}.png'))
|
Me().save_avatar(os.path.join(origin_path, 'avatar', f'{Me().wxid}.png'))
|
||||||
if self.contact.is_chatroom:
|
if self.contact.is_chatroom:
|
||||||
|
@ -8,7 +8,7 @@ from PyQt5.QtCore import pyqtSignal, QThread
|
|||||||
|
|
||||||
from app.DataBase import msg_db, hard_link_db, media_msg_db
|
from app.DataBase import msg_db, hard_link_db, media_msg_db
|
||||||
from app.util.exporter.exporter import ExporterBase, escape_js_and_html
|
from app.util.exporter.exporter import ExporterBase, escape_js_and_html
|
||||||
from app.config import output_dir
|
from app.config import OUTPUT_DIR
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.person import Me
|
from app.person import Me
|
||||||
from app.util import path
|
from app.util import path
|
||||||
@ -45,7 +45,7 @@ class HtmlExporter(ExporterBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def image(self, doc, message):
|
def image(self, doc, message):
|
||||||
base_path = os.path.join(output_dir, '聊天记录', self.contact.remark, 'image')
|
base_path = os.path.join(OUTPUT_DIR, '聊天记录', self.contact.remark, 'image')
|
||||||
type_ = message[2]
|
type_ = message[2]
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
str_time = message[8]
|
str_time = message[8]
|
||||||
@ -63,7 +63,7 @@ class HtmlExporter(ExporterBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def audio(self, doc, message):
|
def audio(self, doc, message):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
str_time = message[8]
|
str_time = message[8]
|
||||||
is_send = message[4]
|
is_send = message[4]
|
||||||
@ -99,7 +99,7 @@ class HtmlExporter(ExporterBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def file(self, doc, message):
|
def file(self, doc, message):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
bytesExtra = message[10]
|
bytesExtra = message[10]
|
||||||
compress_content = message[11]
|
compress_content = message[11]
|
||||||
str_time = message[8]
|
str_time = message[8]
|
||||||
@ -170,7 +170,7 @@ class HtmlExporter(ExporterBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def video(self, doc, message):
|
def video(self, doc, message):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
type_ = message[2]
|
type_ = message[2]
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
str_time = message[8]
|
str_time = message[8]
|
||||||
@ -211,7 +211,7 @@ class HtmlExporter(ExporterBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def music_share(self, doc, message):
|
def music_share(self, doc, message):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
is_send = message[4]
|
is_send = message[4]
|
||||||
timestamp = message[5]
|
timestamp = message[5]
|
||||||
content = music_share(message[11])
|
content = music_share(message[11])
|
||||||
@ -232,7 +232,7 @@ class HtmlExporter(ExporterBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def share_card(self, doc, message):
|
def share_card(self, doc, message):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
is_send = message[4]
|
is_send = message[4]
|
||||||
timestamp = message[5]
|
timestamp = message[5]
|
||||||
bytesExtra = message[10]
|
bytesExtra = message[10]
|
||||||
@ -299,7 +299,7 @@ class HtmlExporter(ExporterBase):
|
|||||||
def export(self):
|
def export(self):
|
||||||
print(f"【开始导出 HTML {self.contact.remark}】")
|
print(f"【开始导出 HTML {self.contact.remark}】")
|
||||||
messages = msg_db.get_messages(self.contact.wxid, time_range=self.time_range)
|
messages = msg_db.get_messages(self.contact.wxid, time_range=self.time_range)
|
||||||
filename = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark,
|
filename = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark,
|
||||||
f'{self.contact.remark}.html')
|
f'{self.contact.remark}.html')
|
||||||
file_path = './app/resources/data/template.html'
|
file_path = './app/resources/data/template.html'
|
||||||
if not os.path.exists(file_path):
|
if not os.path.exists(file_path):
|
||||||
@ -381,7 +381,7 @@ class OutputMedia(QThread):
|
|||||||
self.contact = contact
|
self.contact = contact
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
messages = msg_db.get_messages_by_type(self.contact.wxid, 34)
|
messages = msg_db.get_messages_by_type(self.contact.wxid, 34)
|
||||||
for message in messages:
|
for message in messages:
|
||||||
is_send = message[4]
|
is_send = message[4]
|
||||||
@ -410,7 +410,7 @@ class OutputEmoji(QThread):
|
|||||||
self.contact = contact
|
self.contact = contact
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
messages = msg_db.get_messages_by_type(self.contact.wxid, 47)
|
messages = msg_db.get_messages_by_type(self.contact.wxid, 47)
|
||||||
for message in messages:
|
for message in messages:
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
@ -447,9 +447,9 @@ class OutputImage(QThread):
|
|||||||
print("图片导出完成")
|
print("图片导出完成")
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
messages = msg_db.get_messages_by_type(self.contact.wxid, 3)
|
messages = msg_db.get_messages_by_type(self.contact.wxid, 3)
|
||||||
base_path = os.path.join(output_dir, '聊天记录', self.contact.remark, 'image')
|
base_path = os.path.join(OUTPUT_DIR, '聊天记录', self.contact.remark, 'image')
|
||||||
for message in messages:
|
for message in messages:
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
BytesExtra = message[10]
|
BytesExtra = message[10]
|
||||||
@ -489,7 +489,7 @@ class OutputImageChild(QThread):
|
|||||||
self.messages = messages
|
self.messages = messages
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
for message in self.messages:
|
for message in self.messages:
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
BytesExtra = message[10]
|
BytesExtra = message[10]
|
||||||
|
@ -2,7 +2,7 @@ import os
|
|||||||
|
|
||||||
from app.DataBase import msg_db
|
from app.DataBase import msg_db
|
||||||
from app.util.exporter.exporter import ExporterBase
|
from app.util.exporter.exporter import ExporterBase
|
||||||
from app.config import output_dir
|
from app.config import OUTPUT_DIR
|
||||||
from app.util.compress_content import parser_reply, share_card
|
from app.util.compress_content import parser_reply, share_card
|
||||||
|
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ class TxtExporter(ExporterBase):
|
|||||||
def export(self):
|
def export(self):
|
||||||
# 实现导出为txt的逻辑
|
# 实现导出为txt的逻辑
|
||||||
print(f"【开始导出 TXT {self.contact.remark}】")
|
print(f"【开始导出 TXT {self.contact.remark}】")
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
os.makedirs(origin_path, exist_ok=True)
|
os.makedirs(origin_path, exist_ok=True)
|
||||||
filename = os.path.join(origin_path, self.contact.remark+'.txt')
|
filename = os.path.join(origin_path, self.contact.remark+'.txt')
|
||||||
messages = msg_db.get_messages(self.contact.wxid, time_range=self.time_range)
|
messages = msg_db.get_messages(self.contact.wxid, time_range=self.time_range)
|
||||||
|
@ -15,14 +15,14 @@ from app.util.exporter.exporter_docx import DocxExporter
|
|||||||
from app.util.exporter.exporter_html import HtmlExporter
|
from app.util.exporter.exporter_html import HtmlExporter
|
||||||
from app.util.exporter.exporter_txt import TxtExporter
|
from app.util.exporter.exporter_txt import TxtExporter
|
||||||
from app.DataBase.hard_link import decodeExtraBuf
|
from app.DataBase.hard_link import decodeExtraBuf
|
||||||
from app.config import output_dir
|
from app.config import OUTPUT_DIR
|
||||||
from app.DataBase.package_msg import PackageMsg
|
from app.DataBase.package_msg import PackageMsg
|
||||||
from app.DataBase import media_msg_db, hard_link_db, micro_msg_db, msg_db
|
from app.DataBase import media_msg_db, hard_link_db, micro_msg_db, msg_db
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.person import Me
|
from app.person import Me
|
||||||
from app.util.image import get_image
|
from app.util.image import get_image
|
||||||
|
|
||||||
os.makedirs(os.path.join(output_dir, '聊天记录'), exist_ok=True)
|
os.makedirs(os.path.join(OUTPUT_DIR, '聊天记录'), exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
class Output(QThread):
|
class Output(QThread):
|
||||||
@ -81,7 +81,7 @@ class Output(QThread):
|
|||||||
@return:
|
@return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录')
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录')
|
||||||
os.makedirs(origin_path, exist_ok=True)
|
os.makedirs(origin_path, exist_ok=True)
|
||||||
filename = QFileDialog.getSaveFileName(None, "save file", os.path.join(os.getcwd(), 'messages.csv'),
|
filename = QFileDialog.getSaveFileName(None, "save file", os.path.join(os.getcwd(), 'messages.csv'),
|
||||||
"csv files (*.csv);;all files(*.*)")
|
"csv files (*.csv);;all files(*.*)")
|
||||||
@ -169,7 +169,7 @@ class Output(QThread):
|
|||||||
|
|
||||||
def merge_docx(self, n):
|
def merge_docx(self, n):
|
||||||
conRemark = self.contact.remark
|
conRemark = self.contact.remark
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', conRemark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', conRemark)
|
||||||
filename = f"{origin_path}/{conRemark}_{n}.docx"
|
filename = f"{origin_path}/{conRemark}_{n}.docx"
|
||||||
if n == 10086:
|
if n == 10086:
|
||||||
# self.document.append(self.document)
|
# self.document.append(self.document)
|
||||||
@ -310,7 +310,7 @@ class OutputMedia(QThread):
|
|||||||
self.time_range = time_range
|
self.time_range = time_range
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
messages = msg_db.get_messages_by_type(self.contact.wxid, 34, time_range=self.time_range)
|
messages = msg_db.get_messages_by_type(self.contact.wxid, 34, time_range=self.time_range)
|
||||||
for message in messages:
|
for message in messages:
|
||||||
is_send = message[4]
|
is_send = message[4]
|
||||||
@ -337,7 +337,7 @@ class OutputEmoji(QThread):
|
|||||||
self.time_range = time_range
|
self.time_range = time_range
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
messages = msg_db.get_messages_by_type(self.contact.wxid, 47, time_range=self.time_range)
|
messages = msg_db.get_messages_by_type(self.contact.wxid, 47, time_range=self.time_range)
|
||||||
for message in messages:
|
for message in messages:
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
@ -374,9 +374,9 @@ class OutputImage(QThread):
|
|||||||
print('图片导出完成')
|
print('图片导出完成')
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
messages = msg_db.get_messages_by_type(self.contact.wxid, 3, time_range=self.time_range)
|
messages = msg_db.get_messages_by_type(self.contact.wxid, 3, time_range=self.time_range)
|
||||||
base_path = os.path.join(output_dir,'聊天记录',self.contact.remark,'image')
|
base_path = os.path.join(OUTPUT_DIR, '聊天记录', self.contact.remark, 'image')
|
||||||
for message in messages:
|
for message in messages:
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
BytesExtra = message[10]
|
BytesExtra = message[10]
|
||||||
@ -406,7 +406,7 @@ class OutputImageChild(QThread):
|
|||||||
self.time_range = time_range
|
self.time_range = time_range
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
origin_path = os.path.join(os.getcwd(), output_dir, '聊天记录', self.contact.remark)
|
origin_path = os.path.join(os.getcwd(), OUTPUT_DIR, '聊天记录', self.contact.remark)
|
||||||
for message in self.messages:
|
for message in self.messages:
|
||||||
str_content = message[7]
|
str_content = message[7]
|
||||||
BytesExtra = message[10]
|
BytesExtra = message[10]
|
||||||
|
Loading…
Reference in New Issue
Block a user