blob: 2e5e47887d951a37ddcbe1c9254d2b0faef80bb5 [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éraud35e7d7c2021-04-13 03:28:39 -0400131 "ConversationReady": (accountId, conversationId) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400132 console.log(`conversationReady: ${accountId} ${conversationId}`)
133 const account = this.getAccount(accountId)
134 if (!account) {
135 console.log(`Unknown account ${accountId}`)
136 return
137 }
138 let conversation = account.getConversation(conversationId)
139 if (!conversation) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400140 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
141 members.forEach(member => member.contact = account.getContactFromCache(member.uri))
142 conversation = new Conversation(conversationId, accountId, members)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400143 account.addConversation(conversation)
144 }
145 },
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400146 "ConversationRemoved": (accountId, conversationId) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400147 console.log(`conversationRemoved: ${accountId} ${conversationId}`)
148 const account = this.getAccount(accountId)
149 if (!account) {
150 console.log(`Unknown account ${accountId}`)
151 return
152 }
153 account.removeConversation(conversationId)
154 },
Adrien Béraud4e287b92021-04-24 16:15:56 -0400155 "ConversationLoaded": (id, accountId, conversationId, messages) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400156 console.log(`conversationLoaded: ${accountId} ${conversationId}`)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400157 const account = this.getAccount(accountId)
158 if (!account) {
159 console.log(`Unknown account ${accountId}`)
160 return
161 }
162 const conversation = account.getConversation(conversationId)
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400163 if (conversation) {
Adrien Béraud86986032021-04-25 12:04:53 -0400164 //conversation.addLoadedMessages(messages)
Adrien Béraud4e287b92021-04-24 16:15:56 -0400165 const request = conversation.requests[id]
166 if (request) {
167 request.resolve(messages)
168 }
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400169 }
170 },
171 "MessageReceived": (accountId, conversationId, message) => {
172 console.log(`messageReceived: ${accountId} ${conversationId}`)
173 console.log(message)
174 const account = this.getAccount(accountId)
175 if (!account) {
176 console.log(`Unknown account ${accountId}`)
177 return
178 }
179 const conversation = account.getConversation(conversationId)
180 if (conversation) {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400181 conversation.addMessage(message)
Adrien Béraud4e287b92021-04-24 16:15:56 -0400182 if (onMessage)
183 onMessage(account, conversation, message)
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400184 }
185 },
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400186 "ConversationRequestReceived": (accountId, conversationId, request) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400187 console.log(`conversationRequestReceived: ${accountId} ${conversationId}`)
188 const account = this.getAccount(accountId)
189 if (!account) {
190 console.log(`Unknown account ${accountId}`)
191 return
192 }
193 },
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400194 "ConversationMemberEvent": (accountId, conversationId, member, event) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400195 console.log(`conversationMemberEvent: ${accountId} ${conversationId}`)
196 const account = this.getAccount(accountId)
197 if (!account) {
198 console.log(`Unknown account ${accountId}`)
199 return
200 }
201 },
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400202 "OnConversationError": (accountId, conversationId, code, what) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400203 console.log(`onConversationError: ${accountId} ${conversationId}`)
204 const account = this.getAccount(accountId)
205 if (!account) {
206 console.log(`Unknown account ${accountId}`)
207 return
208 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400209 }
210 })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400211
212 JamiDaemon.vectToJs(this.dring.getAccountList()).forEach(accountId => {
213 const account = new Account(accountId,
214 JamiDaemon.mapToJs(this.dring.getAccountDetails(accountId)),
215 JamiDaemon.mapToJs(this.dring.getVolatileAccountDetails(accountId))
216 )
217 JamiDaemon.vectToJs(this.dring.getConversations(accountId)).forEach(conversationId => {
218 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, conversationId))
Adrien Béraud150b4782021-04-21 19:40:59 -0400219 members.forEach(member => {
220 member.contact = account.getContactFromCache(member.uri)
221 if (!member.contact.isRegisteredNameResolved()) {
222 if (!member.uri) return
223 console.log(`lookupAddress ${accountId} ${member.uri}`)
224 member.contact.setRegisteredName(new Promise((resolve, reject) =>
225 account.lookups.push({address: member.uri, resolve, reject})
226 ).then(result => {
227 if (result.state == 0)
228 return result.name
229 else if (result.state == 1)
230 return undefined
231 else
232 return null
233 }))
234 this.dring.lookupAddress(accountId, "", member.uri)
235 }
236 })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400237 const conversation = new Conversation(conversationId, accountId, members)
238 account.addConversation(conversation)
239 })
240 this.accounts.push(account)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400241 })
242 }
243
Adrien Béraud88a52442021-04-26 12:11:41 -0400244 addAccount(accountConfig) {
245 const params = this.accountDetailsToNative(accountConfig)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400246 params.set("Account.type", "RING")
Adrien Béraud88a52442021-04-26 12:11:41 -0400247 return new Promise((resolve, reject) => {
248 const accountId = this.dring.addAccount(params)
249 this.tempAccounts[accountId] = { resolve, reject }
250 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400251 }
252 getAccount(accountId) {
253 for (let i = 0; i < this.accounts.length; i++) {
254 const account = this.accounts[i]
255 if (account.getId() === accountId)
256 return account
257 }
258 return undefined
259 }
260 getAccountList() {
261 return this.accounts
262 }
Adrien Béraudabba2e52021-04-24 21:39:56 -0400263 getConversation(accountId, conversationId) {
264 const account = this.getAccount(accountId)
265 if (account)
266 return account.getConversation(conversationId)
267 return null
268 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400269 /*getAccountDetails(accountId) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400270 return this.mapToJs(this.dring.getAccountDetails(accountId))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400271 }*/
272 setAccountDetails(accountId, details) {
Adrien Béraud86986032021-04-25 12:04:53 -0400273 this.dring.setAccountDetails(accountId, this.mapToNative(details))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400274 }
275 getAudioOutputDeviceList() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400276 return JamiDaemon.vectToJs(this.dring.getAudioOutputDeviceList())
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400277 }
278 getVolume(deviceName) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400279 return this.dring.getVolume(deviceName)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400280 }
281 setVolume(deviceName, volume) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400282 return this.dring.setVolume(deviceName, volume)
283 }
284
285 lookupName(accountId, name) {
286 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400287 if (accountId) {
288 const account = this.getAccount(accountId)
289 if (!account) {
290 reject(new Error("Can't find account"))
291 } else {
292 account.lookups.push({ name, resolve, reject })
293 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400294 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400295 this.lookups.push({ name, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400296 }
297 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400298 this.dring.lookupName(accountId || '', '', name)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400299 return p
300 }
301
302 lookupAddress(accountId, address) {
303 console.log(`lookupAddress ${accountId} ${address}`)
304 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400305 if (accountId) {
306 const account = this.getAccount(accountId)
307 if (!account) {
308 reject(new Error("Can't find account"))
309 } else {
310 account.lookups.push({ address, resolve, reject })
311 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400312 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400313 this.lookups.push({ address, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400314 }
315 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400316 this.dring.lookupAddress(accountId || '', '', address)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400317 return p
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400318 }
319
320 stop() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400321 this.dring.fini()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400322 }
323
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400324 addContact(accountId, contactId) {
325 this.dring.addContact(accountId, contactId)
326 const details = JamiDaemon.mapToJs(this.dring.getContactDetails(accountId, contactId))
327 if (details.conversationId) {
328 const account = this.getAccount(accountId)
329 if (account) {
330 let conversation = account.getConversation(details.conversationId)
331 if (!conversation) {
332 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, details.conversationId))
333 members.forEach(member => member.contact = account.getContactFromCache(member.uri))
334 conversation = new Conversation(details.conversationId, accountId, members)
335 account.addConversation(conversation)
336 }
337 }
338 }
339 return details
340 }
341
Adrien Béraud150b4782021-04-21 19:40:59 -0400342 getDefaultModerators(accountId) {
343 const account = this.getAccount(accountId)
344 if (!account) {
345 console.log(`Unknown account ${accountId}`)
346 return {}
347 }
348 return JamiDaemon.vectToJs(this.dring.getDefaultModerators(accountId))
Adrien Béraud4e287b92021-04-24 16:15:56 -0400349 .map(contactId => account.getContactFromCache(contactId))
Adrien Béraud150b4782021-04-21 19:40:59 -0400350 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400351
Adrien Béraud4e287b92021-04-24 16:15:56 -0400352 addDefaultModerator(accountId, uri) {
353 this.dring.setDefaultModerator(accountId, uri, true)
354 }
Adrien Béraud150b4782021-04-21 19:40:59 -0400355
Adrien Béraud4e287b92021-04-24 16:15:56 -0400356 removeDefaultModerator(accountId, uri) {
357 this.dring.setDefaultModerator(accountId, uri, false)
Adrien Béraud150b4782021-04-21 19:40:59 -0400358 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400359
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400360 sendMessage(accountId, conversationId, message) {
361 this.dring.sendMessage(accountId, conversationId, message, "")
362 }
363
Adrien Béraud4e287b92021-04-24 16:15:56 -0400364 loadMessages(accountId, conversationId, fromMessage) {
365 const account = this.getAccount(accountId)
366 if (!account)
367 throw new Error('Unknown account')
368 const conversation = account.getConversation(conversationId)
369 if (!conversation)
370 throw new Error(`Unknown conversation ${conversationId}`)
371
372 return new Promise((resolve, reject) => {
373 if (!conversation.requests)
374 conversation.requests = {}
375 const requestId = this.dring.loadConversationMessages(accountId, conversationId, fromMessage || "", 32)
376 conversation.requests[requestId] = {resolve, reject}
377 })
378 }
379
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400380 boolToStr(bool) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400381 return bool ? "true" : "false"
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400382 }
383
384 accountDetailsToNative(account) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400385 const params = new this.dring.StringMap()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400386 if (account.managerUri)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400387 params.set("Account.managerUri", account.managerUri)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400388 if (account.managerUsername)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400389 params.set("Account.managerUsername", account.managerUsername)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400390 if (account.archivePassword) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400391 params.set("Account.archivePassword", account.archivePassword)
Adrien Béraud88a52442021-04-26 12:11:41 -0400392 }/* else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400393 console.log("archivePassword required")
Adrien Béraude74741b2021-04-19 13:22:54 -0400394 return
Adrien Béraud88a52442021-04-26 12:11:41 -0400395 }*/
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400396 if (account.alias)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400397 params.set("Account.alias", account.alias)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400398 if (account.displayName)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400399 params.set("Account.displayName", account.displayName)
Adrien Béraud88a52442021-04-26 12:11:41 -0400400 if (account.enable !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400401 params.set("Account.enable", this.boolToStr(account.enable))
Adrien Béraud88a52442021-04-26 12:11:41 -0400402 if (account.autoAnswer !== undefined)
403 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
404 if (account.autoAnswer !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400405 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400406 if (account.ringtonePath)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400407 params.set("Account.ringtonePath", account.ringtonePath)
Adrien Béraud88a52442021-04-26 12:11:41 -0400408 if (account.ringtoneEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400409 params.set("Account.ringtoneEnabled", this.boolToStr(account.ringtoneEnabled))
Adrien Béraud88a52442021-04-26 12:11:41 -0400410 if (account.videoEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400411 params.set("Account.videoEnabled", this.boolToStr(account.videoEnabled))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400412 if (account.useragent) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400413 params.set("Account.useragent", account.useragent)
414 params.set("Account.hasCustomUserAgent", "TRUE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400415 } else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400416 params.set("Account.hasCustomUserAgent", "FALSE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400417 }
418 if (account.audioPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400419 params.set("Account.audioPortMin", account.audioPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400420 if (account.audioPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400421 params.set("Account.audioPortMax", account.audioPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400422 if (account.videoPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400423 params.set("Account.videoPortMin", account.videoPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400424 if (account.videoPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400425 params.set("Account.videoPortMax", account.videoPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400426 if (account.localInterface)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400427 params.set("Account.localInterface", account.localInterface)
Adrien Béraud88a52442021-04-26 12:11:41 -0400428 if (account.publishedSameAsLocal !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400429 params.set("Account.publishedSameAsLocal", this.boolToStr(account.publishedSameAsLocal))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400430 if (account.localPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400431 params.set("Account.localPort", account.localPort)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400432 if (account.publishedPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400433 params.set("Account.publishedPort", account.publishedPort)
Adrien Béraud88a52442021-04-26 12:11:41 -0400434 if (account.rendezVous !== undefined)
435 params.set("Account.rendezVous", this.boolToStr(account.rendezVous))
436 if (account.upnpEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400437 params.set("Account.upnpEnabled", this.boolToStr(account.upnpEnabled))
438 return params
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400439 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400440 static vectToJs(vect) {
441 const len = vect.size()
442 const outputArr = new Array(len)
443 for (let i = 0; i < len; i++)
444 outputArr[i] = vect.get(i)
445 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400446 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400447 static mapToJs(m) {
448 const outputObj = {}
449 JamiDaemon.vectToJs(m.keys())
450 .forEach(k => outputObj[k] = m.get(k))
451 return outputObj
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400452 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400453 static vectMapToJs(vectMap) {
454 const len = vectMap.size()
455 const outputArr = new Array(len)
456 for (let i = 0; i < len; i++)
457 outputArr[i] = JamiDaemon.mapToJs(vectMap.get(i))
458 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400459 }
460
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400461 mapToNative(map){
462 const ret = new this.dring.StringMap()
Adrien Béraud86986032021-04-25 12:04:53 -0400463 for (const [key, value] of Object.entries(map))
464 ret.set(key, value)
Adrien Béraude74741b2021-04-19 13:22:54 -0400465 return ret
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400466 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400467}
468
Adrien Béraude74741b2021-04-19 13:22:54 -0400469export default JamiDaemon