add socket.io back, cleanup

Change-Id: I74e043268c23fb45371f1e397ca2931ca177afc3
diff --git a/JamiDaemon.js b/JamiDaemon.js
index 00583d2..6eeaa2c 100755
--- a/JamiDaemon.js
+++ b/JamiDaemon.js
@@ -25,7 +25,7 @@
 const require = createRequire(import.meta.url);
 
 class JamiDaemon {
-    constructor() {
+    constructor(onMessage) {
         this.accounts = []
         this.dring = require("./dring.node")
         this.dring.init({
@@ -146,7 +146,7 @@
                 }
                 account.removeConversation(conversationId)
             },
-            "ConversationLoaded": (accountId, conversationId, messages) => {
+            "ConversationLoaded": (id, accountId, conversationId, messages) => {
                 console.log(`conversationLoaded: ${accountId} ${conversationId}`)
                 console.log(messages)
                 const account = this.getAccount(accountId)
@@ -156,7 +156,11 @@
                 }
                 const conversation = account.getConversation(conversationId)
                 if (conversation) {
-                    conversation.addLoadedMessages(message)
+                    conversation.addLoadedMessages(messages)
+                    const request = conversation.requests[id]
+                    if (request) {
+                        request.resolve(messages)
+                    }
                 }
             },
             "MessageReceived": (accountId, conversationId, message) => {
@@ -170,6 +174,8 @@
                 const conversation = account.getConversation(conversationId)
                 if (conversation) {
                     conversation.addMessage(message)
+                    if (onMessage)
+                        onMessage(account, conversation, message)
                 }
             },
             "ConversationRequestReceived": (accountId, conversationId, request) => {
@@ -318,17 +324,37 @@
             return {}
         }
         return JamiDaemon.vectToJs(this.dring.getDefaultModerators(accountId))
-            .map(contactId => account.getContactFromCache(contctId))
+            .map(contactId => account.getContactFromCache(contactId))
     }
 
-    setDefaultModerators(accountId, moderators) {
+    addDefaultModerator(accountId, uri) {
+        this.dring.setDefaultModerator(accountId, uri, true)
+    }
 
+    removeDefaultModerator(accountId, uri) {
+        this.dring.setDefaultModerator(accountId, uri, false)
     }
 
     sendMessage(accountId, conversationId, message) {
         this.dring.sendMessage(accountId, conversationId, message, "")
     }
 
+    loadMessages(accountId, conversationId, fromMessage) {
+        const account = this.getAccount(accountId)
+        if (!account)
+            throw new Error('Unknown account')
+        const conversation = account.getConversation(conversationId)
+        if (!conversation)
+            throw new Error(`Unknown conversation ${conversationId}`)
+
+        return new Promise((resolve, reject) => {
+            if (!conversation.requests)
+                conversation.requests = {}
+            const requestId = this.dring.loadConversationMessages(accountId, conversationId, fromMessage || "", 32)
+            conversation.requests[requestId] = {resolve, reject}
+        })
+    }
+
     boolToStr(bool) {
         return bool ? "true" : "false"
     }