blob: efc39c128f9589677f7cf4fb82c8d0a1b7f9c5f0 [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éraud6ecaa402021-04-06 17:37:25 -040032 this.dring = require("./dring.node")
33 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 )
254 JamiDaemon.vectToJs(this.dring.getConversations(accountId)).forEach(conversationId => {
255 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
Adrien Béraud150b4782021-04-21 19:40:59 -0400256 members.forEach(member => {
257 member.contact = account.getContactFromCache(member.uri)
258 if (!member.contact.isRegisteredNameResolved()) {
259 if (!member.uri) return
260 console.log(`lookupAddress ${accountId} ${member.uri}`)
261 member.contact.setRegisteredName(new Promise((resolve, reject) =>
262 account.lookups.push({address: member.uri, resolve, reject})
263 ).then(result => {
264 if (result.state == 0)
265 return result.name
266 else if (result.state == 1)
267 return undefined
268 else
269 return null
270 }))
271 this.dring.lookupAddress(accountId, "", member.uri)
272 }
273 })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400274 const conversation = new Conversation(conversationId, accountId, members)
275 account.addConversation(conversation)
276 })
277 this.accounts.push(account)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400278 })
279 }
280
Adrien Béraud88a52442021-04-26 12:11:41 -0400281 addAccount(accountConfig) {
282 const params = this.accountDetailsToNative(accountConfig)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400283 params.set("Account.type", "RING")
Adrien Béraud88a52442021-04-26 12:11:41 -0400284 return new Promise((resolve, reject) => {
285 const accountId = this.dring.addAccount(params)
286 this.tempAccounts[accountId] = { resolve, reject }
287 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400288 }
289 getAccount(accountId) {
290 for (let i = 0; i < this.accounts.length; i++) {
291 const account = this.accounts[i]
292 if (account.getId() === accountId)
293 return account
294 }
295 return undefined
296 }
297 getAccountList() {
298 return this.accounts
299 }
Adrien Béraud0561d3c2021-05-02 11:23:54 -0400300 registerName(accountId, password, name) {
301 return new Promise((resolve, reject) => {
302 if (!name)
303 return reject(new Error("Invalid name"))
304 const account = this.getAccount(accountId)
305 if (!account)
306 return reject(new Error("Can't find account"))
307 if (account.registeringName)
308 return reject(new Error("Username already being registered"))
309 if (this.dring.registerName(accountId, password, name)) {
310 account.registeringName = { name, resolve, reject }
311 }
312 })
313 }
314
Adrien Béraudabba2e52021-04-24 21:39:56 -0400315 getConversation(accountId, conversationId) {
316 const account = this.getAccount(accountId)
317 if (account)
318 return account.getConversation(conversationId)
319 return null
320 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400321 /*getAccountDetails(accountId) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400322 return this.mapToJs(this.dring.getAccountDetails(accountId))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400323 }*/
324 setAccountDetails(accountId, details) {
Adrien Béraud86986032021-04-25 12:04:53 -0400325 this.dring.setAccountDetails(accountId, this.mapToNative(details))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400326 }
327 getAudioOutputDeviceList() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400328 return JamiDaemon.vectToJs(this.dring.getAudioOutputDeviceList())
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400329 }
330 getVolume(deviceName) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400331 return this.dring.getVolume(deviceName)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400332 }
333 setVolume(deviceName, volume) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400334 return this.dring.setVolume(deviceName, volume)
335 }
336
337 lookupName(accountId, name) {
338 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400339 if (accountId) {
340 const account = this.getAccount(accountId)
341 if (!account) {
342 reject(new Error("Can't find account"))
343 } else {
344 account.lookups.push({ name, resolve, reject })
345 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400346 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400347 this.lookups.push({ name, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400348 }
349 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400350 this.dring.lookupName(accountId || '', '', name)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400351 return p
352 }
353
354 lookupAddress(accountId, address) {
355 console.log(`lookupAddress ${accountId} ${address}`)
356 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400357 if (accountId) {
358 const account = this.getAccount(accountId)
359 if (!account) {
360 reject(new Error("Can't find account"))
361 } else {
362 account.lookups.push({ address, resolve, reject })
363 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400364 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400365 this.lookups.push({ address, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400366 }
367 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400368 this.dring.lookupAddress(accountId || '', '', address)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400369 return p
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400370 }
371
372 stop() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400373 this.dring.fini()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400374 }
375
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400376 addContact(accountId, contactId) {
377 this.dring.addContact(accountId, contactId)
378 const details = JamiDaemon.mapToJs(this.dring.getContactDetails(accountId, contactId))
379 if (details.conversationId) {
380 const account = this.getAccount(accountId)
381 if (account) {
382 let conversation = account.getConversation(details.conversationId)
383 if (!conversation) {
384 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, details.conversationId))
385 members.forEach(member => member.contact = account.getContactFromCache(member.uri))
386 conversation = new Conversation(details.conversationId, accountId, members)
387 account.addConversation(conversation)
388 }
389 }
390 }
391 return details
392 }
393
Adrien Béraud150b4782021-04-21 19:40:59 -0400394 getDefaultModerators(accountId) {
395 const account = this.getAccount(accountId)
396 if (!account) {
397 console.log(`Unknown account ${accountId}`)
398 return {}
399 }
400 return JamiDaemon.vectToJs(this.dring.getDefaultModerators(accountId))
Adrien Béraud4e287b92021-04-24 16:15:56 -0400401 .map(contactId => account.getContactFromCache(contactId))
Adrien Béraud150b4782021-04-21 19:40:59 -0400402 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400403
Adrien Béraud4e287b92021-04-24 16:15:56 -0400404 addDefaultModerator(accountId, uri) {
405 this.dring.setDefaultModerator(accountId, uri, true)
406 }
Adrien Béraud150b4782021-04-21 19:40:59 -0400407
Adrien Béraud4e287b92021-04-24 16:15:56 -0400408 removeDefaultModerator(accountId, uri) {
409 this.dring.setDefaultModerator(accountId, uri, false)
Adrien Béraud150b4782021-04-21 19:40:59 -0400410 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400411
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400412 sendMessage(accountId, conversationId, message) {
413 this.dring.sendMessage(accountId, conversationId, message, "")
414 }
415
Adrien Béraud4e287b92021-04-24 16:15:56 -0400416 loadMessages(accountId, conversationId, fromMessage) {
417 const account = this.getAccount(accountId)
418 if (!account)
419 throw new Error('Unknown account')
420 const conversation = account.getConversation(conversationId)
421 if (!conversation)
422 throw new Error(`Unknown conversation ${conversationId}`)
423
424 return new Promise((resolve, reject) => {
425 if (!conversation.requests)
426 conversation.requests = {}
427 const requestId = this.dring.loadConversationMessages(accountId, conversationId, fromMessage || "", 32)
428 conversation.requests[requestId] = {resolve, reject}
429 })
430 }
431
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400432 boolToStr(bool) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400433 return bool ? "true" : "false"
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400434 }
435
436 accountDetailsToNative(account) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400437 const params = new this.dring.StringMap()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400438 if (account.managerUri)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400439 params.set("Account.managerUri", account.managerUri)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400440 if (account.managerUsername)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400441 params.set("Account.managerUsername", account.managerUsername)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400442 if (account.archivePassword) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400443 params.set("Account.archivePassword", account.archivePassword)
Adrien Béraud88a52442021-04-26 12:11:41 -0400444 }/* else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400445 console.log("archivePassword required")
Adrien Béraude74741b2021-04-19 13:22:54 -0400446 return
Adrien Béraud88a52442021-04-26 12:11:41 -0400447 }*/
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400448 if (account.alias)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400449 params.set("Account.alias", account.alias)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400450 if (account.displayName)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400451 params.set("Account.displayName", account.displayName)
Adrien Béraud88a52442021-04-26 12:11:41 -0400452 if (account.enable !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400453 params.set("Account.enable", this.boolToStr(account.enable))
Adrien Béraud88a52442021-04-26 12:11:41 -0400454 if (account.autoAnswer !== undefined)
455 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
456 if (account.autoAnswer !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400457 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400458 if (account.ringtonePath)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400459 params.set("Account.ringtonePath", account.ringtonePath)
Adrien Béraud88a52442021-04-26 12:11:41 -0400460 if (account.ringtoneEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400461 params.set("Account.ringtoneEnabled", this.boolToStr(account.ringtoneEnabled))
Adrien Béraud88a52442021-04-26 12:11:41 -0400462 if (account.videoEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400463 params.set("Account.videoEnabled", this.boolToStr(account.videoEnabled))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400464 if (account.useragent) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400465 params.set("Account.useragent", account.useragent)
466 params.set("Account.hasCustomUserAgent", "TRUE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400467 } else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400468 params.set("Account.hasCustomUserAgent", "FALSE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400469 }
470 if (account.audioPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400471 params.set("Account.audioPortMin", account.audioPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400472 if (account.audioPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400473 params.set("Account.audioPortMax", account.audioPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400474 if (account.videoPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400475 params.set("Account.videoPortMin", account.videoPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400476 if (account.videoPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400477 params.set("Account.videoPortMax", account.videoPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400478 if (account.localInterface)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400479 params.set("Account.localInterface", account.localInterface)
Adrien Béraud88a52442021-04-26 12:11:41 -0400480 if (account.publishedSameAsLocal !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400481 params.set("Account.publishedSameAsLocal", this.boolToStr(account.publishedSameAsLocal))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400482 if (account.localPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400483 params.set("Account.localPort", account.localPort)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400484 if (account.publishedPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400485 params.set("Account.publishedPort", account.publishedPort)
Adrien Béraud88a52442021-04-26 12:11:41 -0400486 if (account.rendezVous !== undefined)
487 params.set("Account.rendezVous", this.boolToStr(account.rendezVous))
488 if (account.upnpEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400489 params.set("Account.upnpEnabled", this.boolToStr(account.upnpEnabled))
490 return params
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400491 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400492 static vectToJs(vect) {
493 const len = vect.size()
494 const outputArr = new Array(len)
495 for (let i = 0; i < len; i++)
496 outputArr[i] = vect.get(i)
497 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400498 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400499 static mapToJs(m) {
500 const outputObj = {}
501 JamiDaemon.vectToJs(m.keys())
502 .forEach(k => outputObj[k] = m.get(k))
503 return outputObj
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400504 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400505 static vectMapToJs(vectMap) {
506 const len = vectMap.size()
507 const outputArr = new Array(len)
508 for (let i = 0; i < len; i++)
509 outputArr[i] = JamiDaemon.mapToJs(vectMap.get(i))
510 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400511 }
512
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400513 mapToNative(map){
514 const ret = new this.dring.StringMap()
Adrien Béraud86986032021-04-25 12:04:53 -0400515 for (const [key, value] of Object.entries(map))
516 ret.set(key, value)
Adrien Béraude74741b2021-04-19 13:22:54 -0400517 return ret
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400518 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400519}
520
Adrien Béraude74741b2021-04-19 13:22:54 -0400521export default JamiDaemon