修复db文件空格路径的bug

This commit is contained in:
shuaikangzhou 2023-11-15 23:53:39 +08:00
parent 5849b8f692
commit 3ceb9e2340
7 changed files with 125 additions and 43 deletions

View File

@ -4,12 +4,14 @@
<option name="autoReloadType" value="SELECTIVE" /> <option name="autoReloadType" value="SELECTIVE" />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="84e65474-7da9-466d-baf3-cc88dde3ffdd" name="变更" comment="头像支持显示二进制"> <list default="true" id="84e65474-7da9-466d-baf3-cc88dde3ffdd" name="变更" comment="显示联系人信息">
<change afterPath="$PROJECT_DIR$/app/DataBase/msg.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/DataBase/output_pc.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Ui/decrypt/decrypt.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/decrypt/decrypt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Ui/mainview.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/mainview.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/person.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/person.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/person.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/person.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contactInfo.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contactInfo.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.ui" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.ui" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contact_window.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contact_window.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -105,7 +107,7 @@
<recent name="D:\Project\PythonProject\WeChatMsg\app\Ui" /> <recent name="D:\Project\PythonProject\WeChatMsg\app\Ui" />
</key> </key>
</component> </component>
<component name="RunManager" selected="Python.decrypt_window"> <component name="RunManager" selected="Python.main">
<configuration name="CAvatar" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> <configuration name="CAvatar" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="WeChatMsg" /> <module name="WeChatMsg" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
@ -169,6 +171,27 @@
<option name="INPUT_FILE" value="" /> <option name="INPUT_FILE" value="" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
<configuration name="main" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="WeChatMsg" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="misc" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> <configuration name="misc" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="WeChatMsg" /> <module name="WeChatMsg" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
@ -211,34 +234,13 @@
<option name="INPUT_FILE" value="" /> <option name="INPUT_FILE" value="" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
<configuration name="test_avatar" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="WeChatMsg" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/app/components" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app/components/test_avatar.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="Python.main" />
<item itemvalue="Python.decrypt_window" /> <item itemvalue="Python.decrypt_window" />
<item itemvalue="Python.misc" /> <item itemvalue="Python.misc" />
<item itemvalue="Python.CAvatar" /> <item itemvalue="Python.CAvatar" />
<item itemvalue="Python.contact_info_ui" /> <item itemvalue="Python.contact_info_ui" />
<item itemvalue="Python.test_avatar" />
</list> </list>
</recent_temporary> </recent_temporary>
</component> </component>
@ -254,13 +256,6 @@
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1672848140146</updated> <updated>1672848140146</updated>
</task> </task>
<task id="LOCAL-00013" summary="修复部分bug">
<created>1680232548867</created>
<option name="number" value="00013" />
<option name="presentableId" value="LOCAL-00013" />
<option name="project" value="LOCAL" />
<updated>1680232548867</updated>
</task>
<task id="LOCAL-00014" summary="新增对话情感分析增加窗口自适应新增emotion界面"> <task id="LOCAL-00014" summary="新增对话情感分析增加窗口自适应新增emotion界面">
<created>1680441801589</created> <created>1680441801589</created>
<option name="number" value="00014" /> <option name="number" value="00014" />
@ -597,7 +592,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1700058733119</updated> <updated>1700058733119</updated>
</task> </task>
<option name="localTasksCounter" value="62" /> <task id="LOCAL-00062" summary="显示联系人信息">
<created>1700060367255</created>
<option name="number" value="00062" />
<option name="presentableId" value="LOCAL-00062" />
<option name="project" value="LOCAL" />
<updated>1700060367255</updated>
</task>
<option name="localTasksCounter" value="63" />
<servers /> <servers />
</component> </component>
<component name="UnknownFeatures"> <component name="UnknownFeatures">
@ -633,7 +635,6 @@
</option> </option>
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="增加群二维码" />
<MESSAGE value="支持导出csv格式聊天记录" /> <MESSAGE value="支持导出csv格式聊天记录" />
<MESSAGE value="重构一些class删除一些不必要的文件" /> <MESSAGE value="重构一些class删除一些不必要的文件" />
<MESSAGE value="用stackedWidget实现导航栏" /> <MESSAGE value="用stackedWidget实现导航栏" />
@ -658,7 +659,8 @@
<MESSAGE value="修改UI" /> <MESSAGE value="修改UI" />
<MESSAGE value="新增联系人头像组件" /> <MESSAGE value="新增联系人头像组件" />
<MESSAGE value="头像支持显示二进制" /> <MESSAGE value="头像支持显示二进制" />
<option name="LAST_COMMIT_MESSAGE" value="头像支持显示二进制" /> <MESSAGE value="显示联系人信息" />
<option name="LAST_COMMIT_MESSAGE" value="显示联系人信息" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" /> <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" /> <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
</component> </component>

11
app/DataBase/msg.py Normal file
View File

@ -0,0 +1,11 @@
import os.path
import sqlite3
DB = None
cursor = None
misc_path = "./app/Database/Msg/MSG0.db"
# misc_path = './Msg/Misc.db'
if os.path.exists(misc_path):
DB = sqlite3.connect(misc_path, check_same_thread=False)
# '''创建游标'''
cursor = DB.cursor()

52
app/DataBase/output_pc.py Normal file
View File

