From 3a7049d08f72ed7798aa7b1c7d09c85313894210 Mon Sep 17 00:00:00 2001 From: STDquantum <405720329@qq.com> Date: Fri, 22 Dec 2023 18:39:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=B7=B2=E9=80=80?= =?UTF-8?q?=E7=BE=A4=E7=9A=84=E4=BA=BA=E6=98=B5=E7=A7=B0=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=89=BE=E5=88=B0=E5=AF=BC=E8=87=B4=E7=9A=84=E9=97=AA=E9=80=80?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/DataBase/output_pc.py | 1 + app/DataBase/package_msg.py | 15 ++++++++++----- app/person.py | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/app/DataBase/output_pc.py b/app/DataBase/output_pc.py index 7229915..c34e8aa 100644 --- a/app/DataBase/output_pc.py +++ b/app/DataBase/output_pc.py @@ -549,6 +549,7 @@ class ChildThread(QThread): if not os.path.exists(chatroom_avatar_path): message[12].avatar.save(chatroom_avatar_path) except: + print(message) pass else: self.contact.avatar.save(os.path.join(f"{origin_docx_path}/avatar/{self.contact.wxid}.png")) diff --git a/app/DataBase/package_msg.py b/app/DataBase/package_msg.py index 1560063..138bb7d 100644 --- a/app/DataBase/package_msg.py +++ b/app/DataBase/package_msg.py @@ -3,7 +3,7 @@ import threading from app.DataBase import msg_db, micro_msg_db, misc_db from app.util.protocbuf.msg_pb2 import MessageBytesExtra from app.util.protocbuf.roomdata_pb2 import ChatRoomData -from app.person import ContactPC, MePC +from app.person import ContactPC, MePC, ContactDefault lock = threading.Lock() @@ -107,12 +107,11 @@ class PackageMsg: a[9]: msgSvrId, a[10]: BytesExtra, a[11]: CompressContent, - a[12]: msg_sender, (ContactPC类型,这个才是群聊里的信息发送人,不是群聊或者自己是发送者没有这个字段) + a[12]: msg_sender, (ContactPC 或 ContactDefault 类型,这个才是群聊里的信息发送人,不是群聊或者自己是发送者没有这个字段) ''' updated_messages = [] # 用于存储修改后的消息列表 messages = msg_db.get_messages(chatroom_wxid) - for row in messages: message = list(row) if message[4] == 1: # 自己发送的就没必要解析了 @@ -120,6 +119,7 @@ class PackageMsg: updated_messages.append(message) continue if message[10] is None: # BytesExtra是空的跳过 + message.append(ContactDefault(wxid)) updated_messages.append(message) continue msgbytes = MessageBytesExtra() @@ -130,9 +130,14 @@ class PackageMsg: continue wxid = tmp.field2 if wxid == "": # 系统消息里面 wxid 不存在 + message.append(ContactDefault(wxid)) updated_messages.append(message) continue contact_info_list = micro_msg_db.get_contact_by_username(wxid) + if contact_info_list is None: # 群聊中已退群的联系人不会保存在数据库里 + message.append(ContactDefault(wxid)) + updated_messages.append(message) + continue contact_info = { 'UserName': contact_info_list[0], 'Alias': contact_info_list[1], @@ -145,7 +150,7 @@ class PackageMsg: contact.smallHeadImgBLOG = misc_db.get_avatar_buffer(contact.wxid) contact.set_avatar(contact.smallHeadImgBLOG) message.append(contact) - updated_messages.append(tuple(message)) + updated_messages.append(message) return updated_messages def get_chatroom_member_list(self, strtalker): @@ -175,4 +180,4 @@ class PackageMsg: if __name__ == "__main__": p = PackageMsg() - print(p.get_package_message_by_wxid("44326600419@chatroom")) + print(p.get_package_message_by_wxid("48615079469@chatroom")) diff --git a/app/person.py b/app/person.py index e1a49d2..dcd64a5 100644 --- a/app/person.py +++ b/app/person.py @@ -89,6 +89,40 @@ class ContactPC: self.avatar.save(save_path) print('保存头像', save_path) +class ContactDefault: + def __init__(self, wxid=""): + self.avatar = QPixmap(Icon.Default_avatar_path) + self.avatar_path = ':/icons/icons/default_avatar.svg' + self.wxid = wxid + self.remark = wxid + self.alias = wxid + self.nickName = wxid + self.smallHeadImgUrl = "" + self.smallHeadImgBLOG = b'' + self.is_chatroom = False + + def set_avatar(self, img_bytes): + if not img_bytes: + self.avatar.load(Icon.Default_avatar_path) + return + if img_bytes[:4] == b'\x89PNG': + self.avatar.loadFromData(img_bytes, format='PNG') + else: + self.avatar.loadFromData(img_bytes, format='jfif') + self.avatar.scaled(60, 60, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) + + def save_avatar(self, path=None): + if not self.avatar: + return + if path: + save_path = path + else: + os.makedirs('./data/avatar', exist_ok=True) + save_path = os.path.join(f'data/avatar/', self.wxid + '.png') + self.avatar_path = save_path + self.avatar.save(save_path) + print('保存头像', save_path) + if __name__ == '__main__': p1 = MePC()