diff --git a/app/DataBase/micro_msg.py b/app/DataBase/micro_msg.py index a22fa75..2d15139 100644 --- a/app/DataBase/micro_msg.py +++ b/app/DataBase/micro_msg.py @@ -67,11 +67,12 @@ class MicroMsg: return None try: lock.acquire(True) - sql = '''SELECT UserName, Alias, Type, Remark, NickName, PYInitial, RemarkPYInitial, ContactHeadImgUrl.smallHeadImgUrl, ContactHeadImgUrl.bigHeadImgUrl - FROM Contact - INNER JOIN ContactHeadImgUrl ON Contact.UserName = ContactHeadImgUrl.usrName - WHERE UserName = ? - ''' + sql = ''' + SELECT UserName, Alias, Type, Remark, NickName, PYInitial, RemarkPYInitial, ContactHeadImgUrl.smallHeadImgUrl, ContactHeadImgUrl.bigHeadImgUrl + FROM Contact + INNER JOIN ContactHeadImgUrl ON Contact.UserName = ContactHeadImgUrl.usrName + WHERE UserName = ? + ''' self.cursor.execute(sql, [username]) result = self.cursor.fetchone() finally: diff --git a/app/DataBase/msg.py b/app/DataBase/msg.py index 99a5e50..70b3b99 100644 --- a/app/DataBase/msg.py +++ b/app/DataBase/msg.py @@ -4,9 +4,9 @@ import sqlite3 import threading import traceback - from app.log import logger from app.util.compress_content import parser_reply +from app.util.protocbuf.msg_pb2 import MessageBytesExtra db_path = "./app/Database/Msg/MSG.db" lock = threading.Lock() @@ -53,8 +53,30 @@ class Msg: if lock.locked(): lock.release() + def add_sender(self, messages): + """ + @param messages: + @return: + """ + new_messages = [] + for message in messages: + is_sender = message[4] + wxid = '' + if is_sender: + pass + else: + msgbytes = MessageBytesExtra() + msgbytes.ParseFromString(message[10]) + for tmp in msgbytes.message2: + if tmp.field1 != 1: + continue + wxid = tmp.field2 + new_message = (*message, wxid) + new_messages.append(new_message) + return new_messages + def get_messages(self, username_): - ''' + """ return list a[0]: localId, a[1]: talkerId, (和strtalker对应的,不是群聊信息发送人) @@ -68,7 +90,7 @@ class Msg: a[9]: msgSvrId, a[10]: BytesExtra, a[11]: CompressContent, - ''' + """ if not self.open_flag: return None sql = ''' @@ -83,8 +105,9 @@ class Msg: result = self.cursor.fetchall() finally: lock.release() - result.sort(key=lambda x: x[5]) return result + # result.sort(key=lambda x: x[5]) + # return self.add_sender(result) def get_messages_all(self): sql = ''' @@ -458,7 +481,7 @@ class Msg: return None try: lock.acquire(True) - self.cursor.execute(sql, [username_,year_] if year_ != "all" else [username_]) + self.cursor.execute(sql, [username_, year_] if year_ != "all" else [username_]) result = self.cursor.fetchone() except sqlite3.DatabaseError: logger.error(f'{traceback.format_exc()}\n数据库损坏请删除msg文件夹重试') @@ -604,6 +627,6 @@ if __name__ == '__main__': db_path = "./app/database/Msg/MSG.db" msg = Msg() msg.init_database() - print(msg.get_latest_time_of_message('wxid_0o18ef858vnu22', year_='2023')) - print(msg.get_messages_number('wxid_0o18ef858vnu22', year_='2023')) - print(msg.get_messages_by_type('wxid_0o18ef858vnu22',34)) + wxid = 'wxid_0o18ef858vnu22' + wxid = '24521163022@chatroom' + print(msg.get_messages(wxid)[0]) diff --git a/app/DataBase/output_pc.py b/app/DataBase/output_pc.py index 5568ad4..cd15ee5 100644 --- a/app/DataBase/output_pc.py +++ b/app/DataBase/output_pc.py @@ -18,7 +18,7 @@ from ..person import MePC from ..util import path import shutil from ..util.compress_content import parser_reply -from ..util.emoji import get_emoji_url +from ..util.emoji import get_emoji_url from ..util.image import get_image_path, get_image, get_image_abs_path from ..util.file import get_file import docx @@ -28,6 +28,7 @@ from docx.enum.text import WD_COLOR_INDEX, WD_PARAGRAPH_ALIGNMENT os.makedirs('./data/聊天记录', exist_ok=True) + def set_global_font(doc, font_name): # 创建一个新样式 style = doc.styles['Normal'] @@ -38,6 +39,8 @@ def set_global_font(doc, font_name): for paragraph in doc.paragraphs: for run in paragraph.runs: run.font.name = font_name + + def makedirs(path): os.makedirs(path, exist_ok=True) os.makedirs(os.path.join(path, 'image'), exist_ok=True) @@ -232,12 +235,31 @@ class ChildThread(QThread): self.msg_id = 0 self.output_type = type_ - def is_5_min(self, timestamp): + def is_5_min(self, timestamp) -> bool: if abs(timestamp - self.last_timestamp) > 300: self.last_timestamp = timestamp return True return False + def get_avatar_path(self, is_send, message,is_absolute_path=False) -> str: + if self.contact.is_chatroom: + avatar = message[12].smallHeadImgUrl + else: + avatar = f"{MePC().wxid+'.png' if is_send else self.contact.smallHeadImgUrl}" + if is_absolute_path: + avatar = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}"+avatar + return avatar + + def get_display_name(self, is_send, message) -> str: + if self.contact.is_chatroom: + if is_send: + display_name = MePC().name + else: + display_name = message[12].remark + else: + display_name = MePC().name if is_send else self.contact.remark + return escape_js_and_html(display_name) + def text(self, doc, message): type_ = message[2] str_content = message[7] @@ -245,34 +267,21 @@ class ChildThread(QThread): is_send = message[4] timestamp = message[5] is_chatroom = 1 if self.contact.is_chatroom else 0 - if is_chatroom: - avatar = f"./avatar/{message[12].wxid}.png" - else: - avatar = f"./avatar/{MePC().wxid if is_send else self.contact.wxid}.png" - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark - displayname = escape_js_and_html(displayname) + + display_name = self.get_display_name(is_send,message) if self.output_type == Output.HTML: + avatar = self.get_avatar_path(is_send, message) str_content = escape_js_and_html(str_content) doc.write( - f'''{{ type:{1}, text: '{str_content}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:{1}, text: '{str_content}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) elif self.output_type == Output.TXT: - name = displayname + name = display_name doc.write( f'''{str_time} {name}\n{str_content}\n\n''' ) elif self.output_type == Output.DOCX: - origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" - if is_chatroom: - avatar = f"{origin_docx_path}/avatar/{message[12].wxid}.png" - else: - avatar = f"{origin_docx_path}/avatar/{MePC().wxid if is_send else self.contact.wxid}.png" + avatar = self.get_avatar_path(is_send,message,True) content_cell = self.create_table(doc, is_send, avatar) content_cell.paragraphs[0].add_run(str_content) content_cell.paragraphs[0].font_size = shared.Inches(0.5) @@ -290,18 +299,8 @@ class ChildThread(QThread): BytesExtra = message[10] timestamp = message[5] is_chatroom = 1 if self.contact.is_chatroom else 0 - if is_chatroom: - avatar = f"./avatar/{message[12].wxid}.png" - else: - avatar = f"./avatar/{MePC().wxid if is_send else self.contact.wxid}.png" - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark - displayname = escape_js_and_html(displayname) + avatar = self.get_avatar_path(is_send, message) + display_name = self.get_display_name(is_send,message) if self.output_type == Output.HTML: str_content = escape_js_and_html(str_content) image_path = hard_link_db.get_image(str_content, BytesExtra, thumb=False) @@ -312,20 +311,15 @@ class ChildThread(QThread): image_path = image_thumb_path image_path = get_image_path(image_path, base_path=f'/data/聊天记录/{self.contact.remark}/image') doc.write( - f'''{{ type:{type_}, text: '{image_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:{type_}, text: '{image_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) elif self.output_type == Output.TXT: - name = displayname doc.write( - f'''{str_time} {name}\n[图片]\n\n''' + f'''{str_time} {display_name}\n[图片]\n\n''' ) elif self.output_type == Output.DOCX: - origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" - if is_chatroom: - avatar = f"{origin_docx_path}/avatar/{message[12].wxid}.png" - else: - avatar = f"{origin_docx_path}/avatar/{MePC().wxid if is_send else self.contact.wxid}.png" - content = self.create_table(doc, is_send,avatar) + avatar = self.get_avatar_path(is_send,message,True) + content = self.create_table(doc, is_send, avatar) run = content.paragraphs[0].add_run() str_content = escape_js_and_html(str_content) image_path = hard_link_db.get_image(str_content, BytesExtra, thumb=True) @@ -335,7 +329,6 @@ class ChildThread(QThread): return image_path = image_thumb_path image_path = get_image_abs_path(image_path, base_path=f'/data/聊天记录/{self.contact.remark}/image') - try: run.add_picture(image_path, height=shared.Inches(2)) doc.add_paragraph() @@ -350,18 +343,8 @@ class ChildThread(QThread): msgSvrId = message[9] timestamp = message[5] is_chatroom = 1 if self.contact.is_chatroom else 0 - if is_chatroom: - avatar = f"./avatar/{message[12].wxid}.png" - else: - avatar = f"./avatar/{MePC().wxid if is_send else self.contact.wxid}.png" - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark - displayname = escape_js_and_html(displayname) + avatar = self.get_avatar_path(is_send, message) + display_name = self.get_display_name(is_send, message) if self.output_type == Output.HTML: try: audio_path = media_msg_db.get_audio_path(msgSvrId, output_path=origin_docx_path + "/voice") @@ -371,49 +354,40 @@ class ChildThread(QThread): logger.error(traceback.format_exc()) return doc.write( - f'''{{ type:34, text:'{audio_path}',is_send:{is_send},avatar_path:'{avatar}',voice_to_text:'{voice_to_text}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:34, text:'{audio_path}',is_send:{is_send},avatar_path:'{avatar}',voice_to_text:'{voice_to_text}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) - if self.output_type == Output.TXT: - name = displayname + elif self.output_type == Output.TXT: doc.write( - f'''{str_time} {name}\n[语音]\n\n''' + f'''{str_time} {display_name}\n[语音]\n\n''' ) - + elif self.output_type == Output.DOCX: + avatar = self.get_avatar_path(is_send,message,True) + content_cell = self.create_table(doc, is_send, avatar) + content_cell.paragraphs[0].add_run('【表情包】') + content_cell.paragraphs[0].font_size = shared.Inches(0.5) + if is_send: + p = content_cell.paragraphs[0] + p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT + doc.add_paragraph() def emoji(self, doc, message): - origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" str_content = message[7] str_time = message[8] is_send = message[4] timestamp = message[5] is_chatroom = 1 if self.contact.is_chatroom else 0 - if is_chatroom: - avatar = f"./avatar/{message[12].wxid}.png" - else: - avatar = f"./avatar/{MePC().wxid if is_send else self.contact.wxid}.png" - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark - displayname = escape_js_and_html(displayname) + avatar = self.get_avatar_path(is_send, message) + display_name = self.get_display_name(is_send, message) if self.output_type == Output.HTML: emoji_path = get_emoji_url(str_content, thumb=True) doc.write( - f'''{{ type:{3}, text: '{emoji_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:{3}, text: '{emoji_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) elif self.output_type == Output.TXT: - name = displayname doc.write( - f'''{str_time} {name}\n[表情包]\n\n''' + f'''{str_time} {display_name}\n[表情包]\n\n''' ) elif self.output_type == Output.DOCX: - origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" - if is_chatroom: - avatar = f"{origin_docx_path}/avatar/{message[12].wxid}.png" - else: - avatar = f"{origin_docx_path}/avatar/{MePC().wxid if is_send else self.contact.wxid}.png" + avatar = self.get_avatar_path(is_send,message,True) content_cell = self.create_table(doc, is_send, avatar) content_cell.paragraphs[0].add_run('【表情包】') content_cell.paragraphs[0].font_size = shared.Inches(0.5) @@ -422,7 +396,6 @@ class ChildThread(QThread): p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT doc.add_paragraph() - def file(self, doc, message): origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" bytesExtra = message[10] @@ -430,18 +403,8 @@ class ChildThread(QThread): is_send = message[4] timestamp = message[5] is_chatroom = 1 if self.contact.is_chatroom else 0 - if is_chatroom: - avatar = f"./avatar/{message[12].wxid}.png" - else: - avatar = f"./avatar/{MePC().wxid if is_send else self.contact.wxid}.png" - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark - displayname = escape_js_and_html(displayname) + avatar = self.get_avatar_path(is_send, message) + display_name = self.get_display_name(is_send, message) if self.output_type == Output.HTML: link = get_file(bytesExtra, thumb=True, output_path=origin_docx_path + '/file') file_name = '' @@ -450,25 +413,14 @@ class ChildThread(QThread): file_name = os.path.basename(link) link = './file/' + file_name doc.write( - f'''{{ type:49, text: '{file_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}',link: '{link}',sub_type:6,file_name: '{file_name}'}},''' + f'''{{ type:49, text: '{file_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}',link: '{link}',sub_type:6,file_name: '{file_name}'}},''' ) elif self.output_type == Output.TXT: - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark doc.write( - f'''{str_time} {displayname}\n[文件]\n\n''' + f'''{str_time} {display_name}\n[文件]\n\n''' ) elif self.output_type == Output.DOCX: - origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" - if is_chatroom: - avatar = f"{origin_docx_path}/avatar/{message[12].wxid}.png" - else: - avatar = f"{origin_docx_path}/avatar/{MePC().wxid if is_send else self.contact.wxid}.png" + avatar = self.get_avatar_path(is_send,message,True) content_cell = self.create_table(doc, is_send, avatar) content_cell.paragraphs[0].add_run('【文件】') content_cell.paragraphs[0].font_size = shared.Inches(0.5) @@ -490,47 +442,31 @@ class ChildThread(QThread): refer_msg = content.get('refer') timestamp = message[5] is_chatroom = 1 if self.contact.is_chatroom else 0 - if is_chatroom: - avatar = f"./avatar/{message[12].wxid}.png" - else: - avatar = f"./avatar/{MePC().wxid if is_send else self.contact.wxid}.png" - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark - displayname = escape_js_and_html(displayname) + avatar = self.get_avatar_path(is_send, message) + display_name = self.get_display_name(is_send, message) if self.output_type == Output.HTML: contentText = escape_js_and_html(content.get('title')) if refer_msg: referText = f"{escape_js_and_html(refer_msg.get('displayname'))}:{escape_js_and_html(refer_msg.get('content'))}" doc.write( - f'''{{ type:49, text: '{contentText}',is_send:{is_send},sub_type:{content.get('type')},refer_text: '{referText}',avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:49, text: '{contentText}',is_send:{is_send},sub_type:{content.get('type')},refer_text: '{referText}',avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) else: doc.write( - f'''{{ type:49, text: '{contentText}',is_send:{is_send},sub_type:{content.get('type')},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:49, text: '{contentText}',is_send:{is_send},sub_type:{content.get('type')},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) elif self.output_type == Output.TXT: - name = displayname if refer_msg: doc.write( - f'''{str_time} {name}\n{content.get('title')}\n引用:{refer_msg.get('displayname')}:{refer_msg.get('content')}\n\n''' + f'''{str_time} {display_name}\n{content.get('title')}\n引用:{refer_msg.get('displayname')}:{refer_msg.get('content')}\n\n''' ) else: doc.write( - f'''{str_time} {name}\n{content.get('title')}\n引用:未知\n\n''' + f'''{str_time} {display_name}\n{content.get('title')}\n引用:未知\n\n''' ) elif self.output_type == Output.DOCX: - origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" - if is_chatroom: - avatar = f"{origin_docx_path}/avatar/{message[12].wxid}.png" - else: - avatar = f"{origin_docx_path}/avatar/{MePC().wxid if is_send else self.contact.wxid}.png" + avatar = self.get_avatar_path(is_send,message,True) content_cell = self.create_table(doc, is_send, avatar) - content_cell.paragraphs[0].add_run(content.get('title')) content_cell.paragraphs[0].font_size = shared.Inches(0.5) reply_p = content_cell.add_paragraph() @@ -546,19 +482,14 @@ class ChildThread(QThread): p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT reply_p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT doc.add_paragraph() + def system_msg(self, doc, message): str_content = message[7] is_send = message[4] str_time = message[8] timestamp = message[5] is_chatroom = 1 if self.contact.is_chatroom else 0 - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark + str_content = str_content.replace('重新编辑]]>', "") res = findall('({0,1}(img|revo|_wc_cus|a).*?>)', str_content) @@ -570,9 +501,8 @@ class ChildThread(QThread): f'''{{ type:0, text: '{str_content}',is_send:{is_send},avatar_path:'',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:''}},''' ) elif self.output_type == Output.TXT: - doc.write( - f'''{str_time} {displayname}\n{str_content}\n\n''' + f'''{str_time} {str_content}\n\n''' ) elif self.output_type == Output.DOCX: doc.add_paragraph(str_content).alignment = WD_PARAGRAPH_ALIGNMENT.CENTER @@ -586,18 +516,8 @@ class ChildThread(QThread): BytesExtra = message[10] timestamp = message[5] is_chatroom = 1 if self.contact.is_chatroom else 0 - if is_chatroom: - avatar = f"./avatar/{message[12].wxid}.png" - else: - avatar = f"./avatar/{MePC().wxid if is_send else self.contact.wxid}.png" - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark - displayname = escape_js_and_html(displayname) + avatar = self.get_avatar_path(is_send, message) + display_name = self.get_display_name(is_send, message) if self.output_type == Output.HTML: video_path = hard_link_db.get_video(str_content, BytesExtra, thumb=False) image_path = hard_link_db.get_video(str_content, BytesExtra, thumb=True) @@ -608,11 +528,11 @@ class ChildThread(QThread): print(origin_docx_path + image_path[1:]) os.utime(origin_docx_path + image_path[1:], (timestamp, timestamp)) doc.write( - f'''{{ type:3, text: '{image_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:3, text: '{image_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) except: doc.write( - f'''{{ type:1, text: '视频丢失',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:1, text: '视频丢失',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) return if video_path is None and image_path is None: @@ -625,25 +545,14 @@ class ChildThread(QThread): os.utime(new_path, (timestamp, timestamp)) video_path = f'./video/{os.path.basename(video_path)}' doc.write( - f'''{{ type:{type_}, text: '{video_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{displayname}'}},''' + f'''{{ type:{type_}, text: '{video_path}',is_send:{is_send},avatar_path:'{avatar}',timestamp:{timestamp},is_chatroom:{is_chatroom},displayname:'{display_name}'}},''' ) elif self.output_type == Output.TXT: - if is_chatroom: - if is_send: - displayname = MePC().name - else: - displayname = message[12].remark - else: - displayname = MePC().name if is_send else self.contact.remark doc.write( - f'''{str_time} {displayname}\n[视频]\n\n''' + f'''{str_time} {display_name}\n[视频]\n\n''' ) elif self.output_type == Output.DOCX: - origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" - if is_chatroom: - avatar = f"{origin_docx_path}/avatar/{message[12].wxid}.png" - else: - avatar = f"{origin_docx_path}/avatar/{MePC().wxid if is_send else self.contact.wxid}.png" + avatar = self.get_avatar_path(is_send,message,True) content_cell = self.create_table(doc, is_send, avatar) content_cell.paragraphs[0].add_run('【视频】') content_cell.paragraphs[0].font_size = shared.Inches(0.5) @@ -651,6 +560,7 @@ class ChildThread(QThread): p = content_cell.paragraphs[0] p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT doc.add_paragraph() + def create_table(self, doc, is_send, avatar_path): ''' #! 创建一个1*2表格 @@ -686,11 +596,14 @@ class ChildThread(QThread): origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" os.makedirs(origin_docx_path, exist_ok=True) filename = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}/{self.contact.remark}_utf8.csv" - # columns = ["用户名", "消息内容", "发送时间", "发送状态", "消息类型", "isSend", "msgId"] columns = ['localId', 'TalkerId', 'Type', 'SubType', 'IsSender', 'CreateTime', 'Status', 'StrContent', - 'StrTime'] - messages = msg_db.get_messages(self.contact.wxid) + 'StrTime', 'Remark', 'NickName', 'Sender'] + if self.contact.is_chatroom: + packagemsg = PackageMsg() + messages = packagemsg.get_package_message_by_wxid(self.contact.wxid) + else: + messages = msg_db.get_messages(self.contact.wxid) # 写入CSV文件 with open(filename, mode='w', newline='', encoding='utf-8-sig') as file: writer = csv.writer(file) @@ -699,6 +612,7 @@ class ChildThread(QThread): writer.writerows(messages) self.okSignal.emit('ok') + def to_html_(self): origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}" makedirs(origin_docx_path) @@ -719,20 +633,6 @@ class ChildThread(QThread): html_head, html_end = content.split('/*注意看这是分割线*/') f = open(filename, 'w', encoding='utf-8') f.write(html_head.replace("