@ -0,0 +1,52 @@
import os
import numpy as np
import pandas as pd
from PyQt5.QtCore import pyqtSignal
class Output(QThread):
"""
发送信息线程
"""
progressSignal = pyqtSignal(int)
rangeSignal = pyqtSignal(int)
okSignal = pyqtSignal(int)
i = 1
CSV = 0
DOCX = 1
HTML = 2
def __init__(self, ta_u, parent=None, type_=DOCX):
super().__init__(parent)
self.sec = 2 # 默认1000秒
self.ta_username = ta_u
self.msg_id = 0
self.output_type = type_
self.total_num = 0
@log
def to_csv(self, conRemark, path):
origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{conRemark}"
filename = f"{os.path.abspath('.')}/data/聊天记录/{conRemark}/{conRemark}.csv"
last_timestamp = 1601968667000
columns = ["用户名", "消息内容", "发送时间", "发送状态", "消息类型", "isSend", "msgId"]
df = pd.DataFrame()
df["用户名"] = np.array(list(map(lambda x: x[7], messages)))
df["消息内容"] = np.array(list(map(lambda x: x[8], messages)))
df["发送时间"] = np.array(list(map(lambda x: time_format(x[6]), messages)))
df["发送状态"] = np.array(list(map(lambda x: x[3], messages)))
df["消息类型"] = np.array(list(map(lambda x: x[2], messages)))
df["isSend"] = np.array(list(map(lambda x: x[4], messages)))
df["msgId"] = np.array(list(map(lambda x: x[0], messages)))
df.to_csv(filename)
# df.to_csv('data.csv')
print(df)
self.progressSignal.emit(self.num)
def run(self):
if self.output_type == self.DOCX:
return
elif self.output_type == self.CSV:
# print("线程导出csv")
self.to_csv(self.ta_username, "path")

View File

@ -51,7 +51,11 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
def get_db(self): def get_db(self):
self.db_path, _ = QFileDialog.getOpenFileName(self, 'Open file', r'..', "Database files (*.db)") self.db_path, _ = QFileDialog.getOpenFileName(self, 'Open file', r'..', "Database files (*.db)")
if self.db_path: if self.db_path:
if self.db_path.isascii(): if ' ' in self.db_path:
self.label_db.setText('数据库未就绪')
QMessageBox.critical(self, "错误", "db文件路径请不要带有空格\n可以放在D:\\\\data 目录下")
self.db_path = ''
elif self.db_path.isascii():
self.label_db.setText('数据库已就绪') self.label_db.setText('数据库已就绪')
return self.db_path return self.db_path
else: else:

View File

@ -12,11 +12,13 @@ from PyQt5.QtGui import *
from PyQt5.QtWidgets import * from PyQt5.QtWidgets import *
from app import config from app import config
from app.DataBase import data
from app.Ui import mainwindow from app.Ui import mainwindow
from app.Ui.Icon import Icon from app.Ui.Icon import Icon
from app.Ui.chat import chat from app.Ui.chat import chat
from app.Ui.contact import contact from app.Ui.contact import contact
from app.components.prompt_bar import PromptBar from app.components.prompt_bar import PromptBar
from app.person import Me
class MainWinController(QMainWindow, mainwindow.Ui_MainWindow): class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
@ -29,7 +31,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
self.setWindowIcon(Icon.MainWindow_Icon) self.setWindowIcon(Icon.MainWindow_Icon)
self.setAttribute(Qt.WA_AttributeCount) self.setAttribute(Qt.WA_AttributeCount)
self.Me = Me(data.get_myinfo())
self.chatView = chat.ChatController(self.Me, parent=None) self.chatView = chat.ChatController(self.Me, parent=None)
self.lay = QHBoxLayout() self.lay = QHBoxLayout()
self.page_chat.setLayout(self.lay) self.page_chat.setLayout(self.lay)

View File

@ -5,7 +5,7 @@ from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap from PyQt5.QtGui import QPixmap
from app.DataBase import data from app.DataBase import data
from app.ui_pc.Icon import Icon from app.Ui.Icon import Icon
# from app.Ui.Icon import Icon # from app.Ui.Icon import Icon

View File

@ -2,7 +2,7 @@ from PyQt5.QtCore import *
from PyQt5.QtWidgets import * from PyQt5.QtWidgets import *
from app import person from app import person
from app.DataBase import output from app.DataBase.output import Output
from app.Ui.Icon import Icon from app.Ui.Icon import Icon
from .contactInfoUi import Ui_Form from .contactInfoUi import Ui_Form
from .userinfo import userinfo from .userinfo import userinfo
@ -97,10 +97,21 @@ class ContactInfo(QWidget, Ui_Form):
""" """
self.stackedWidget.setCurrentWidget(self.view_userinfo) self.stackedWidget.setCurrentWidget(self.view_userinfo)
if self.sender() == self.toDocxAct: if self.sender() == self.toDocxAct:
self.outputThread = output.Output(self.Me, self.contact.wxid) print('功能暂未实现')
QMessageBox.warning(self,
"别急别急",
"马上就实现该功能"
)
return
self.outputThread = Output(self.Me, self.contact.wxid)
elif self.sender() == self.toCSVAct: elif self.sender() == self.toCSVAct:
QMessageBox.warning(self,
"别急别急",
"马上就实现该功能"
)
print('开始导出csv') print('开始导出csv')
self.outputThread = output.Output(self.Me, self.contact.wxid, type_=output.Output.CSV) return
self.outputThread = Output(self.Me, self.contact.wxid, type_=Output.CSV)
print('导出csv') print('导出csv')
elif self.sender() == self.toHtmlAct: elif self.sender() == self.toHtmlAct:
print('功能暂未实现') print('功能暂未实现')