blob: 812574d46fa3ba84cf1d317cfc7c604cc6eafaae [file] [log] [blame]
Adrien Béraud6ecaa402021-04-06 17:37:25 -04001/*
2 * Copyright (c) 2017-2021 Savoir-faire Linux Inc.
3 *
4 * Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
5 * Author: Asad Salman <me@asad.co>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
Adrien Béraude74741b2021-04-19 13:22:54 -040020"use strict"
Adrien Béraud947e8792021-04-15 18:32:44 -040021
Adrien Béraude74741b2021-04-19 13:22:54 -040022import Account from './model/Account.js'
23import Conversation from './model/Conversation.js'
24import { createRequire } from 'module';
25const require = createRequire(import.meta.url);
Adrien Béraud6ecaa402021-04-06 17:37:25 -040026
Adrien Béraud6ecaa402021-04-06 17:37:25 -040027class JamiDaemon {
Adrien Béraud4e287b92021-04-24 16:15:56 -040028 constructor(onMessage) {
Adrien Béraud6ecaa402021-04-06 17:37:25 -040029 this.accounts = []
Adrien Béraud88a52442021-04-26 12:11:41 -040030 this.lookups = []
31 this.tempAccounts = []
Adrien Béraudab519ff2022-05-03 15:34:48 -040032 this.dring = require("./jamid.node")
Adrien Béraud6ecaa402021-04-06 17:37:25 -040033 this.dring.init({
Adrien Béraudc25be582021-05-06 12:38:15 -040034 AccountsChanged: () => {
Adrien Béraud6ecaa402021-04-06 17:37:25 -040035 console.log("AccountsChanged")
36 const newAccounts = []
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040037 JamiDaemon.vectToJs(this.dring.getAccountList()).forEach(accountId => {
Adrien Béraud88a52442021-04-26 12:11:41 -040038 for (const account of this.accounts) {
39 if (account.getId() === accountId) {
Adrien Béraud6ecaa402021-04-06 17:37:25 -040040 newAccounts.push(account)
41 return
42 }
43 }
44 newAccounts.push(new Account(accountId,
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040045 JamiDaemon.mapToJs(this.dring.getAccountDetails(accountId)),
46 JamiDaemon.mapToJs(this.dring.getVolatileAccountDetails(accountId))
Adrien Béraud0cb76c92021-04-07 19:59:08 -040047 ))
Adrien Béraud6ecaa402021-04-06 17:37:25 -040048 })
49 this.accounts = newAccounts
50 },
Adrien Béraudc25be582021-05-06 12:38:15 -040051 AccountDetailsChanged: (accountId, details) => {
Adrien Béraud6ecaa402021-04-06 17:37:25 -040052 console.log(`AccountDetailsChanged ${accountId}`)
53 const account = this.getAccount(accountId)
54 if (!account) {
55 console.log(`Unknown account ${accountId}`)
56 return
57 }
58 account.details = details
59 },
Adrien Béraudc25be582021-05-06 12:38:15 -040060 VolatileDetailsChanged: (accountId, details) => {
Adrien Béraud6ecaa402021-04-06 17:37:25 -040061 console.log(`VolatileDetailsChanged ${accountId}`)
62 const account = this.getAccount(accountId)
63 if (!account) {
64 console.log(`Unknown account ${accountId}`)
65 return
66 }
67 account.volatileDetails = details
68 },
Adrien Béraudc25be582021-05-06 12:38:15 -040069 IncomingAccountMessage: (accountId, from, message) => {
Adrien Béraud6ecaa402021-04-06 17:37:25 -040070 console.log(`Received message: ${accountId} ${from} ${message["text/plain"]}`)
71/*
72 if (parser.validate(message["text/plain"]) === true) {
Adrien Béraude74741b2021-04-19 13:22:54 -040073 console.log(message["text/plain"])
Adrien Béraud6ecaa402021-04-06 17:37:25 -040074 } else {
75
Adrien Béraude74741b2021-04-19 13:22:54 -040076 user = connectedUsers[accountId]
Adrien Béraud6ecaa402021-04-06 17:37:25 -040077 console.log(user.socketId)
Adrien Béraude74741b2021-04-19 13:22:54 -040078 io.to(user.socketId).emit('receivedMessage', message["text/plain"])
79 //io.emit('receivedMessage', message["text/plain"])
Adrien Béraud6ecaa402021-04-06 17:37:25 -040080 }*/
81 },
Adrien Béraudc25be582021-05-06 12:38:15 -040082 RegistrationStateChanged: (accountId, state, code, detail) => {
Adrien Béraud6ecaa402021-04-06 17:37:25 -040083 console.log("RegistrationStateChanged: " + accountId + " " + state + " " + code + " " + detail)
Adrien Béraud88a52442021-04-26 12:11:41 -040084 const account = this.getAccount(accountId)
85 if (account) {
86 account.registrationState = state
87 } else {
88 console.log(`Unknown account ${accountId}`)
89 }
90 const ctx = this.tempAccounts[accountId]
91 if (ctx) {
92 if (state === "REGISTERED") {
93 account.details = JamiDaemon.mapToJs(this.dring.getAccountDetails(accountId))
94 ctx.resolve(accountId)
95 delete this.tempAccounts[accountId]
96 } else if (state === "ERROR_AUTH") {
97 this.dring.removeAccount(accountId)
98 ctx.reject(state)
99 delete this.tempAccounts[accountId]
100 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400101 }
102 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400103 RegisteredNameFound: (accountId, state, address, name) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400104 console.log(`RegisteredNameFound: ${accountId} ${state} ${address} ${name}`)
Adrien Béraud88a52442021-04-26 12:11:41 -0400105 let lookups
106 if (accountId) {
107 const account = this.getAccount(accountId)
108 if (!account) {
109 console.log(`Unknown account ${accountId}`)
110 return
111 }
112 if (state == 0) {
113 const contact = account.getContactFromCache(address)
114 if (!contact.isRegisteredNameResolved())
115 contact.setRegisteredName(name)
116 }
117 lookups = account.lookups
118 } else {
119 lookups = this.lookups
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400120 }
Adrien Béraud88a52442021-04-26 12:11:41 -0400121 let index = lookups.length - 1
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400122 while (index >= 0) {
Adrien Béraud88a52442021-04-26 12:11:41 -0400123 const lookup = lookups[index]
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400124 if ((lookup.address && lookup.address === address) || (lookup.name && lookup.name === name)) {
125 lookup.resolve({address, name, state})
Adrien Béraud88a52442021-04-26 12:11:41 -0400126 lookups.splice(index, 1)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400127 }
Adrien Béraude74741b2021-04-19 13:22:54 -0400128 index -= 1
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400129 }
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400130 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400131 NameRegistrationEnded: (accountId, state, name) => {
Adrien Béraud0561d3c2021-05-02 11:23:54 -0400132 console.log(`NameRegistrationEnded: ${accountId} ${state} ${name}`)
133 const account = this.getAccount(accountId)
134 if (account) {
135 if (state === 0)
136 account.volatileDetails['Account.registeredName'] = name
137 if (account.registeringName) {
138 account.registeringName.resolve(state)
139 delete account.registeringName
140 }
141 } else {
142 console.log(`Unknown account ${accountId}`)
143 }
144 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400145 // Conversations
146 ConversationReady: (accountId, conversationId) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400147 console.log(`conversationReady: ${accountId} ${conversationId}`)
148 const account = this.getAccount(accountId)
149 if (!account) {
150 console.log(`Unknown account ${accountId}`)
151 return
152 }
153 let conversation = account.getConversation(conversationId)
154 if (!conversation) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400155 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
156 members.forEach(member => member.contact = account.getContactFromCache(member.uri))
157 conversation = new Conversation(conversationId, accountId, members)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400158 account.addConversation(conversation)
159 }
160 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400161 ConversationRemoved: (accountId, conversationId) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400162 console.log(`conversationRemoved: ${accountId} ${conversationId}`)
163 const account = this.getAccount(accountId)
164 if (!account) {
165 console.log(`Unknown account ${accountId}`)
166 return
167 }
168 account.removeConversation(conversationId)
169 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400170 ConversationLoaded: (id, accountId, conversationId, messages) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400171 console.log(`conversationLoaded: ${accountId} ${conversationId}`)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400172 const account = this.getAccount(accountId)
173 if (!account) {
174 console.log(`Unknown account ${accountId}`)
175 return
176 }
177 const conversation = account.getConversation(conversationId)
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400178 if (conversation) {
Adrien Béraud86986032021-04-25 12:04:53 -0400179 //conversation.addLoadedMessages(messages)
Adrien Béraud4e287b92021-04-24 16:15:56 -0400180 const request = conversation.requests[id]
181 if (request) {
182 request.resolve(messages)
183 }
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400184 }
185 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400186 MessageReceived: (accountId, conversationId, message) => {
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400187 console.log(`messageReceived: ${accountId} ${conversationId}`)
188 console.log(message)
189 const account = this.getAccount(accountId)
190 if (!account) {
191 console.log(`Unknown account ${accountId}`)
192 return
193 }
194 const conversation = account.getConversation(conversationId)
195 if (conversation) {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400196 conversation.addMessage(message)
Adrien Béraud4e287b92021-04-24 16:15:56 -0400197 if (onMessage)
198 onMessage(account, conversation, message)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400199 }
200 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400201 ConversationRequestReceived: (accountId, conversationId, request) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400202 console.log(`conversationRequestReceived: ${accountId} ${conversationId}`)
203 const account = this.getAccount(accountId)
204 if (!account) {
205 console.log(`Unknown account ${accountId}`)
206 return
207 }
208 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400209 ConversationMemberEvent: (accountId, conversationId, member, event) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400210 console.log(`conversationMemberEvent: ${accountId} ${conversationId}`)
211 const account = this.getAccount(accountId)
212 if (!account) {
213 console.log(`Unknown account ${accountId}`)
214 return
215 }
216 },
Adrien Béraudc25be582021-05-06 12:38:15 -0400217 OnConversationError: (accountId, conversationId, code, what) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400218 console.log(`onConversationError: ${accountId} ${conversationId}`)
219 const account = this.getAccount(accountId)
220 if (!account) {
221 console.log(`Unknown account ${accountId}`)
222 return
223 }
Adrien Béraudc25be582021-05-06 12:38:15 -0400224 },
225 // Calls
226 StateChange: (callId, state, code) => {
227 console.log(`CallStateChange: ${callId} ${state} ${code}`)
228 },
229 IncomingCall: (accountId, callId, peerUri) => {
230 console.log(`IncomingCall: ${accountId} ${callId} ${peerUri}`)
231 },
232 ConferenceCreated: (confId) => {
233 console.log(`ConferenceCreated: ${confId}`)
234 },
235 ConferenceChanged: (confId, state) => {
236 console.log(`ConferenceChanged: ${confId}`)
237
238 },
239 ConferenceRemoved: (confId) => {
240 console.log(`ConferenceRemoved: ${confId}`)
241
242 },
243 onConferenceInfosUpdated: (confId, info) => {
244 console.log(`onConferenceInfosUpdated: ${confId}`)
245
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400246 }
247 })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400248
249 JamiDaemon.vectToJs(this.dring.getAccountList()).forEach(accountId => {
250 const account = new Account(accountId,
251 JamiDaemon.mapToJs(this.dring.getAccountDetails(accountId)),
252 JamiDaemon.mapToJs(this.dring.getVolatileAccountDetails(accountId))
253 )
ervinanoh99655642022-09-01 15:11:31 -0400254
255 account.contacts = JamiDaemon.vectMapToJs(
256 this.dring.getContacts(accountId)
257 );
258
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400259 JamiDaemon.vectToJs(this.dring.getConversations(accountId)).forEach(conversationId => {
260 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
ervinanohb81c3912022-09-08 04:13:24 -0400261 console.log("\n\nXMEMBERS: ", members)
Adrien Béraud150b4782021-04-21 19:40:59 -0400262 members.forEach(member => {
263 member.contact = account.getContactFromCache(member.uri)
264 if (!member.contact.isRegisteredNameResolved()) {
265 if (!member.uri) return
ervinanohb81c3912022-09-08 04:13:24 -0400266 console.log(`lookupAddress ${accountId} ${member.uri}`, member)
Adrien Béraud150b4782021-04-21 19:40:59 -0400267 member.contact.setRegisteredName(new Promise((resolve, reject) =>
268 account.lookups.push({address: member.uri, resolve, reject})
269 ).then(result => {
270 if (result.state == 0)
271 return result.name
272 else if (result.state == 1)
273 return undefined
274 else
275 return null
276 }))
277 this.dring.lookupAddress(accountId, "", member.uri)
278 }
279 })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400280 const conversation = new Conversation(conversationId, accountId, members)
ervinanohb81c3912022-09-08 04:13:24 -0400281 conversation.setInfos(JamiDaemon.mapToJs(this.dring.conversationInfos(accountId, conversationId)))
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400282 account.addConversation(conversation)
283 })
ervinanohf1758a42022-09-14 14:52:51 -0400284 account.setDevices(
285 );
286
287 this.accounts.push(account);
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400288 })
289 }
290
Adrien Béraud88a52442021-04-26 12:11:41 -0400291 addAccount(accountConfig) {
292 const params = this.accountDetailsToNative(accountConfig)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400293 params.set("Account.type", "RING")
Adrien Béraud88a52442021-04-26 12:11:41 -0400294 return new Promise((resolve, reject) => {
295 const accountId = this.dring.addAccount(params)
296 this.tempAccounts[accountId] = { resolve, reject }
297 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400298 }
ervinanohf1758a42022-09-14 14:52:51 -0400299
300 getDevices(accountId){
301 return JamiDaemon.mapToJs(this.dring.getKnownRingDevices(accountId));
302 }
303
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400304 getAccount(accountId) {
305 for (let i = 0; i < this.accounts.length; i++) {
306 const account = this.accounts[i]
307 if (account.getId() === accountId)
308 return account
309 }
310 return undefined
311 }
312 getAccountList() {
313 return this.accounts
314 }
Adrien Béraud0561d3c2021-05-02 11:23:54 -0400315 registerName(accountId, password, name) {
316 return new Promise((resolve, reject) => {
317 if (!name)
318 return reject(new Error("Invalid name"))
319 const account = this.getAccount(accountId)
320 if (!account)
321 return reject(new Error("Can't find account"))
322 if (account.registeringName)
323 return reject(new Error("Username already being registered"))
324 if (this.dring.registerName(accountId, password, name)) {
325 account.registeringName = { name, resolve, reject }
326 }
327 })
328 }
329
Adrien Béraudabba2e52021-04-24 21:39:56 -0400330 getConversation(accountId, conversationId) {
331 const account = this.getAccount(accountId)
332 if (account)
333 return account.getConversation(conversationId)
334 return null
335 }
ervinanoh8e918042022-09-06 10:30:59 -0400336 getAccountDetails(accountId) {
337 return JamiDaemon.mapToJs(this.dring.getAccountDetails(accountId))
338 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400339 setAccountDetails(accountId, details) {
Adrien Béraud86986032021-04-25 12:04:53 -0400340 this.dring.setAccountDetails(accountId, this.mapToNative(details))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400341 }
342 getAudioOutputDeviceList() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400343 return JamiDaemon.vectToJs(this.dring.getAudioOutputDeviceList())
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400344 }
345 getVolume(deviceName) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400346 return this.dring.getVolume(deviceName)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400347 }
348 setVolume(deviceName, volume) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400349 return this.dring.setVolume(deviceName, volume)
350 }
351
352 lookupName(accountId, name) {
353 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400354 if (accountId) {
355 const account = this.getAccount(accountId)
356 if (!account) {
357 reject(new Error("Can't find account"))
358 } else {
359 account.lookups.push({ name, resolve, reject })
360 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400361 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400362 this.lookups.push({ name, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400363 }
364 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400365 this.dring.lookupName(accountId || '', '', name)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400366 return p
367 }
368
369 lookupAddress(accountId, address) {
370 console.log(`lookupAddress ${accountId} ${address}`)
371 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400372 if (accountId) {
373 const account = this.getAccount(accountId)
374 if (!account) {
375 reject(new Error("Can't find account"))
376 } else {
377 account.lookups.push({ address, resolve, reject })
378 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400379 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400380 this.lookups.push({ address, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400381 }
382 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400383 this.dring.lookupAddress(accountId || '', '', address)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400384 return p
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400385 }
386
387 stop() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400388 this.dring.fini()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400389 }
390
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400391 addContact(accountId, contactId) {
392 this.dring.addContact(accountId, contactId)
393 const details = JamiDaemon.mapToJs(this.dring.getContactDetails(accountId, contactId))
394 if (details.conversationId) {
395 const account = this.getAccount(accountId)
396 if (account) {
397 let conversation = account.getConversation(details.conversationId)
398 if (!conversation) {
399 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, details.conversationId))
400 members.forEach(member => member.contact = account.getContactFromCache(member.uri))
401 conversation = new Conversation(details.conversationId, accountId, members)
402 account.addConversation(conversation)
403 }
404 }
405 }
406 return details
407 }
408
ervinanoh99655642022-09-01 15:11:31 -0400409 removeContact(accountId, contactId){
410 //bool ban false
411 this.dring.removeContact(accountId, contactId, false);
412 }
413
414 blockContact(accountId, contactId){
415 //bool ban true
416 this.dring.removeContact(accountId, contactId, true);
417 }
418
419 getContactDetails(accountId, contactId){
420 return JamiDaemon.mapToJs(this.dring.getContactDetails(accountId, contactId))
421 }
422
Adrien Béraud150b4782021-04-21 19:40:59 -0400423 getDefaultModerators(accountId) {
424 const account = this.getAccount(accountId)
425 if (!account) {
426 console.log(`Unknown account ${accountId}`)
427 return {}
428 }
429 return JamiDaemon.vectToJs(this.dring.getDefaultModerators(accountId))
Adrien Béraud4e287b92021-04-24 16:15:56 -0400430 .map(contactId => account.getContactFromCache(contactId))
Adrien Béraud150b4782021-04-21 19:40:59 -0400431 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400432
Adrien Béraud4e287b92021-04-24 16:15:56 -0400433 addDefaultModerator(accountId, uri) {
434 this.dring.setDefaultModerator(accountId, uri, true)
435 }
Adrien Béraud150b4782021-04-21 19:40:59 -0400436
Adrien Béraud4e287b92021-04-24 16:15:56 -0400437 removeDefaultModerator(accountId, uri) {
438 this.dring.setDefaultModerator(accountId, uri, false)
Adrien Béraud150b4782021-04-21 19:40:59 -0400439 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400440
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400441 sendMessage(accountId, conversationId, message) {
442 this.dring.sendMessage(accountId, conversationId, message, "")
443 }
444
Adrien Béraud4e287b92021-04-24 16:15:56 -0400445 loadMessages(accountId, conversationId, fromMessage) {
446 const account = this.getAccount(accountId)
447 if (!account)
448 throw new Error('Unknown account')
449 const conversation = account.getConversation(conversationId)
450 if (!conversation)
451 throw new Error(`Unknown conversation ${conversationId}`)
452
453 return new Promise((resolve, reject) => {
454 if (!conversation.requests)
455 conversation.requests = {}
456 const requestId = this.dring.loadConversationMessages(accountId, conversationId, fromMessage || "", 32)
457 conversation.requests[requestId] = {resolve, reject}
458 })
459 }
460
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400461 boolToStr(bool) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400462 return bool ? "true" : "false"
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400463 }
464
465 accountDetailsToNative(account) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400466 const params = new this.dring.StringMap()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400467 if (account.managerUri)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400468 params.set("Account.managerUri", account.managerUri)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400469 if (account.managerUsername)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400470 params.set("Account.managerUsername", account.managerUsername)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400471 if (account.archivePassword) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400472 params.set("Account.archivePassword", account.archivePassword)
Adrien Béraud88a52442021-04-26 12:11:41 -0400473 }/* else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400474 console.log("archivePassword required")
Adrien Béraude74741b2021-04-19 13:22:54 -0400475 return
Adrien Béraud88a52442021-04-26 12:11:41 -0400476 }*/
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400477 if (account.alias)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400478 params.set("Account.alias", account.alias)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400479 if (account.displayName)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400480 params.set("Account.displayName", account.displayName)
Adrien Béraud88a52442021-04-26 12:11:41 -0400481 if (account.enable !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400482 params.set("Account.enable", this.boolToStr(account.enable))
Adrien Béraud88a52442021-04-26 12:11:41 -0400483 if (account.autoAnswer !== undefined)
484 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
485 if (account.autoAnswer !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400486 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400487 if (account.ringtonePath)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400488 params.set("Account.ringtonePath", account.ringtonePath)
Adrien Béraud88a52442021-04-26 12:11:41 -0400489 if (account.ringtoneEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400490 params.set("Account.ringtoneEnabled", this.boolToStr(account.ringtoneEnabled))
Adrien Béraud88a52442021-04-26 12:11:41 -0400491 if (account.videoEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400492 params.set("Account.videoEnabled", this.boolToStr(account.videoEnabled))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400493 if (account.useragent) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400494 params.set("Account.useragent", account.useragent)
495 params.set("Account.hasCustomUserAgent", "TRUE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400496 } else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400497 params.set("Account.hasCustomUserAgent", "FALSE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400498 }
499 if (account.audioPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400500 params.set("Account.audioPortMin", account.audioPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400501 if (account.audioPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400502 params.set("Account.audioPortMax", account.audioPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400503 if (account.videoPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400504 params.set("Account.videoPortMin", account.videoPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400505 if (account.videoPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400506 params.set("Account.videoPortMax", account.videoPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400507 if (account.localInterface)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400508 params.set("Account.localInterface", account.localInterface)
Adrien Béraud88a52442021-04-26 12:11:41 -0400509 if (account.publishedSameAsLocal !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400510 params.set("Account.publishedSameAsLocal", this.boolToStr(account.publishedSameAsLocal))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400511 if (account.localPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400512 params.set("Account.localPort", account.localPort)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400513 if (account.publishedPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400514 params.set("Account.publishedPort", account.publishedPort)
Adrien Béraud88a52442021-04-26 12:11:41 -0400515 if (account.rendezVous !== undefined)
516 params.set("Account.rendezVous", this.boolToStr(account.rendezVous))
517 if (account.upnpEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400518 params.set("Account.upnpEnabled", this.boolToStr(account.upnpEnabled))
519 return params
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400520 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400521 static vectToJs(vect) {
522 const len = vect.size()
523 const outputArr = new Array(len)
524 for (let i = 0; i < len; i++)
525 outputArr[i] = vect.get(i)
526 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400527 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400528 static mapToJs(m) {
529 const outputObj = {}
530 JamiDaemon.vectToJs(m.keys())
531 .forEach(k => outputObj[k] = m.get(k))
532 return outputObj
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400533 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400534 static vectMapToJs(vectMap) {
535 const len = vectMap.size()
536 const outputArr = new Array(len)
537 for (let i = 0; i < len; i++)
538 outputArr[i] = JamiDaemon.mapToJs(vectMap.get(i))
539 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400540 }
541
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400542 mapToNative(map){
543 const ret = new this.dring.StringMap()
Adrien Béraud86986032021-04-25 12:04:53 -0400544 for (const [key, value] of Object.entries(map))
545 ret.set(key, value)
Adrien Béraude74741b2021-04-19 13:22:54 -0400546 return ret
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400547 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400548}
549
Adrien Béraude74741b2021-04-19 13:22:54 -0400550export default JamiDaemon