improve conversation view
Change-Id: I63189d0b61d45e659ac7618a977282f7b4500753
diff --git a/JamiDaemon.js b/JamiDaemon.js
index 59d6b2b..764f1a1 100755
--- a/JamiDaemon.js
+++ b/JamiDaemon.js
@@ -29,7 +29,7 @@
"AccountsChanged": () => {
console.log("AccountsChanged")
const newAccounts = []
- this.stringVectToArr(this.dring.getAccountList()).forEach(accountId => {
+ JamiDaemon.vectToJs(this.dring.getAccountList()).forEach(accountId => {
for (const account in this.accounts) {
if (account.id === accountId) {
newAccounts.push(account)
@@ -37,8 +37,8 @@
}
}
newAccounts.push(new Account(accountId,
- this.mapToJs(this.dring.getAccountDetails(accountId)),
- this.mapToJs(this.dring.getVolatileAccountDetails(accountId))
+ JamiDaemon.mapToJs(this.dring.getAccountDetails(accountId)),
+ JamiDaemon.mapToJs(this.dring.getVolatileAccountDetails(accountId))
))
})
this.accounts = newAccounts
@@ -99,8 +99,26 @@
},
"RegisteredNameFound": (accountId, state, address, name) => {
console.log(`RegisteredNameFound: ${accountId} ${state} ${address} ${name}`)
+ const account = this.getAccount(accountId)
+ if (!account) {
+ console.log(`Unknown account ${accountId}`)
+ return
+ }
+ if (state == 0) {
+ const contact = account.getContactFromCache(address)
+ contact.setRegisteredName(name)
+ }
+ let index = account.lookups.length - 1;
+ while (index >= 0) {
+ const lookup = account.lookups[index]
+ if ((lookup.address && lookup.address === address) || (lookup.name && lookup.name === name)) {
+ lookup.resolve({address, name, state})
+ account.lookups.splice(index, 1);
+ }
+ index -= 1;
+ }
},
- "conversationReady": (accountId, conversationId) => {
+ "ConversationReady": (accountId, conversationId) => {
console.log(`conversationReady: ${accountId} ${conversationId}`)
const account = this.getAccount(accountId)
if (!account) {
@@ -109,13 +127,13 @@
}
let conversation = account.getConversation(conversationId)
if (!conversation) {
- const members = this.dring.getConversationMembers(accountId, conversationId)
- console.log(members)
- conversation = new Conversation(conversationId, members)
+ const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
+ members.forEach(member => member.contact = account.getContactFromCache(member.uri))
+ conversation = new Conversation(conversationId, accountId, members)
account.addConversation(conversation)
}
},
- "conversationRemoved": (accountId, conversationId) => {
+ "ConversationRemoved": (accountId, conversationId) => {
console.log(`conversationRemoved: ${accountId} ${conversationId}`)
const account = this.getAccount(accountId)
if (!account) {
@@ -124,7 +142,7 @@
}
account.removeConversation(conversationId)
},
- "conversationLoaded": (accountId, conversationId) => {
+ "ConversationLoaded": (accountId, conversationId) => {
console.log(`conversationLoaded: ${accountId} ${conversationId}`)
const account = this.getAccount(accountId)
if (!account) {
@@ -132,7 +150,7 @@
return
}
},
- "messageReceived": (accountId, conversationId, message) => {
+ "MessageReceived": (accountId, conversationId, message) => {
console.log(`messageReceived: ${accountId} ${conversationId}`)
const account = this.getAccount(accountId)
if (!account) {
@@ -144,7 +162,7 @@
conversation.addMessage(message)
}
},
- "conversationRequestReceived": (accountId, conversationId, request) => {
+ "ConversationRequestReceived": (accountId, conversationId, request) => {
console.log(`conversationRequestReceived: ${accountId} ${conversationId}`)
const account = this.getAccount(accountId)
if (!account) {
@@ -152,7 +170,7 @@
return
}
},
- "conversationMemberEvent": (accountId, conversationId, member, event) => {
+ "ConversationMemberEvent": (accountId, conversationId, member, event) => {
console.log(`conversationMemberEvent: ${accountId} ${conversationId}`)
const account = this.getAccount(accountId)
if (!account) {
@@ -160,7 +178,7 @@
return
}
},
- "onConversationError": (accountId, conversationId, code, what) => {
+ "OnConversationError": (accountId, conversationId, code, what) => {
console.log(`onConversationError: ${accountId} ${conversationId}`)
const account = this.getAccount(accountId)
if (!account) {
@@ -169,11 +187,19 @@
}
}
})
- this.stringVectToArr(this.dring.getAccountList()).forEach(accountId => {
- this.accounts.push(new Account(accountId,
- this.mapToJs(this.dring.getAccountDetails(accountId)),
- this.mapToJs(this.dring.getVolatileAccountDetails(accountId))
- ))
+
+ JamiDaemon.vectToJs(this.dring.getAccountList()).forEach(accountId => {
+ const account = new Account(accountId,
+ JamiDaemon.mapToJs(this.dring.getAccountDetails(accountId)),
+ JamiDaemon.mapToJs(this.dring.getVolatileAccountDetails(accountId))
+ )
+ JamiDaemon.vectToJs(this.dring.getConversations(accountId)).forEach(conversationId => {
+ const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
+ members.forEach(member => member.contact = account.getContactFromCache(member.uri))
+ const conversation = new Conversation(conversationId, accountId, members)
+ account.addConversation(conversation)
+ })
+ this.accounts.push(account)
})
}
@@ -194,103 +220,158 @@
return this.accounts
}
/*getAccountDetails(accountId) {
- return this.mapToJs(this.dring.getAccountDetails(accountId));
+ return this.mapToJs(this.dring.getAccountDetails(accountId))
}*/
setAccountDetails(accountId, details) {
- this.dring.setAccountDetails(accountId, mapToNative(details));
+ this.dring.setAccountDetails(accountId, mapToNative(details))
}
getAudioOutputDeviceList() {
- return this.stringVectToArr(this.dring.getAudioOutputDeviceList());
+ return JamiDaemon.vectToJs(this.dring.getAudioOutputDeviceList())
}
getVolume(deviceName) {
- return this.dring.getVolume(deviceName);
+ return this.dring.getVolume(deviceName)
}
setVolume(deviceName, volume) {
- return this.dring.setVolume(deviceName, volume);
+ return this.dring.setVolume(deviceName, volume)
+ }
+
+ lookupName(accountId, name) {
+ const p = new Promise((resolve, reject) => {
+ const account = this.getAccount(accountId)
+ if (!account) {
+ reject(new Error("Can't find account"))
+ } else {
+ account.lookups.push({name, resolve, reject})
+ }
+ })
+ this.dring.lookupName(accountId, "", name)
+ return p
+ }
+
+ lookupAddress(accountId, address) {
+ console.log(`lookupAddress ${accountId} ${address}`)
+ const p = new Promise((resolve, reject) => {
+ const account = this.getAccount(accountId)
+ if (!account) {
+ reject(new Error("Can't find account"))
+ } else {
+ account.lookups.push({address, resolve, reject})
+ }
+ })
+ this.dring.lookupAddress(accountId, "", address)
+ return p
}
stop() {
- this.dring.fini();
+ this.dring.fini()
}
+ addContact(accountId, contactId) {
+ this.dring.addContact(accountId, contactId)
+ const details = JamiDaemon.mapToJs(this.dring.getContactDetails(accountId, contactId))
+ if (details.conversationId) {
+ const account = this.getAccount(accountId)
+ if (account) {
+ let conversation = account.getConversation(details.conversationId)
+ if (!conversation) {
+ const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, details.conversationId))
+ members.forEach(member => member.contact = account.getContactFromCache(member.uri))
+ conversation = new Conversation(details.conversationId, accountId, members)
+ account.addConversation(conversation)
+ }
+ }
+ }
+ return details
+ }
+
+ //getContactDetails
+
// private
boolToStr(bool) {
- return bool ? "true" : "false";
+ return bool ? "true" : "false"
}
accountDetailsToNative(account) {
- const params = new this.dring.StringMap();
+ const params = new this.dring.StringMap()
if (account.managerUri)
- params.set("Account.managerUri", account.managerUri);
+ params.set("Account.managerUri", account.managerUri)
if (account.managerUsername)
- params.set("Account.managerUsername", account.managerUsername);
+ params.set("Account.managerUsername", account.managerUsername)
if (account.archivePassword) {
- params.set("Account.archivePassword", account.archivePassword);
+ params.set("Account.archivePassword", account.archivePassword)
} else {
- console.log("archivePassword required");
+ console.log("archivePassword required")
return;
}
if (account.alias)
- params.set("Account.alias", account.alias);
+ params.set("Account.alias", account.alias)
if (account.displayName)
- params.set("Account.displayName", account.displayName);
+ params.set("Account.displayName", account.displayName)
if (account.enable)
- params.set("Account.enable", this.boolToStr(account.enable));
+ params.set("Account.enable", this.boolToStr(account.enable))
if (account.autoAnswer)
- params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer));
+ params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
if (account.ringtonePath)
- params.set("Account.ringtonePath", account.ringtonePath);
+ params.set("Account.ringtonePath", account.ringtonePath)
if (account.ringtoneEnabled)
- params.set("Account.ringtoneEnabled", this.boolToStr(account.ringtoneEnabled));
+ params.set("Account.ringtoneEnabled", this.boolToStr(account.ringtoneEnabled))
if (account.videoEnabled)
- params.set("Account.videoEnabled", this.boolToStr(account.videoEnabled));
+ params.set("Account.videoEnabled", this.boolToStr(account.videoEnabled))
if (account.useragent) {
- params.set("Account.useragent", account.useragent);
- params.set("Account.hasCustomUserAgent", "TRUE");
+ params.set("Account.useragent", account.useragent)
+ params.set("Account.hasCustomUserAgent", "TRUE")
} else {
- params.set("Account.hasCustomUserAgent", "FALSE");
+ params.set("Account.hasCustomUserAgent", "FALSE")
}
if (account.audioPortMin)
- params.set("Account.audioPortMin", account.audioPortMin);
+ params.set("Account.audioPortMin", account.audioPortMin)
if (account.audioPortMax)
- params.set("Account.audioPortMax", account.audioPortMax);
+ params.set("Account.audioPortMax", account.audioPortMax)
if (account.videoPortMin)
- params.set("Account.videoPortMin", account.videoPortMin);
+ params.set("Account.videoPortMin", account.videoPortMin)
if (account.videoPortMax)
- params.set("Account.videoPortMax", account.videoPortMax);
+ params.set("Account.videoPortMax", account.videoPortMax)
if (account.localInterface)
- params.set("Account.localInterface", account.localInterface);
+ params.set("Account.localInterface", account.localInterface)
if (account.publishedSameAsLocal)
- params.set("Account.publishedSameAsLocal", this.boolToStr(account.publishedSameAsLocal));
+ params.set("Account.publishedSameAsLocal", this.boolToStr(account.publishedSameAsLocal))
if (account.localPort)
- params.set("Account.localPort", account.localPort);
+ params.set("Account.localPort", account.localPort)
if (account.publishedPort)
- params.set("Account.publishedPort", account.publishedPort);
+ params.set("Account.publishedPort", account.publishedPort)
if (account.publishedAddress)
- params.set("Account.publishedAddress", account.publishedAddress);
+ params.set("Account.publishedAddress", account.publishedAddress)
if (account.upnpEnabled)
- params.set("Account.upnpEnabled", this.boolToStr(account.upnpEnabled));
- return params;
+ params.set("Account.upnpEnabled", this.boolToStr(account.upnpEnabled))
+ return params
}
- stringVectToArr(stringvect) {
- const outputArr = [];
- for (let i = 0; i < stringvect.size(); i++)
- outputArr.push(stringvect.get(i));
- return outputArr;
+ static vectToJs(vect) {
+ const len = vect.size()
+ const outputArr = new Array(len)
+ for (let i = 0; i < len; i++)
+ outputArr[i] = vect.get(i)
+ return outputArr
}
- mapToJs(m) {
- const outputObj = {};
- this.stringVectToArr(m.keys())
- .forEach(k => outputObj[k] = m.get(k));
- return outputObj;
+ static mapToJs(m) {
+ const outputObj = {}
+ JamiDaemon.vectToJs(m.keys())
+ .forEach(k => outputObj[k] = m.get(k))
+ return outputObj
}
- mapToNative(map){
- const ret = new this.dring.StringMap();
- map.forEach((value, key) => ret.set(key, value));
- return ret;
+ static vectMapToJs(vectMap) {
+ const len = vectMap.size()
+ const outputArr = new Array(len)
+ for (let i = 0; i < len; i++)
+ outputArr[i] = JamiDaemon.mapToJs(vectMap.get(i))
+ return outputArr
}
+ mapToNative(map){
+ const ret = new this.dring.StringMap()
+ map.forEach((value, key) => ret.set(key, value))
+ return ret;
+ }
}
module.exports = JamiDaemon;