diff --git a/app/DataBase/output_pc.py b/app/DataBase/output_pc.py
index 180663b..89bd7c2 100644
--- a/app/DataBase/output_pc.py
+++ b/app/DataBase/output_pc.py
@@ -18,6 +18,7 @@ import shutil
from ..util.compress_content import parser_reply
from ..util.emoji import get_emoji, get_emoji_path, get_emoji_url
from ..util.image import get_image_path, get_image
+from ..util.file import get_file
os.makedirs('./data/聊天记录', exist_ok=True)
@@ -360,6 +361,37 @@ class ChildThread(QThread):
def wx_file(self, doc, isSend, content, status):
return
+ def file(self, doc, message):
+ origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}"
+ bytesExtra = message[10]
+ 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)
+ if self.output_type == Output.HTML:
+ link = get_file(bytesExtra, thumb=True, output_path=origin_docx_path + '/file')
+ file_name = ''
+ shutil.copy(f"{os.path.abspath('.')}/app/resources/icons/file.png", origin_docx_path + '/file/file.png')
+ file_path = './file/file.png'
+ if link != "":
+ 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}'}},'''
+ )
+
def retract_message(self, doc, isSend, content, status):
return
@@ -570,6 +602,8 @@ class ChildThread(QThread):
self.system_msg(f, message)
elif type_ == 49 and sub_type == 57 and self.message_types.get(1):
self.refermsg(f, message)
+ elif type_ == 49 and sub_type == 6 and self.message_types.get(4906):
+ self.file(f, message)
f.write(html_end)
f.close()
self.okSignal.emit(1)
diff --git a/app/resources/icons/file.png b/app/resources/icons/file.png
new file mode 100644
index 0000000..565cf36
Binary files /dev/null and b/app/resources/icons/file.png differ
diff --git a/app/resources/template.html b/app/resources/template.html
index 931b25c..5f37bb8 100644
--- a/app/resources/template.html
+++ b/app/resources/template.html
@@ -161,7 +161,7 @@ body{
color: darkgray;
}
-.chat-image img{
+.chat-image img,.chat-file img{
margin-right: 18px;
margin-left: 18px;
max-width: 300px;
@@ -184,6 +184,29 @@ audio{
margin-left: 9px;
margin-right: 9px;
}
+
+.chat-file {
+ width: 300px;
+ background-color: #fff;
+ margin-right: 20px;
+}
+.chat-file a ,.chat-file div{
+ display: flex;
+ color: #000;
+ outline: none;
+ text-decoration: none;
+ margin: 0 20px 20px 20px;
+}
+.chat-file div{
+ margin: 20px;
+}
+.chat-file a span ,.chat-file div span{
+ /* flex-grow: 1; */
+ width: 200px;
+}
+.chat-file a img,.chat-file div img{
+ width: 100px;
+}
.input-area{
border-top:0.5px solid #e0e0e0;
height: 150px;
@@ -361,9 +384,9 @@ input {
// 计算当前页应该显示的元素范围
const startIndex = (page - 1) * itemsPerPage;
const endIndex = startIndex + itemsPerPage;
-
+
function replaceEmoji(text){
-
+
// 定义替换规则,可以根据需要添加更多规则
var replacementRules = [
{ pattern: /\[微笑\]/g, replacement: '' },
@@ -534,8 +557,19 @@ input {
messageAudioTag.innerHTML = ``;
return messageAudioTag;
}
+ function messageFileBox(message) {
+ const messageFileTag = document.createElement('div');
+ messageFileTag.className = `chat-file`;
+ if (message.link !== ''){
+ messageFileTag.innerHTML = `
+ ${message.file_name}
`
+ }else{
+ messageFileTag.innerHTML = `