修复了已退群的人昵称无法找到导致的闪退问题

This commit is contained in:
STDquantum 2023-12-22 18:39:30 +08:00
parent 3568c5d6b3
commit 3a7049d08f
3 changed files with 45 additions and 5 deletions

View File

@ -549,6 +549,7 @@ class ChildThread(QThread):
if not os.path.exists(chatroom_avatar_path): if not os.path.exists(chatroom_avatar_path):
message[12].avatar.save(chatroom_avatar_path) message[12].avatar.save(chatroom_avatar_path)
except: except:
print(message)
pass pass
else: else:
self.contact.avatar.save(os.path.join(f"{origin_docx_path}/avatar/{self.contact.wxid}.png")) self.contact.avatar.save(os.path.join(f"{origin_docx_path}/avatar/{self.contact.wxid}.png"))

View File

@ -3,7 +3,7 @@ import threading
from app.DataBase import msg_db, micro_msg_db, misc_db from app.DataBase import msg_db, micro_msg_db, misc_db
from app.util.protocbuf.msg_pb2 import MessageBytesExtra from app.util.protocbuf.msg_pb2 import MessageBytesExtra
from app.util.protocbuf.roomdata_pb2 import ChatRoomData from app.util.protocbuf.roomdata_pb2 import ChatRoomData
from app.person import ContactPC, MePC from app.person import ContactPC, MePC, ContactDefault
lock = threading.Lock() lock = threading.Lock()
@ -107,12 +107,11 @@ class PackageMsg:
a[9]: msgSvrId, a[9]: msgSvrId,
a[10]: BytesExtra, a[10]: BytesExtra,
a[11]: CompressContent, a[11]: CompressContent,
a[12]: msg_sender, ContactPC类型这个才是群聊里的信息发送人不是群聊或者自己是发送者没有这个字段 a[12]: msg_sender, ContactPC ContactDefault 类型这个才是群聊里的信息发送人不是群聊或者自己是发送者没有这个字段
''' '''
updated_messages = [] # 用于存储修改后的消息列表 updated_messages = [] # 用于存储修改后的消息列表
messages = msg_db.get_messages(chatroom_wxid) messages = msg_db.get_messages(chatroom_wxid)
for row in messages: for row in messages:
message = list(row) message = list(row)
if message[4] == 1: # 自己发送的就没必要解析了 if message[4] == 1: # 自己发送的就没必要解析了
@ -120,6 +119,7 @@ class PackageMsg:
updated_messages.append(message) updated_messages.append(message)
continue continue
if message[10] is None: # BytesExtra是空的跳过 if message[10] is None: # BytesExtra是空的跳过
message.append(ContactDefault(wxid))
updated_messages.append(message) updated_messages.append(message)
continue continue
msgbytes = MessageBytesExtra() msgbytes = MessageBytesExtra()
@ -130,9 +130,14 @@ class PackageMsg:
continue continue
wxid = tmp.field2 wxid = tmp.field2
if wxid == "": # 系统消息里面 wxid 不存在 if wxid == "": # 系统消息里面 wxid 不存在
message.append(ContactDefault(wxid))
updated_messages.append(message) updated_messages.append(message)
continue continue
contact_info_list = micro_msg_db.get_contact_by_username(wxid) 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 = { contact_info = {
'UserName': contact_info_list[0], 'UserName': contact_info_list[0],
'Alias': contact_info_list[1], 'Alias': contact_info_list[1],
@ -145,7 +150,7 @@ class PackageMsg:
contact.smallHeadImgBLOG = misc_db.get_avatar_buffer(contact.wxid) contact.smallHeadImgBLOG = misc_db.get_avatar_buffer(contact.wxid)
contact.set_avatar(contact.smallHeadImgBLOG) contact.set_avatar(contact.smallHeadImgBLOG)
message.append(contact) message.append(contact)
updated_messages.append(tuple(message)) updated_messages.append(message)
return updated_messages return updated_messages
def get_chatroom_member_list(self, strtalker): def get_chatroom_member_list(self, strtalker):
@ -175,4 +180,4 @@ class PackageMsg:
if __name__ == "__main__": if __name__ == "__main__":
p = PackageMsg() p = PackageMsg()
print(p.get_package_message_by_wxid("44326600419@chatroom")) print(p.get_package_message_by_wxid("48615079469@chatroom"))

View File

@ -89,6 +89,40 @@ class ContactPC:
self.avatar.save(save_path) self.avatar.save(save_path)
print('保存头像', 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__': if __name__ == '__main__':
p1 = MePC() p1 = MePC()