Merge pull request #15 from LC044/dev_zsk

Dev zsk
This commit is contained in:
SiYuan 2023-11-19 14:02:24 +08:00 committed by GitHub
commit 2f22d03ebd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 124 additions and 74 deletions

View File

@ -4,9 +4,10 @@
<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 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/DataBase/micro_msg.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/micro_msg.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/DataBase/misc.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/misc.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/ui_pc/mainview.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/mainview.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/readme.md" beforeDir="false" afterPath="$PROJECT_DIR$/readme.md" afterDir="false" /> <change beforePath="$PROJECT_DIR$/readme.md" beforeDir="false" afterPath="$PROJECT_DIR$/readme.md" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@ -273,34 +274,6 @@
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1672848140146</updated> <updated>1672848140146</updated>
</task> </task>
<task id="LOCAL-00027" summary="mainwindows文件修正">
<created>1684726034556</created>
<option name="number" value="00027" />
<option name="presentableId" value="LOCAL-00027" />
<option name="project" value="LOCAL" />
<updated>1684726034556</updated>
</task>
<task id="LOCAL-00028" summary="mainwindows文件修正">
<created>1684726338618</created>
<option name="number" value="00028" />
<option name="presentableId" value="LOCAL-00028" />
<option name="project" value="LOCAL" />
<updated>1684726338618</updated>
</task>
<task id="LOCAL-00029" summary="match语法说明">
<created>1692427491271</created>
<option name="number" value="00029" />
<option name="presentableId" value="LOCAL-00029" />
<option name="project" value="LOCAL" />
<updated>1692427491271</updated>
</task>
<task id="LOCAL-00030" summary="update readme">
<created>1698248435600</created>
<option name="number" value="00030" />
<option name="presentableId" value="LOCAL-00030" />
<option name="project" value="LOCAL" />
<updated>1698248435600</updated>
</task>
<task id="LOCAL-00031" summary="增加群二维码"> <task id="LOCAL-00031" summary="增加群二维码">
<created>1698248457797</created> <created>1698248457797</created>
<option name="number" value="00031" /> <option name="number" value="00031" />
@ -616,7 +589,35 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1700289701718</updated> <updated>1700289701718</updated>
</task> </task>
<option name="localTasksCounter" value="76" /> <task id="LOCAL-00076" summary="update readme">
<created>1700290543397</created>
<option name="number" value="00076" />
<option name="presentableId" value="LOCAL-00076" />
<option name="project" value="LOCAL" />
<updated>1700290543397</updated>
</task>
<task id="LOCAL-00077" summary="update readme">
<created>1700290549743</created>
<option name="number" value="00077" />
<option name="presentableId" value="LOCAL-00077" />
<option name="project" value="LOCAL" />
<updated>1700290549743</updated>
</task>
<task id="LOCAL-00078" summary="update readme">
<created>1700290555508</created>
<option name="number" value="00078" />
<option name="presentableId" value="LOCAL-00078" />
<option name="project" value="LOCAL" />
<updated>1700290555508</updated>
</task>
<task id="LOCAL-00079" summary="修复时间插入位置">
<created>1700309638496</created>
<option name="number" value="00079" />
<option name="presentableId" value="LOCAL-00079" />
<option name="project" value="LOCAL" />
<updated>1700309638496</updated>
</task>
<option name="localTasksCounter" value="80" />
<servers /> <servers />
</component> </component>
<component name="UnknownFeatures"> <component name="UnknownFeatures">
@ -652,7 +653,6 @@
</option> </option>
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="增加几个图标" />
<MESSAGE value="增加导航按钮效果" /> <MESSAGE value="增加导航按钮效果" />
<MESSAGE value="新增PC数据库解密" /> <MESSAGE value="新增PC数据库解密" />
<MESSAGE value="main首次加载解密界面" /> <MESSAGE value="main首次加载解密界面" />
@ -668,7 +668,6 @@
<MESSAGE value="修复情感分析数值显示过长的bug" /> <MESSAGE value="修复情感分析数值显示过长的bug" />
<MESSAGE value="新增聊天记录导出csv格式" /> <MESSAGE value="新增聊天记录导出csv格式" />
<MESSAGE value="导出所有数据库的聊天记录" /> <MESSAGE value="导出所有数据库的聊天记录" />
<MESSAGE value="update readme" />
<MESSAGE value="数据库加锁避免多线程访问报错" /> <MESSAGE value="数据库加锁避免多线程访问报错" />
<MESSAGE value="修复聊天气泡不能更改大小的bug" /> <MESSAGE value="修复聊天气泡不能更改大小的bug" />
<MESSAGE value="更改头像显示" /> <MESSAGE value="更改头像显示" />
@ -677,7 +676,9 @@
<MESSAGE value="聊天记录从后往前显示" /> <MESSAGE value="聊天记录从后往前显示" />
<MESSAGE value="聊天消息自适应" /> <MESSAGE value="聊天消息自适应" />
<MESSAGE value="新版本更新" /> <MESSAGE value="新版本更新" />
<option name="LAST_COMMIT_MESSAGE" value="新版本更新" /> <MESSAGE value="update readme" />
<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>

