blob: f25f7431e6b9d765c1039b6861a5ce06ac516874 [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 )
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 })
ervinanohf1758a42022-09-14 14:52:51 -0400277 account.setDevices(
278 );
279
280 this.accounts.push(account);
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400281 })
282 }
283
Adrien Béraud88a52442021-04-26 12:11:41 -0400284 addAccount(accountConfig) {
285 const params = this.accountDetailsToNative(accountConfig)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400286 params.set("Account.type", "RING")
Adrien Béraud88a52442021-04-26 12:11:41 -0400287 return new Promise((resolve, reject) => {
288 const accountId = this.dring.addAccount(params)
289 this.tempAccounts[accountId] = { resolve, reject }
290 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400291 }
ervinanohf1758a42022-09-14 14:52:51 -0400292
293 getDevices(accountId){
294 return JamiDaemon.mapToJs(this.dring.getKnownRingDevices(accountId));
295 }
296
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400297 getAccount(accountId) {
298 for (let i = 0; i < this.accounts.length; i++) {
299 const account = this.accounts[i]
300 if (account.getId() === accountId)
301 return account
302 }
303 return undefined
304 }
305 getAccountList() {
306 return this.accounts
307 }
Adrien Béraud0561d3c2021-05-02 11:23:54 -0400308 registerName(accountId, password, name) {
309 return new Promise((resolve, reject) => {
310 if (!name)
311 return reject(new Error("Invalid name"))
312 const account = this.getAccount(accountId)
313 if (!account)
314 return reject(new Error("Can't find account"))
315 if (account.registeringName)
316 return reject(new Error("Username already being registered"))
317 if (this.dring.registerName(accountId, password, name)) {
318 account.registeringName = { name, resolve, reject }
319 }
320 })
321 }
322
Adrien Béraudabba2e52021-04-24 21:39:56 -0400323 getConversation(accountId, conversationId) {
324 const account = this.getAccount(accountId)
325 if (account)
326 return account.getConversation(conversationId)
327 return null
328 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400329 /*getAccountDetails(accountId) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400330 return this.mapToJs(this.dring.getAccountDetails(accountId))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400331 }*/
332 setAccountDetails(accountId, details) {
Adrien Béraud86986032021-04-25 12:04:53 -0400333 this.dring.setAccountDetails(accountId, this.mapToNative(details))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400334 }
335 getAudioOutputDeviceList() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400336 return JamiDaemon.vectToJs(this.dring.getAudioOutputDeviceList())
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400337 }
338 getVolume(deviceName) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400339 return this.dring.getVolume(deviceName)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400340 }
341 setVolume(deviceName, volume) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400342 return this.dring.setVolume(deviceName, volume)
343 }
344
345 lookupName(accountId, name) {
346 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400347 if (accountId) {
348 const account = this.getAccount(accountId)
349 if (!account) {
350 reject(new Error("Can't find account"))
351 } else {
352 account.lookups.push({ name, resolve, reject })
353 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400354 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400355 this.lookups.push({ name, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400356 }
357 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400358 this.dring.lookupName(accountId || '', '', name)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400359 return p
360 }
361
362 lookupAddress(accountId, address) {
363 console.log(`lookupAddress ${accountId} ${address}`)
364 const p = new Promise((resolve, reject) => {
Adrien Béraud88a52442021-04-26 12:11:41 -0400365 if (accountId) {
366 const account = this.getAccount(accountId)
367 if (!account) {
368 reject(new Error("Can't find account"))
369 } else {
370 account.lookups.push({ address, resolve, reject })
371 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400372 } else {
Adrien Béraud88a52442021-04-26 12:11:41 -0400373 this.lookups.push({ address, resolve, reject })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400374 }
375 })
Adrien Béraud88a52442021-04-26 12:11:41 -0400376 this.dring.lookupAddress(accountId || '', '', address)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400377 return p
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400378 }
379
380 stop() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400381 this.dring.fini()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400382 }
383
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400384 addContact(accountId, contactId) {
385 this.dring.addContact(accountId, contactId)
386 const details = JamiDaemon.mapToJs(this.dring.getContactDetails(accountId, contactId))
387 if (details.conversationId) {
388 const account = this.getAccount(accountId)
389 if (account) {
390 let conversation = account.getConversation(details.conversationId)
391 if (!conversation) {
392 const members = JamiDaemon.vectMapToJs(this.dring.getConversationMembers(accountId, details.conversationId))
393 members.forEach(member => member.contact = account.getContactFromCache(member.uri))
394 conversation = new Conversation(details.conversationId, accountId, members)
395 account.addConversation(conversation)
396 }
397 }
398 }
399 return details
400 }
401
Adrien Béraud150b4782021-04-21 19:40:59 -0400402 getDefaultModerators(accountId) {
403 const account = this.getAccount(accountId)
404 if (!account) {
405 console.log(`Unknown account ${accountId}`)
406 return {}
407 }
408 return JamiDaemon.vectToJs(this.dring.getDefaultModerators(accountId))
Adrien Béraud4e287b92021-04-24 16:15:56 -0400409 .map(contactId => account.getContactFromCache(contactId))
Adrien Béraud150b4782021-04-21 19:40:59 -0400410 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400411
Adrien Béraud4e287b92021-04-24 16:15:56 -0400412 addDefaultModerator(accountId, uri) {
413 this.dring.setDefaultModerator(accountId, uri, true)
414 }
Adrien Béraud150b4782021-04-21 19:40:59 -0400415
Adrien Béraud4e287b92021-04-24 16:15:56 -0400416 removeDefaultModerator(accountId, uri) {
417 this.dring.setDefaultModerator(accountId, uri, false)
Adrien Béraud150b4782021-04-21 19:40:59 -0400418 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400419
Adrien Béraud5e9e19b2021-04-22 01:38:53 -0400420 sendMessage(accountId, conversationId, message) {
421 this.dring.sendMessage(accountId, conversationId, message, "")
422 }
423
Adrien Béraud4e287b92021-04-24 16:15:56 -0400424 loadMessages(accountId, conversationId, fromMessage) {
425 const account = this.getAccount(accountId)
426 if (!account)
427 throw new Error('Unknown account')
428 const conversation = account.getConversation(conversationId)
429 if (!conversation)
430 throw new Error(`Unknown conversation ${conversationId}`)
431
432 return new Promise((resolve, reject) => {
433 if (!conversation.requests)
434 conversation.requests = {}
435 const requestId = this.dring.loadConversationMessages(accountId, conversationId, fromMessage || "", 32)
436 conversation.requests[requestId] = {resolve, reject}
437 })
438 }
439
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400440 boolToStr(bool) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400441 return bool ? "true" : "false"
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400442 }
443
444 accountDetailsToNative(account) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400445 const params = new this.dring.StringMap()
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400446 if (account.managerUri)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400447 params.set("Account.managerUri", account.managerUri)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400448 if (account.managerUsername)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400449 params.set("Account.managerUsername", account.managerUsername)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400450 if (account.archivePassword) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400451 params.set("Account.archivePassword", account.archivePassword)
Adrien Béraud88a52442021-04-26 12:11:41 -0400452 }/* else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400453 console.log("archivePassword required")
Adrien Béraude74741b2021-04-19 13:22:54 -0400454 return
Adrien Béraud88a52442021-04-26 12:11:41 -0400455 }*/
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400456 if (account.alias)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400457 params.set("Account.alias", account.alias)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400458 if (account.displayName)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400459 params.set("Account.displayName", account.displayName)
Adrien Béraud88a52442021-04-26 12:11:41 -0400460 if (account.enable !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400461 params.set("Account.enable", this.boolToStr(account.enable))
Adrien Béraud88a52442021-04-26 12:11:41 -0400462 if (account.autoAnswer !== undefined)
463 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
464 if (account.autoAnswer !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400465 params.set("Account.autoAnswer", this.boolToStr(account.autoAnswer))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400466 if (account.ringtonePath)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400467 params.set("Account.ringtonePath", account.ringtonePath)
Adrien Béraud88a52442021-04-26 12:11:41 -0400468 if (account.ringtoneEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400469 params.set("Account.ringtoneEnabled", this.boolToStr(account.ringtoneEnabled))
Adrien Béraud88a52442021-04-26 12:11:41 -0400470 if (account.videoEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400471 params.set("Account.videoEnabled", this.boolToStr(account.videoEnabled))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400472 if (account.useragent) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400473 params.set("Account.useragent", account.useragent)
474 params.set("Account.hasCustomUserAgent", "TRUE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400475 } else {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400476 params.set("Account.hasCustomUserAgent", "FALSE")
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400477 }
478 if (account.audioPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400479 params.set("Account.audioPortMin", account.audioPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400480 if (account.audioPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400481 params.set("Account.audioPortMax", account.audioPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400482 if (account.videoPortMin)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400483 params.set("Account.videoPortMin", account.videoPortMin)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400484 if (account.videoPortMax)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400485 params.set("Account.videoPortMax", account.videoPortMax)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400486 if (account.localInterface)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400487 params.set("Account.localInterface", account.localInterface)
Adrien Béraud88a52442021-04-26 12:11:41 -0400488 if (account.publishedSameAsLocal !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400489 params.set("Account.publishedSameAsLocal", this.boolToStr(account.publishedSameAsLocal))
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400490 if (account.localPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400491 params.set("Account.localPort", account.localPort)
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400492 if (account.publishedPort)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400493 params.set("Account.publishedPort", account.publishedPort)
Adrien Béraud88a52442021-04-26 12:11:41 -0400494 if (account.rendezVous !== undefined)
495 params.set("Account.rendezVous", this.boolToStr(account.rendezVous))
496 if (account.upnpEnabled !== undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400497 params.set("Account.upnpEnabled", this.boolToStr(account.upnpEnabled))
498 return params
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400499 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400500 static vectToJs(vect) {
501 const len = vect.size()
502 const outputArr = new Array(len)
503 for (let i = 0; i < len; i++)
504 outputArr[i] = vect.get(i)
505 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400506 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400507 static mapToJs(m) {
508 const outputObj = {}
509 JamiDaemon.vectToJs(m.keys())
510 .forEach(k => outputObj[k] = m.get(k))
511 return outputObj
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400512 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400513 static vectMapToJs(vectMap) {
514 const len = vectMap.size()
515 const outputArr = new Array(len)
516 for (let i = 0; i < len; i++)
517 outputArr[i] = JamiDaemon.mapToJs(vectMap.get(i))
518 return outputArr
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400519 }
520
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400521 mapToNative(map){
522 const ret = new this.dring.StringMap()
Adrien Béraud86986032021-04-25 12:04:53 -0400523 for (const [key, value] of Object.entries(map))
524 ret.set(key, value)
Adrien Béraude74741b2021-04-19 13:22:54 -0400525 return ret
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400526 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400527}
528
Adrien Béraude74741b2021-04-19 13:22:54 -0400529export default JamiDaemon