Divide Conversation into ConversationInfos, ConversationMember, and ConversationSummary

- ConversationSummary is used to display ConversationList.
- Having the three separated will help managing queries.
- Adding ConversationSummary required to solve some inconsistencies in ConversationList, which was mixing contacts and conversations. ContactSearchResultList has been added as a quick fix . It will need more work.
- Some tools to uniformize conversation names have been introduced. They will need more work.

Note the diplaying of ConversationList is left broken in this commit.

Change-Id: I29337906cc43781a9c4790735490a6ee2cc51cb0
diff --git a/server/src/jamid/jamid.ts b/server/src/jamid/jamid.ts
index b6a728b..2476e72 100644
--- a/server/src/jamid/jamid.ts
+++ b/server/src/jamid/jamid.ts
@@ -345,8 +345,13 @@
     ) as unknown as ConversationMemberInfos[];
   }
 
-  async getConversationMessages(accountId: string, conversationId: string, fromMessage?: string): Promise<Message[]> {
-    const requestId = this.jamiSwig.loadConversationMessages(accountId, conversationId, fromMessage || '', 32);
+  async getConversationMessages(
+    accountId: string,
+    conversationId: string,
+    fromMessage = '',
+    n = 32
+  ): Promise<Message[]> {
+    const requestId = this.jamiSwig.loadConversationMessages(accountId, conversationId, fromMessage, n);
     return firstValueFrom(
       this.events.onConversationLoaded.pipe(
         filter((value) => value.id === requestId),
@@ -355,6 +360,10 @@
     );
   }
 
+  removeConversation(accountId: string, conversationId: string) {
+    this.jamiSwig.removeConversation(accountId, conversationId);
+  }
+
   sendConversationMessage(
     accountId: string,
     conversationId: string,