object_message_ko

This commit is contained in:
Pascal 2025-01-13 21:36:44 +01:00
parent a14b54a7e7
commit 6491f85485

View File

@ -6,8 +6,6 @@ declare global {
}
}
import { groupsMock } from '../../mocks/mock-signature/groupsMock';
import { messagesMock as initialMessagesMock, messagesMock } from '../../mocks/mock-signature/messagesMock';
import { membersMock } from '../../mocks/mock-signature/membersMocks';
import { ApiReturn, Device, Member } from '../../../pkg/sdk_client';
import {
@ -289,7 +287,7 @@ class ChatElement extends HTMLElement {
}
const currentProcessId = this.getAttribute('process-id');
console.log('<EFBFBD><EFBFBD> Current Process ID:', currentProcessId);
console.log('🔍 Current Process ID:', currentProcessId);
if (!currentProcessId) {
throw new Error('No process ID found');
@ -352,15 +350,6 @@ class ChatElement extends HTMLElement {
data: storedProcess
});
if (!storedProcess) {
console.log('⚠️ Process non trouvé dans IndexedDB, ajout manuel...');
await db.addObject({
storeName: processStore,
key: (result as any).process_id,
object: result
});
}
return result;
} catch (e) {
console.error('❌ Erreur:', e);
@ -401,50 +390,63 @@ class ChatElement extends HTMLElement {
// Send a messsage
private async sendMessage() {
console.log('🚀 Début sendMessage');
const messageInput = this.shadowRoot?.querySelector('#message-input') as HTMLInputElement;
if (!messageInput || !this.selectedMemberId) {
console.log('❌ Message input ou selectedMemberId manquant');
return;
}
if (!messageInput || !this.selectedMemberId) return;
const messageText = messageInput.value.trim();
if (messageText === '') {
console.log('❌ Message vide');
return;
}
if (messageText === '') return;
try {
const myAddresses = await this.getMemberFromDevice();
if (!myAddresses) {
throw new Error('No paired member found');
}
if (!myAddresses) throw new Error('No paired member found');
// On récupère le processus existant
const existingProcess = await this.getExistingConversationProcess(this.selectedMemberId);
if (!existingProcess) {
console.error('❌ Aucun processus de message trouvé');
const messageProcess = await this.getExistingMessageProcess(
this.getAttribute('process-id') || '',
[this.selectedMemberId]
);
if (!messageProcess) {
console.error('❌ Processus message non trouvé');
return;
}
const messageContent = {
text: messageText,
timestamp: Date.now(),
sender: myAddresses[0],
type: 'text'
const recipientRole = Object.entries(messageProcess.roles).find(([_, roleData]: [string, any]) =>
roleData.members?.some((member: any) =>
member.sp_addresses.includes(this.selectedMemberId)
)
)?.[0] || 'default';
const messageTemplate = {
messaging_id: messageProcess.process_id,
description: 'message_content',
state: 'sent',
content: {
text: messageText,
timestamp: Date.now(),
sender: myAddresses[0],
recipient: this.selectedMemberId
},
roles: {
[recipientRole]: messageProcess.roles[recipientRole]
}
};
// Mise à jour du processus existant avec le nouveau message
await this.updateProcessWithNewMessage(existingProcess.process_id, messageContent);
console.log('✅ Message ajouté au processus existant:', existingProcess.process_id);
console.log('📝 Template message:', messageTemplate);
const result = await this.sdkClient.create_new_process(
JSON.stringify(messageTemplate),
messageProcess.process_id,
'relay_address',
1
);
console.log('✅ Message créé:', result);
messageInput.value = '';
this.loadMemberChat(this.selectedMemberId);
await this.loadMemberChat(this.selectedMemberId);
} catch (error) {
console.error('❌ Erreur lors de l\'envoi du message:', error);
console.error('❌ Erreur envoi message:', error);
}
}
@ -530,7 +532,6 @@ class ChatElement extends HTMLElement {
memberItem.onclick = async (event) => {
event.stopPropagation();
try {
// Récupérer le processId du chat parent
const parentProcessId = this.getAttribute('process-id');
console.log('🔍 Parent Process ID:', parentProcessId);
@ -538,7 +539,6 @@ class ChatElement extends HTMLElement {
throw new Error('No parent process ID found');
}
// Vérifier si un processus de message existe déjà pour cet utilisateur
const db = await Database.getInstance();
const processes = await db.getObject('processes', parentProcessId);
console.log('💾 Processus trouvé:', processes);
@ -637,7 +637,7 @@ class ChatElement extends HTMLElement {
private async loadGroupList(processId: string): Promise<void> {
console.log('🔍 Loading group list with processId:', processId);
console.log('Loading group list with processId:', processId);
const groupList = this.shadowRoot?.querySelector('#group-list');
if (!groupList) return;
@ -986,7 +986,7 @@ class ChatElement extends HTMLElement {
}
// Vérification que le processId est bien stocké
console.log('🔍 Vérification this.processId après stockage:', this.processId);
console.log('Vérification this.processId après stockage:', this.processId);
const existingProcess = groupList.querySelector(`[data-process-id="${processId}"]`);
if (existingProcess) {
@ -1086,42 +1086,6 @@ class ChatElement extends HTMLElement {
}
}
private async updateProcessWithNewMessage(processId: string, messageContent: any) {
const db = await Database.getInstance();
try {
const process = await db.getObject('processes', processId);
if (process) {
process.messages.object.content.push(messageContent);
process.messages.object.metadata.last_updated = Date.now();
await db.addObject({
storeName: 'processes',
key: processId,
object: process
});
}
} catch (error) {
console.error('Error updating process with new message:', error);
}
}
private async saveConversationProcessRef(memberId: string, processId: string) {
const db = await Database.getInstance();
try {
await db.addObject({
storeName: 'conversation_refs',
key: memberId,
object: {
memberId,
processId,
timestamp: Date.now()
}
});
} catch (error) {
console.error('Error saving conversation reference:', error);
}
}
async getProcessFromDB(processId: string) {
const db = await Database.getInstance();
const processStore = 'processes';
@ -1136,30 +1100,52 @@ class ChatElement extends HTMLElement {
private async getExistingMessageProcess(parentId: string, spAddresses: string[]): Promise<any> {
try {
console.log('🔍 Recherche du processus message');
console.log('Parent ID:', parentId);
console.log('SP Addresses:', spAddresses);
const db = await Database.getInstance();
const processStore = 'processes';
// Utiliser une clé valide pour la recherche
const process = await db.getObject(processStore, parentId);
console.log('🔍 Processus trouvé:', process);
// Récupérer le processus parent
const parentProcess = await db.getObject(processStore, parentId);
console.log('📂 Process parent trouvé dans IndexedDB:', {
store: processStore,
processId: parentId,
data: parentProcess
});
if (!process) {
console.log('❌ Aucun processus trouvé avec l\'ID:', parentId);
return null;
// Afficher la structure détaillée
if (parentProcess?.states) {
console.log('📝 States:', parentProcess.states);
console.log('🔐 Encrypted PCD:', parentProcess.states[0]?.encrypted_pcd);
console.log('🔄 Processes:', parentProcess.states[0]?.encrypted_pcd?.processes);
}
// Vérifier si c'est le bon processus
if (process.parent_id === parentId &&
process.roles?.owner?.members?.some((member: any) =>
// Chercher dans les states[0].encrypted_pcd.roles
const roles = parentProcess?.states?.[0]?.encrypted_pcd?.roles;
console.log('👥 Roles trouvés:', roles);
// Chercher le processus message dans les rôles
for (const role in roles) {
console.log(`🔍 Vérification du rôle: ${role}`);
const members = roles[role].members;
if (members?.some((member: any) =>
spAddresses.includes(member.sp_addresses[0])
)) {
console.log('✅ Processus correspondant trouvé');
return process;
console.log('✅ Membre trouvé dans le rôle:', role);
return {
description: 'messaging',
parent_id: parentId,
roles: roles
};
}
}
console.log('❌ Aucun processus message correspondant trouvé');
return null;
} catch (error) {
console.error('❌ Erreur lors de la recherche du processus:', error);
console.error('❌ Erreur recherche processus:', error);
return null;
}
}