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