blob: 08dd3cc5c8d5c2c7e14b856d1432a5225fb6f6ac [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({
34 "AccountsChanged": () => {
35 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 },
51 "AccountDetailsChanged": (accountId, details) => {
52 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 },
60 "VolatileDetailsChanged": (accountId, details) => {
61 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 },
69 "IncomingAccountMessage": (accountId, from, message) => {
70 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éraud88a52442021-04-26 12:11:41 -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 },
103 "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éraud0561d3c2021-05-02 11:23:54 -0400131 "NameRegistrationEnded": (accountId, state, name) => {
132 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éraud35e7d7c2021-04-13 03:28:39 -0400145 "ConversationReady": (accountId, conversationId) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400146 console.log(`conversationReady: ${accountId} ${conversationId}`)
147 const account = this.getAccount(accountId)
148 if (!account) {
149 console.log(`Unknown account ${accountId}`)
150 return
151 }
152 let conversation = account.getConversation(conversationId)
153 if (!conversation) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400154 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
155 members.forEach(member => member.contact = account.getContactFromCache(member.uri))
156 conversation = new Conversation(conversationId, accountId, members)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400157 account.addConversation(conversation)
158 }
159 },
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400160 "ConversationRemoved": (accountId, conversationId) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400161 console.log(`conversationRemoved: ${accountId} ${conversationId}`)
162 const account = this.getAccount(accountId)
163 if (!account) {
164 console.log(`Unknown account ${accountId}`)
165 return
166 }
167 account.removeConversation(conversationId)
168 },
Adrien Béraud4e287b92021-04-24 16:15:56 -0400169 "ConversationLoaded": (id, accountId, conversationId, messages) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400170 console.log(`conversationLoaded: ${accountId} ${conversationId}`)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400171 const account = this.getAccount(accountId)
172 if (!account) {
173 console.log(`Unknown account ${accountId}`)
174 return
175 }
176 const conversation = account.getConversation(conversationId)
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400177 if (conversation) {
Adrien Béraud86986032021-04-25 12:04:53 -0400178 //conversation.addLoadedMessages(messages)
Adrien Béraud4e287b92021-04-24 16:15:56 -0400179 const request = conversation.requests[id]
180 if (request) {
181 request.resolve(messages)
182 }
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400183 }
184 },
185 "MessageReceived": (accountId, conversationId, message) => {
186 console.log(`messageReceived: ${accountId} ${conversationId}`)
187 console.log(message)
188 const account = this.getAccount(accountId)
189 if (!account) {
190 console.log(`Unknown account ${accountId}`)
191 return
192 }
193 const conversation = account.getConversation(conversationId)
194 if (conversation) {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400195 conversation.addMessage(message)
Adrien Béraud4e287b92021-04-24 16:15:56 -0400196 if (onMessage)
197 onMessage(account, conversation, message)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400198 }
199 },
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400200 "ConversationRequestReceived": (accountId, conversationId, request) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400201 console.log(`conversationRequestReceived: ${accountId} ${conversationId}`)
202 const account = this.getAccount(accountId)
203 if (!account) {
204 console.log(`Unknown account ${accountId}`)
205 return
206 }
207 },
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400208 "ConversationMemberEvent": (accountId, conversationId, member, event) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400209 console.log(`conversationMemberEvent: ${accountId} ${conversationId}`)
210 const account = this.getAccount(accountId)
211 if (!account) {
212 console.log(`Unknown account ${accountId}`)
213 return
214 }
215 },
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400216 "OnConversationError": (accountId, conversationId, code, what) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400217 console.log(`onConversationError: ${accountId} ${conversationId}`)
218 const account = this.getAccount(accountId)
219 if (!account) {
220 console.log(`Unknown account ${accountId}`)
221 return
222 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400223 }
224 })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400225
226 JamiDaemon.vectToJs(this.dring.getAccountList()).forEach(accountId => {
227 const account = new Account(accountId,
228 JamiDaemon.mapToJs(this.dring.getAccountDetails(accountId)),
229 JamiDaemon.mapToJs(this.dring.getVolatileAccountDetails(accountId))
230 )
231 JamiDaemon.vectToJs(this.dring.getConversations(accountId)).forEach(conversationId => {
232 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
Adrien Béraud150b4782021-04-21 19:40:59 -0400233 members.forEach(member => {
234 member.contact = account.getContactFromCache(member.uri)
235 if (!member.contact.isRegisteredNameResolved()) {
236 if (!member.uri) return
237 console.log(`lookupAddress ${accountId} ${member.uri}`)
238 member.contact.setRegisteredName(new Promise((resolve, reject) =>
239 account.lookups.push({address: member.uri, resolve, reject})
240 ).then(result => {
241 if (result.state == 0)
242 return result.name
243 else if (result.state == 1)
244 return undefined
245 else
246 return null
247 }))
248 this.dring.lookupAddress(accountId, "", member.uri)
249 }
250 })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400251 const conversation = new Conversation(conversationId, accountId, members)
252 account.addConversation(conversation)
253 })
254 this.accounts.push(account)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400255 })
256 }
257
Adrien Béraud88a52442021-04-26 12:11:41 -0400258 addAccount(accountConfig) {
259 const params = this.accountDetailsToNative(accountConfig)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400260 params.set("Account.type", "RING")
Adrien Béraud88a52442021-04-26 12:11:41 -0400261 return new Promise((resolve, reject) => {
262 const accountId = this.dring.addAccount(params)
263 this.tempAccounts[accountId] = { resolve, reject }
264 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400265 }
266 getAccount(accountId) {
267 for (let i = 0; i < this.accounts.length; i++) {
268 const account = this.accounts[i]
269 if (account.getId() === accountId)
270 return account
271 }
272 return undefined
273 }
274 getAccountList() {
275 return this.accounts
276 }
Adrien Béraud0561d3c2021-05-02 11:23:54 -0400277 registerName(accountId, password, name) {
278 return new Promise((resolve, reject) => {
279 if (!name)
280 return reject(new Error("Invalid name"))
281 const account = this.getAccount(accountId)
282 if (!account)
283 return reject(new Error("Can't find account"))
284 if (account.registeringName)
285 return reject(new Error("Username already being registered"))
286 if (this.dring.registerName(accountId, password, name)) {
287 account.registeringName = { name, resolve, reject }
288 }
289 })
290 }
291
Adrien Béraudabba2e52021-04-24 21:39:56 -0400292 getConversation(accountId, conversationId) {
293 const account = this.getAccount(accountId)
294 if (account)
295 return account.getConversation(conversationId)
296 return null
297 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400298 /*getAccountDetails(accountId) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400299 return this.mapToJs(this.dring.getAccountDetails(accountId))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400300 }*/
301 setAccountDetails(accountId, details) {
Adrien Béraud86986032021-04-25 12:04:53 -0400302 this.dring.setAccountDetails(accountId, this.mapToNative(details))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400303 }
304 getAudioOutputDeviceList() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400305 return JamiDaemon.vectToJs(this.dring.getAudioOutputDeviceList())
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400306 }
307 getVolume(deviceName) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400308 return this.dring.getVolume(deviceName)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400309 }
310 setVolume(deviceName, volume) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400311 return this.dring.setVolume(deviceName, volume)
312 }
313
314 lookupName(accountId, name) {
315 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400316 if (accountId) {
317 const account = this.getAccount(accountId)
318 if (!account) {
319 reject(new Error("Can't find account"))
320 } else {
321 account.lookups.push({ name, resolve, reject })
322 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400323 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400324 this.lookups.push({ name, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400325 }
326 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400327 this.dring.lookupName(accountId || '', '', name)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400328 return p
329 }
330
331 lookupAddress(accountId, address) {
332 console.log(`lookupAddress ${accountId} ${address}`)
333 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400334 if (accountId) {
335 const account = this.getAccount(accountId)
336 if (!account) {
337 reject(new Error("Can't find account"))
338 } else {
339 account.lookups.push({ address, resolve, reject })
340 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400341 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400342 this.lookups.push({ address, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400343 }
344 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400345 this.dring.lookupAddress(accountId || '', '', address)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400346 return p
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400347 }
348
349 stop() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400350 this.dring.fini()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400351 }
352
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400353 addContact(accountId, contactId) {
354 this.dring.addContact(accountId, contactId)
355 const details = JamiDaemon.mapToJs(this.dring.getContactDetails(accountId, contactId))
356 if (details.conversationId) {
357 const account = this.getAccount(accountId)
358 if (account) {
359 let conversation = account.getConversation(details.conversationId)
360 if (!conversation) {
361 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, details.conversationId))
362 members.forEach(member => member.contact = account.getContactFromCache(member.uri))
363 conversation = new Conversation(details.conversationId, accountId, members)
364 account.addConversation(conversation)
365 }
366 }
367 }
368 return details
369 }
370
Adrien Béraud150b4782021-04-21 19:40:59 -0400371 getDefaultModerators(accountId) {
372 const account = this.getAccount(accountId)
373 if (!account) {
374 console.log(`Unknown account ${accountId}`)
375 return {}
376 }
377 return JamiDaemon.vectToJs(this.dring.getDefaultModerators(accountId))
Adrien Béraud4e287b92021-04-24 16:15:56 -0400378 .map(contactId => account.getContactFromCache(contactId))
Adrien Béraud150b4782021-04-21 19:40:59 -0400379 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400380
Adrien Béraud4e287b92021-04-24 16:15:56 -0400381 addDefaultModerator(accountId, uri) {
382 this.dring.setDefaultModerator(accountId, uri, true)
383 }
Adrien Béraud150b4782021-04-21 19:40:59 -0400384
Adrien Béraud4e287b92021-04-24 16:15:56 -0400385 removeDefaultModerator(accountId, uri) {
386 this.dring.setDefaultModerator(accountId, uri, false)
Adrien Béraud150b4782021-04-21 19:40:59 -0400387 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400388
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400389 sendMessage(accountId, conversationId, message) {
390 this.dring.sendMessage(accountId, conversationId, message, "")
391 }
392
Adrien Béraud4e287b92021-04-24 16:15:56 -0400393 loadMessages(accountId, conversationId, fromMessage) {
394 const account = this.getAccount(accountId)
395 if (!account)
396 throw new Error('Unknown account')
397 const conversation = account.getConversation(conversationId)
398 if (!conversation)
399 throw new Error(`Unknown conversation ${conversationId}`)
400
401 return new Promise((resolve, reject) => {
402 if (!conversation.requests)
403 conversation.requests = {}
404 const requestId = this.dring.loadConversationMessages(accountId, conversationId, fromMessage || "", 32)
405 conversation.requests[requestId] = {resolve, reject}
406 })
407 }
408
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400409 boolToStr(bool) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400410 return bool ? "true" : "false"
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400411 }
412
413 accountDetailsToNative(account) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400414 const params = new this.dring.StringMap()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400415 if (account.managerUri)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400416 params.set("Account.managerUri", account.managerUri)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400417 if (account.managerUsername)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400418 params.set("Account.managerUsername", account.managerUsername)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400419 if (account.archivePassword) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400420 params.set("Account.archivePassword", account.archivePassword)
Adrien Béraud88a52442021-04-26 12:11:41 -0400421 }/* else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400422 console.log("archivePassword required")
Adrien Béraude74741b2021-04-19 13:22:54 -0400423 return
Adrien Béraud88a52442021-04-26 12:11:41 -0400424 }*/
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400425 if (account.alias)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400426 params.set("Account.alias", account.alias)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400427 if (account.displayName)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400428 params.set("Account.displayName", account.displayName)
Adrien Béraud88a52442021-04-26 12:11:41 -0400429 if (account.enable !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400430 params.set("Account.enable", this.boolToStr(account.enable))
Adrien Béraud88a52442021-04-26 12:11:41 -0400431 if (account.autoAnswer !== undefined)
432 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
433 if (account.autoAnswer !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400434 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400435 if (account.ringtonePath)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400436 params.set("Account.ringtonePath", account.ringtonePath)
Adrien Béraud88a52442021-04-26 12:11:41 -0400437 if (account.ringtoneEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400438 params.set("Account.ringtoneEnabled", this.boolToStr(account.ringtoneEnabled))
Adrien Béraud88a52442021-04-26 12:11:41 -0400439 if (account.videoEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400440 params.set("Account.videoEnabled", this.boolToStr(account.videoEnabled))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400441 if (account.useragent) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400442 params.set("Account.useragent", account.useragent)
443 params.set("Account.hasCustomUserAgent", "TRUE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400444 } else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400445 params.set("Account.hasCustomUserAgent", "FALSE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400446 }
447 if (account.audioPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400448 params.set("Account.audioPortMin", account.audioPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400449 if (account.audioPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400450 params.set("Account.audioPortMax", account.audioPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400451 if (account.videoPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400452 params.set("Account.videoPortMin", account.videoPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400453 if (account.videoPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400454 params.set("Account.videoPortMax", account.videoPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400455 if (account.localInterface)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400456 params.set("Account.localInterface", account.localInterface)
Adrien Béraud88a52442021-04-26 12:11:41 -0400457 if (account.publishedSameAsLocal !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400458 params.set("Account.publishedSameAsLocal", this.boolToStr(account.publishedSameAsLocal))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400459 if (account.localPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400460 params.set("Account.localPort", account.localPort)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400461 if (account.publishedPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400462 params.set("Account.publishedPort", account.publishedPort)
Adrien Béraud88a52442021-04-26 12:11:41 -0400463 if (account.rendezVous !== undefined)
464 params.set("Account.rendezVous", this.boolToStr(account.rendezVous))
465 if (account.upnpEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400466 params.set("Account.upnpEnabled", this.boolToStr(account.upnpEnabled))
467 return params
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400468 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400469 static vectToJs(vect) {
470 const len = vect.size()
471 const outputArr = new Array(len)
472 for (let i = 0; i < len; i++)
473 outputArr[i] = vect.get(i)
474 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400475 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400476 static mapToJs(m) {
477 const outputObj = {}
478 JamiDaemon.vectToJs(m.keys())
479 .forEach(k => outputObj[k] = m.get(k))
480 return outputObj
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400481 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400482 static vectMapToJs(vectMap) {
483 const len = vectMap.size()
484 const outputArr = new Array(len)
485 for (let i = 0; i < len; i++)
486 outputArr[i] = JamiDaemon.mapToJs(vectMap.get(i))
487 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400488 }
489
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400490 mapToNative(map){
491 const ret = new this.dring.StringMap()
Adrien Béraud86986032021-04-25 12:04:53 -0400492 for (const [key, value] of Object.entries(map))
493 ret.set(key, value)
Adrien Béraude74741b2021-04-19 13:22:54 -0400494 return ret
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400495 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400496}
497
Adrien Béraude74741b2021-04-19 13:22:54 -0400498export default JamiDaemon