sendmessage-ko_template_ko

This commit is contained in:
Pascal 2025-01-13 10:35:44 +01:00
parent 93595e7fc2
commit 36257ebba7

View File

@ -404,29 +404,84 @@ class ChatElement extends HTMLElement {
try {
const myAddresses = await this.getMemberFromDevice();
console.log('👤 Adresses de l\'expéditeur:', myAddresses);
if (!myAddresses) {
throw new Error('No paired member found');
}
// Vérifier si un processus de conversation existe déjà
const existingProcess = await this.getExistingConversationProcess(this.selectedMemberId!);
console.log('🔍 Processus existant:', existingProcess);
const existingProcess = await this.getExistingConversationProcess(this.selectedMemberId);
// Ajoutons des logs pour voir la structure exacte
console.log('📝 Process existant:', {
fullProcess: existingProcess,
messageStructure: existingProcess?.messages?.object?.content?.[0]
});
const messageContent = {
text: messageText,
timestamp: Date.now(),
sender: myAddresses[0],
type: 'text',
state: 'initial',
object: {
content: messageText,
metadata: {
created_at: Date.now(),
last_updated: Date.now()
}
}
};
console.log('📝 Nouveau message:', messageContent);
if (existingProcess) {
console.log('📝 Mise à jour du processus existant');
await this.updateProcessWithNewMessage(existingProcess.process_id, messageText);
console.log('✏️ Mise à jour du processus:', {
processId: existingProcess.process_id,
currentMessages: existingProcess.messages.object.content,
newMessage: messageContent
});
// Mettre à jour le processus existant avec le nouveau message
existingProcess.messages.object.content.push(messageContent);
existingProcess.messages.object.metadata.last_updated = Date.now();
await this.updateProcessWithNewMessage(existingProcess.process_id, messageContent);
console.log('✅ Message ajouté au processus existant:', existingProcess.process_id);
} else {
console.log('🆕 Création d\'un nouveau processus');
// Créer un nouveau processus de message
const messagingTemplate = {
process_id: crypto.randomUUID(),
parent_id: null,
description: 'messaging',
messages: {
state: 'initial',
object: {
type: 'message_list',
content: [messageContent],
content_type: {
allowed: ['text', 'file'],
default: 'text'
},
metadata: {
created_at: Date.now(),
last_updated: Date.now()
}
}
}
};
const result = await this.createMessagingProcess(
[{ sp_addresses: [this.selectedMemberId] }],
'relay_address',
1
);
console.log('✅ Nouveau processus créé:', result);
await this.saveConversationProcessRef(this.selectedMemberId!, (result as any).id);
await this.saveConversationProcessRef(this.selectedMemberId, messagingTemplate.process_id);
console.log('✅ Nouveau processus de message créé:', messagingTemplate.process_id);
}
console.log('✅ Message envoyé avec succès');
messageInput.value = '';
this.loadMemberChat(this.selectedMemberId);
} catch (error) {
console.error('❌ Erreur lors de l\'envoi du message:', error);
}
@ -446,8 +501,9 @@ class ChatElement extends HTMLElement {
}
this.selectedMemberId = String(memberId);
const memberMessages = this.messagesMock.find(m => String(m.memberId) === String(memberId));
const existingProcess = await this.getExistingConversationProcess(this.selectedMemberId);
const chatHeader = this.shadowRoot?.querySelector('#chat-header');
const messagesContainer = this.shadowRoot?.querySelector('#messages');
@ -458,60 +514,27 @@ class ChatElement extends HTMLElement {
chatHeader.textContent = `Chat with ${emojis}`;
messagesContainer.innerHTML = '';
if (memberMessages) {
for (const message of memberMessages.messages) {
if (existingProcess?.messages?.object?.content) {
for (const message of existingProcess.messages.object.content) {
const messageElement = document.createElement('div');
messageElement.className = 'message-container';
if (message.sender === myAddresses[0]) {
messageElement.style.justifyContent = 'flex-end';
} else {
messageElement.style.justifyContent = 'flex-start';
}
messageElement.style.justifyContent = message.sender === myAddresses[0] ? 'flex-end' : 'flex-start';
const messageContent = document.createElement('div');
messageContent.className = message.class || 'message';
if (message.type === 'file') {
messageContent.innerHTML = `
<div class="message-content">
<strong>${await addressToEmoji(message.sender)}</strong>:
<span class="file-message" style="cursor: pointer; color: #0066cc; text-decoration: underline;">
📎 ${message.fileName}
</span>
</div>
<div class="message-time">${message.time}</div>
`;
const fileSpan = messageContent.querySelector('.file-message');
fileSpan?.addEventListener('click', () => {
const fileKey = `file_${message.id}`;
const fileData = localStorage.getItem(fileKey);
if (fileData) {
// Créer un lien de téléchargement
const link = document.createElement('a');
link.href = fileData;
link.download = message.fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
});
} else {
messageContent.innerHTML = `
<div class="message-content">
<strong>${await addressToEmoji(message.sender)}</strong>: ${message.text}
</div>
<div class="message-time">${message.time}</div>
`;
}
messageContent.className = `message ${message.sender === myAddresses[0] ? 'user' : ''}`;
messageContent.innerHTML = `
<div class="message-content">
<strong>${await addressToEmoji(message.sender)}</strong>: ${message.text}
</div>
<div class="message-time">${new Date(message.timestamp).toLocaleString('fr-FR')}</div>
`;
messageElement.appendChild(messageContent);
messagesContainer.appendChild(messageElement);
}
this.scrollToBottom(messagesContainer);
}
this.scrollToBottom(messagesContainer);
}
private async toggleMembers(roleData: any, roleElement: HTMLElement) {
@ -1103,17 +1126,14 @@ class ChatElement extends HTMLElement {
}
}
private async updateProcessWithNewMessage(processId: string, messageText: string) {
private async updateProcessWithNewMessage(processId: string, messageContent: any) {
const db = await Database.getInstance();
try {
const process = await db.getObject('processes', processId);
if (process) {
const myAddresses = await this.getMemberFromDevice();
process.messages.object.content.push({
text: messageText,
timestamp: Date.now(),
sender: myAddresses?.[0]
});
process.messages.object.content.push(messageContent);
process.messages.object.metadata.last_updated = Date.now();
await db.addObject({
storeName: 'processes',
key: processId,