From 303b29f3f30eabd9aef4f09f15476578149d1af4 Mon Sep 17 00:00:00 2001 From: Pascal Date: Tue, 14 Jan 2025 12:10:37 +0100 Subject: [PATCH] send_message_with_db_ok --- src/pages/chat/chat.ts | 129 ++++++++++++++++++++++++++++------------- 1 file changed, 90 insertions(+), 39 deletions(-) diff --git a/src/pages/chat/chat.ts b/src/pages/chat/chat.ts index 1576ec4..0f30171 100755 --- a/src/pages/chat/chat.ts +++ b/src/pages/chat/chat.ts @@ -467,47 +467,98 @@ class ChatElement extends HTMLElement { // Load the list of members - private async loadMemberChat(memberId: string | number) { - const myAddresses = await this.getMemberFromDevice(); - if (!myAddresses) { - console.error('No paired member found'); - return; - } - - this.selectedMemberId = String(memberId); - - const existingProcess = await this.getExistingConversationProcess(this.selectedMemberId); - - const chatHeader = this.shadowRoot?.querySelector('#chat-header'); - const messagesContainer = this.shadowRoot?.querySelector('#messages'); - - if (!chatHeader || !messagesContainer) return; - - const memberAddress = String(memberId); - const emojis = await addressToEmoji(memberAddress); - chatHeader.textContent = `Chat with ${emojis}`; - messagesContainer.innerHTML = ''; - - if (existingProcess?.messages?.object?.content) { - for (const message of existingProcess.messages.object.content) { - const messageElement = document.createElement('div'); - messageElement.className = 'message-container'; - messageElement.style.justifyContent = message.sender === myAddresses[0] ? 'flex-end' : 'flex-start'; - - const messageContent = document.createElement('div'); - messageContent.className = `message ${message.sender === myAddresses[0] ? 'user' : ''}`; - messageContent.innerHTML = ` -
- ${await addressToEmoji(message.sender)}: ${message.text} -
-
${new Date(message.timestamp).toLocaleString('fr-FR')}
- `; - - messageElement.appendChild(messageContent); - messagesContainer.appendChild(messageElement); + private async loadMemberChat(memberId: string) { + try { + const myAddresses = await this.getMemberFromDevice(); + if (!myAddresses) { + console.error('No paired member found'); + return; } + + this.selectedMemberId = String(memberId); - this.scrollToBottom(messagesContainer); + const chatHeader = this.shadowRoot?.querySelector('#chat-header'); + const messagesContainer = this.shadowRoot?.querySelector('#messages'); + + if (!chatHeader || !messagesContainer) return; + + const memberAddress = String(memberId); + const emojis = await addressToEmoji(memberAddress); + chatHeader.textContent = `Chat with ${emojis}`; + messagesContainer.innerHTML = ''; + + // Ouvrir IndexedDB + const dbRequest = indexedDB.open('4nk'); + + dbRequest.onerror = () => { + console.error("Database error:", dbRequest.error); + }; + + dbRequest.onsuccess = (event) => { + const db = dbRequest.result; + const transaction = db.transaction(['diffs'], 'readonly'); + const store = transaction.objectStore('diffs'); + const messages: any[] = []; + + const cursorRequest = store.openCursor(); + + cursorRequest.onsuccess = async (e) => { + const cursor = (e.target as IDBRequest).result; + + if (cursor) { + const record = cursor.value; + + // Vérifier si c'est un message valide avec le bon role et les bons participants + if (record.description === 'message_content' && + record.metadata && + record.metadata.roleName === this.selectedRole && + ((record.metadata.sender === myAddresses[0] && record.metadata.recipient === memberId) || + (record.metadata.sender === memberId && record.metadata.recipient === myAddresses[0]))) { + + messages.push(record); + } + cursor.continue(); + } else { + // Trier les messages par timestamp + messages.sort((a, b) => a.metadata.timestamp - b.metadata.timestamp); + + // Afficher les messages + for (const message of messages) { + const messageElement = document.createElement('div'); + messageElement.className = 'message-container'; + messageElement.style.justifyContent = + message.metadata.sender === myAddresses[0] ? 'flex-end' : 'flex-start'; + + const messageContent = document.createElement('div'); + messageContent.className = `message ${message.metadata.sender === myAddresses[0] ? 'user' : ''}`; + + const senderEmoji = await addressToEmoji(message.metadata.sender); + + messageContent.innerHTML = ` +
+ ${senderEmoji}: ${message.metadata.text} +
+
+ ${new Date(message.metadata.timestamp).toLocaleString('fr-FR')} +
+ `; + + messageElement.appendChild(messageContent); + messagesContainer.appendChild(messageElement); + } + + // Scroll vers le bas + this.scrollToBottom(messagesContainer); + } + }; + + cursorRequest.onerror = () => { + console.error("Error loading messages:", cursorRequest.error); + }; + }; + + } catch (error) { + console.error('Error loading chat:', error); } }