View File

@ -13,6 +13,16 @@ if os.path.exists(misc_path):
cursor = DB.cursor() cursor = DB.cursor()
def init_database():
global DB
global cursor
if not DB:
if os.path.exists(misc_path):
DB = sqlite3.connect(misc_path, check_same_thread=False)
# '''创建游标'''
cursor = DB.cursor()
def get_avatar_buffer(userName): def get_avatar_buffer(userName):
sql = ''' sql = '''
select smallHeadBuf select smallHeadBuf
@ -21,7 +31,12 @@ def get_avatar_buffer(userName):
''' '''
try: try:
lock.acquire(True) lock.acquire(True)
cursor.execute(sql, [userName]) try:
cursor.execute(sql, [userName])
except AttributeError:
init_database()
finally:
cursor.execute(sql, [userName])
result = cursor.fetchall() result = cursor.fetchall()
# print(result[0][0]) # print(result[0][0])
if result: if result:

View File

@ -10,9 +10,9 @@ class ChatInfo(QWidget):
def __init__(self, contact, parent=None): def __init__(self, contact, parent=None):
super().__init__(parent) super().__init__(parent)
self.last_timestamp = 0 self.last_timestamp = 0
self.last_str_time = ''
self.last_pos = 0 self.last_pos = 0
self.contact = contact self.contact = contact
self.init_ui() self.init_ui()
self.show_chats() self.show_chats()
@ -71,6 +71,7 @@ class ChatInfo(QWidget):
def is_5_min(self, timestamp): def is_5_min(self, timestamp):
if abs(timestamp - self.last_timestamp) > 300: if abs(timestamp - self.last_timestamp) > 300:
self.last_timestamp = timestamp self.last_timestamp = timestamp
return True return True
return False return False
@ -85,7 +86,8 @@ class ChatInfo(QWidget):
timestamp = message[5] timestamp = message[5]
if type_ == 1: if type_ == 1:
if self.is_5_min(timestamp): if self.is_5_min(timestamp):
time_message = Notice(str_time) time_message = Notice(self.last_str_time)
self.last_str_time = str_time
self.chat_window.add_message_item(time_message, 0) self.chat_window.add_message_item(time_message, 0)
bubble_message = BubbleMessage( bubble_message = BubbleMessage(
str_content, str_content,
@ -96,6 +98,7 @@ class ChatInfo(QWidget):
# print(str_content) # print(str_content)
# self.scroolAreaLayout.addWidget(bubble_message) # self.scroolAreaLayout.addWidget(bubble_message)
self.chat_window.add_message_item(bubble_message, 0) self.chat_window.add_message_item(bubble_message, 0)
except: except:
print(message) print(message)

View File

@ -8,6 +8,7 @@
@comment : 主窗口 @comment : 主窗口
""" """
import json import json
import os.path
from random import randint from random import randint
from PyQt5.QtCore import * from PyQt5.QtCore import *
@ -72,24 +73,31 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
self.setStyleSheet(Stylesheet) self.setStyleSheet(Stylesheet)
self.listWidget.clear() self.listWidget.clear()
self.resize(QSize(800, 600)) self.resize(QSize(800, 600))
# self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
self.action_desc.triggered.connect(self.about) self.action_desc.triggered.connect(self.about)
self.load_data() self.load_data()
self.init_ui() self.init_ui()
self.load_num = 0 self.load_num = 0
def load_data(self): def load_data(self):
with open('./app/data/info.json', 'r', encoding='utf-8') as f: if os.path.exists('./app/data/info.json'):
dic = json.loads(f.read()) with open('./app/data/info.json', 'r', encoding='utf-8') as f:
wxid = dic.get('wxid') dic = json.loads(f.read())
if wxid: wxid = dic.get('wxid')
me = MePC() if wxid:
self.set_my_info(wxid) me = MePC()
self.set_my_info(wxid)
else:
QMessageBox.information(
self,
'温馨提示',
'点击 工具->获取信息 重启后可以显示本人头像哦'
)
def init_ui(self): def init_ui(self):
# self.movie = QMovie("./app/data/loading.gif") # self.movie = QMovie("./app/data/loading.gif")
self.label = QLabel(self) self.label = QLabel(self)
self.label.setGeometry(0, 0, self.width(), self.height()) self.label.setGeometry(0, 0, self.width(), self.height())
self.label.setVisible(False)
# self.label.setMovie(self.movie) # self.label.setMovie(self.movie)
# self.movie.start() # self.movie.start()
self.listWidget.currentRowChanged.connect(self.setCurrentIndex) self.listWidget.currentRowChanged.connect(self.setCurrentIndex)
@ -105,6 +113,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
self.listWidget.setCurrentRow(0) self.listWidget.setCurrentRow(0)
self.stackedWidget.setCurrentIndex(0) self.stackedWidget.setCurrentIndex(0)
chat_window = ChatWindow() chat_window = ChatWindow()
# chat_window = QWidget()
self.stackedWidget.addWidget(chat_window) self.stackedWidget.addWidget(chat_window)
contact_window = ContactWindow() contact_window = ContactWindow()
self.stackedWidget.addWidget(contact_window) self.stackedWidget.addWidget(contact_window)
@ -117,7 +126,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
self.stackedWidget.addWidget(label) self.stackedWidget.addWidget(label)
tool_window.load_finish_signal.connect(self.loading) tool_window.load_finish_signal.connect(self.loading)
contact_window.load_finish_signal.connect(self.loading) contact_window.load_finish_signal.connect(self.loading)
chat_window.load_finish_signal.connect(self.loading) # chat_window.load_finish_signal.connect(self.loading)
# self.load_window_thread = LoadWindowThread(self.stackedWidget) # self.load_window_thread = LoadWindowThread(self.stackedWidget)
# self.load_window_thread.okSignal.connect(self.stop_loading) # self.load_window_thread.okSignal.connect(self.stop_loading)
# self.load_window_thread.start() # self.load_window_thread.start()
@ -126,6 +135,8 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
self.stackedWidget.setCurrentIndex(row) self.stackedWidget.setCurrentIndex(row)
if row == 2: if row == 2:
self.stackedWidget.currentWidget().show_contacts() self.stackedWidget.currentWidget().show_contacts()
if row == 1:
self.stackedWidget.currentWidget().show_chats()
def setWindow(self, window): def setWindow(self, window):
try: try:
@ -136,7 +147,10 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
def set_my_info(self, wxid): def set_my_info(self, wxid):
self.avatar = QPixmap() self.avatar = QPixmap()
img_bytes = misc.get_avatar_buffer(wxid) try:
img_bytes = misc.get_avatar_buffer(wxid)
except AttributeError:
return
if img_bytes[:4] == b'\x89PNG': if img_bytes[:4] == b'\x89PNG':
self.avatar.loadFromData(img_bytes, format='PNG') self.avatar.loadFromData(img_bytes, format='PNG')
else: else:
@ -157,6 +171,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
def loading(self, a0): def loading(self, a0):
self.load_num += 1 self.load_num += 1
self.label.setVisible(False)
# print('加载一个了') # print('加载一个了')
if self.load_num == 2: if self.load_num == 2:
# print('ok了') # print('ok了')

View File

@ -16,30 +16,31 @@ class Ui_MainWindow(object):
MainWindow.setObjectName("MainWindow") MainWindow.setObjectName("MainWindow")
MainWindow.resize(1280, 779) MainWindow.resize(1280, 779)
MainWindow.setStyleSheet("\n" MainWindow.setStyleSheet("\n"
"/*去掉item虚线边框*/\n" " /*去掉item虚线边框*/\n"
"QListWidget, QListView, QTreeWidget, QTreeView {\n" " QListWidget, QListView, QTreeWidget, QTreeView {\n"
" outline: 0px;\n" " outline: 0px;\n"
"}\n" " }\n"
"/*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/\n" " /*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/\n"
"QListWidget {\n" " QListWidget {\n"
" min-width: 120px;\n" " min-width: 120px;\n"
" max-width: 120px;\n" " max-width: 120px;\n"
" color: black;\n" " color: black;\n"
" background: white;\n" " background: white;\n"
" border:none;\n" " border:none;\n"
"}\n" " }\n"
"QListWidget::item{\n" " QListWidget::item{\n"
" height:80;\n" " height:80;\n"
"}\n" " }\n"
"/*被选中时的背景颜色和左边框颜色*/\n" " /*被选中时的背景颜色和左边框颜色*/\n"
"QListWidget::item:selected {\n" " QListWidget::item:selected {\n"
" background: rgb(204, 204, 204);\n" " background: rgb(204, 204, 204);\n"
" border-left: 4px solid rgb(9, 187, 7);\n" " border-left: 4px solid rgb(9, 187, 7);\n"
"}\n" " }\n"
"/*鼠标悬停颜色*/\n" " /*鼠标悬停颜色*/\n"
"HistoryPanel::item:hover {\n" " HistoryPanel::item:hover {\n"
" background: rgb(52, 52, 52);\n" " background: rgb(52, 52, 52);\n"
"}") " }\n"
" ")
self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget") self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
@ -58,6 +59,11 @@ class Ui_MainWindow(object):
self.myavatar.setObjectName("myavatar") self.myavatar.setObjectName("myavatar")
self.listWidget = QtWidgets.QListWidget(self.frame_info) self.listWidget = QtWidgets.QListWidget(self.frame_info)
self.listWidget.setGeometry(QtCore.QRect(0, 230, 120, 331)) self.listWidget.setGeometry(QtCore.QRect(0, 230, 120, 331))
self.listWidget.setMinimumSize(QtCore.QSize(120, 0))
self.listWidget.setMaximumSize(QtCore.QSize(120, 16777215))
self.listWidget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.listWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.listWidget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
self.listWidget.setObjectName("listWidget") self.listWidget.setObjectName("listWidget")
item = QtWidgets.QListWidgetItem() item = QtWidgets.QListWidgetItem()
self.listWidget.addItem(item) self.listWidget.addItem(item)
@ -93,6 +99,8 @@ class Ui_MainWindow(object):
self.menu_2.setObjectName("menu_2") self.menu_2.setObjectName("menu_2")
self.menu_about = QtWidgets.QMenu(self.menubar) self.menu_about = QtWidgets.QMenu(self.menubar)
self.menu_about.setObjectName("menu_about") self.menu_about.setObjectName("menu_about")
self.menu_3 = QtWidgets.QMenu(self.menubar)
self.menu_3.setObjectName("menu_3")
MainWindow.setMenuBar(self.menubar) MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar") self.statusbar.setObjectName("statusbar")
@ -118,6 +126,7 @@ class Ui_MainWindow(object):
self.menubar.addAction(self.menu.menuAction()) self.menubar.addAction(self.menu.menuAction())
self.menubar.addAction(self.menu_2.menuAction()) self.menubar.addAction(self.menu_2.menuAction())
self.menubar.addAction(self.menu_about.menuAction()) self.menubar.addAction(self.menu_about.menuAction())
self.menubar.addAction(self.menu_3.menuAction())
self.retranslateUi(MainWindow) self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow)
@ -143,6 +152,7 @@ class Ui_MainWindow(object):
self.menu.setTitle(_translate("MainWindow", "编辑")) self.menu.setTitle(_translate("MainWindow", "编辑"))
self.menu_2.setTitle(_translate("MainWindow", "帮助")) self.menu_2.setTitle(_translate("MainWindow", "帮助"))
self.menu_about.setTitle(_translate("MainWindow", "关于")) self.menu_about.setTitle(_translate("MainWindow", "关于"))
self.menu_3.setTitle(_translate("MainWindow", "不显示或者显示异常请重启应用"))
self.action_3.setText(_translate("MainWindow", "保存")) self.action_3.setText(_translate("MainWindow", "保存"))
self.action_4.setText(_translate("MainWindow", "退出")) self.action_4.setText(_translate("MainWindow", "退出"))
self.action.setText(_translate("MainWindow", "关于")) self.action.setText(_translate("MainWindow", "关于"))

View File

@ -99,19 +99,19 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>230</y> <y>230</y>
<width>80</width> <width>120</width>
<height>331</height> <height>331</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>80</width> <width>120</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>80</width> <width>120</width>
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
@ -205,10 +205,16 @@
</property> </property>
<addaction name="action_desc"/> <addaction name="action_desc"/>
</widget> </widget>
<widget class="QMenu" name="menu_3">
<property name="title">
<string>不显示或者显示异常请重启应用</string>
</property>
</widget>
<addaction name="menu_F"/> <addaction name="menu_F"/>
<addaction name="menu"/> <addaction name="menu"/>
<addaction name="menu_2"/> <addaction name="menu_2"/>
<addaction name="menu_about"/> <addaction name="menu_about"/>
<addaction name="menu_3"/>
</widget> </widget>
<widget class="QStatusBar" name="statusbar"/> <widget class="QStatusBar" name="statusbar"/>
<action name="action_3"> <action name="action_3">

View File

@ -34,7 +34,7 @@
大家有任何想法、建议或bug可以群里反馈给我 大家有任何想法、建议或bug可以群里反馈给我
<img src="doc/images/qq.jpg" height=480/> [//]: # (<img src="doc/images/qq.jpg" height=480/>)
## 效果 ## 效果