From 4b6cf4b86aeadeb16971c083c4d03b4a5bff238f Mon Sep 17 00:00:00 2001 From: Keith Maika Date: Fri, 21 Jan 2022 22:01:40 -0500 Subject: [PATCH] Update to Electron 16 Re-implement tray envelope icon for unread messages. Fix minimize on close bug. --- .gitignore | 1 + app/converse-plugins/desktop-credentials.js | 7 ++- app/converse-plugins/desktop-trayicon.js | 24 +++++++++ app/credentials.js | 56 +++++++------------- index.html | 19 +------ main.js | 13 +++-- modules/menu-service.js | 44 ++++++++------- modules/settings-service.js | 6 ++- modules/tray-service.js | 4 +- package.json | 4 +- preload.js | 42 +++++++++++++++ resources/images/envelope-16x16.png | Bin 0 -> 438 bytes resources/images/envelope-48x48.png | Bin 0 -> 1282 bytes resources/images/envelope.png | Bin 0 -> 6373 bytes resources/images/logo.png | Bin 7321 -> 17252 bytes setup.js | 7 +-- 16 files changed, 136 insertions(+), 91 deletions(-) create mode 100644 app/converse-plugins/desktop-trayicon.js create mode 100644 preload.js create mode 100644 resources/images/envelope-16x16.png create mode 100644 resources/images/envelope-48x48.png create mode 100644 resources/images/envelope.png diff --git a/.gitignore b/.gitignore index 781dce0..3772294 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules .DS_* package-lock.json dist/ +.idea/ diff --git a/app/converse-plugins/desktop-credentials.js b/app/converse-plugins/desktop-credentials.js index 08b0a24..b3ac722 100644 --- a/app/converse-plugins/desktop-credentials.js +++ b/app/converse-plugins/desktop-credentials.js @@ -1,5 +1,4 @@ -const { addCredentials } = require('../credentials.js'); -const { getCredentials, removeCredentials } = require('../credentials.js'); +const credentials = await import('../credentials.js'); converse.plugins.add('converse-desktop-credentials', { @@ -9,7 +8,7 @@ converse.plugins.add('converse-desktop-credentials', { api.listen.on('afterResourceBinding', () => { if (_converse.connection.pass) { - addCredentials( + credentials.addCredentials( converse.connectionManager, _converse.bare_jid, _converse.connection.pass @@ -18,7 +17,7 @@ converse.plugins.add('converse-desktop-credentials', { }); api.listen.on('logout', () => { - getCredentials().then((result) => removeCredentials(result.login)) + credentials.getCredentials().then((result) => credentials.removeCredentials(result.login)) }); } }); diff --git a/app/converse-plugins/desktop-trayicon.js b/app/converse-plugins/desktop-trayicon.js new file mode 100644 index 0000000..c63c627 --- /dev/null +++ b/app/converse-plugins/desktop-trayicon.js @@ -0,0 +1,24 @@ +/* global api */ + +converse.plugins.add('converse-desktop-trayicon', { + + initialize() { + const {_converse} = this; + let envelopeIsShowing = false; + + function hideEnvelope() { + if (envelopeIsShowing) { + api.trayService.hideEnvelope(); + envelopeIsShowing = false; + } + } + + window.addEventListener('focus', hideEnvelope); + _converse.api.listen.on('chatBoxInitialized', hideEnvelope); + _converse.api.listen.on('chatBoxFocused', hideEnvelope); + _converse.api.listen.on('messageNotification', () => { + api.trayService.showEnvelope(); + envelopeIsShowing = true; + }); + } +}); diff --git a/app/credentials.js b/app/credentials.js index ce0e9dd..fb2f17b 100644 --- a/app/credentials.js +++ b/app/credentials.js @@ -1,48 +1,32 @@ -/* global require, module */ +/* global api */ -const settings = require('electron-settings'); -const keytar = require('keytar') - -function addCredentials (connectionManager, login, password) { +async function addCredentials(connectionManager, login, password) { const xmppService = login.split('@').pop() - settings.setSync('connectionManager', connectionManager) - settings.setSync('login', login) - keytar.setPassword(xmppService, login, password) + await api.settings.set('connectionManager', connectionManager) + await api.settings.set('login', login) + await api.keytar.setPassword(xmppService, login, password) } -function getCredentials () { +async function getCredentials() { const credentials = {} - credentials.login = settings.getSync('login') - return new Promise((resolve) => { - if (credentials.login) { - credentials.connectionManager = settings.getSync('connectionManager') - credentials.xmppService = credentials.login.split('@').pop() - let password = keytar.getPassword(credentials.xmppService, credentials.login) - password.then((result) => { - credentials.password = result - resolve(credentials) - }) - } else { - resolve({}); - } - }); + credentials.login = await api.settings.get('login') + if (credentials.login) { + credentials.connectionManager = await api.settings.get('connectionManager') || null + credentials.xmppService = credentials.login.split('@').pop() + credentials.password = await api.keytar.getPassword(credentials.xmppService, credentials.login) + } + + return credentials; } -function removeCredentials (login) { - const xmppService = login.split('@').pop() - const passwordDelete = keytar.deletePassword(xmppService, login) - return new Promise((resolve, reject) => { - passwordDelete.then(() => { - settings.unsetSync('login') - settings.unsetSync('connectionManager') - resolve() - }, (error) => { - reject(error) - }) - }) +async function removeCredentials(login) { + const xmppService = login.split('@').pop(); + await api.keytar.deletePassword(xmppService, login); + await api.settings.unset('login'); + await api.settings.unset('connectionManager'); } -module.exports = { +export { addCredentials, getCredentials, removeCredentials diff --git a/index.html b/index.html index 44f8030..ee71c65 100644 --- a/index.html +++ b/index.html @@ -17,24 +17,9 @@
- - - - - + + diff --git a/main.js b/main.js index b5470ae..cc64f60 100644 --- a/main.js +++ b/main.js @@ -1,5 +1,6 @@ // Modules to control application life and create native browser window const { app, BrowserWindow, ipcMain, shell } = require('electron') +const path = require('path'); // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. @@ -26,9 +27,7 @@ function createWindow () { const mainWindowOptions = { zoomToPageWidth: true, webPreferences: { - nodeIntegration: true, - contextIsolation: false, - enableRemoteModule: true + preload: path.join(__dirname, 'preload.js') }, icon: './resources/images/logo.png', } @@ -88,6 +87,14 @@ function createWindow () { e.preventDefault() shell.openExternal(url) }) + + ipcMain.handle('settings', (e, method, ...args) => { + return settingsService[method].apply(settingsService, args); + }); + + ipcMain.handle('trayService', (e, method, ...args) => { + return trayService[method].apply(trayService, args); + }); } // This method will be called when Electron has finished diff --git a/modules/menu-service.js b/modules/menu-service.js index 2a9fd23..4e18122 100644 --- a/modules/menu-service.js +++ b/modules/menu-service.js @@ -1,16 +1,18 @@ /** * Module for Menu functions. */ -const {app, Menu, BrowserWindow} = require('electron') +const {app, Menu, MenuItem, BrowserWindow} = require('electron') const settingsService = require(__dirname + '/../modules/settings-service') const menuService = {} menuService.createMenu = () => { - const application = { - label: 'Converse Desktop', - submenu: [ + let converse; + const application = new Menu(); + application.append(new MenuItem({ + label: 'Converse Desktop' + , submenu: converse = Menu.buildFromTemplate([ { label: 'Reconnect', accelerator: 'CmdOrCtrl+R', @@ -23,10 +25,10 @@ menuService.createMenu = () => { { label: 'Minimize on close', type: 'checkbox', + id: 'minimize-on-close', checked: settingsService.get('minimizeOnClose'), click: () => { - this.checked = !this.checked; - settingsService.set('minimizeOnClose', this.checked); + settingsService.set('minimizeOnClose', converse.getMenuItemById('minimize-on-close').checked); } }, { @@ -40,12 +42,11 @@ menuService.createMenu = () => { app.quit() }, }, - ], - } - - const edit = { - label: 'Edit', - submenu: [ + ]) + })); + application.append(new MenuItem({ + label: 'Edit' + , submenu: Menu.buildFromTemplate([ { label: 'Undo', accelerator: 'CmdOrCtrl+Z', @@ -77,12 +78,11 @@ menuService.createMenu = () => { accelerator: 'CmdOrCtrl+A', role: 'selectAll', }, - ], - } - - const help = { - label: 'Help', - submenu: [ + ]) + })); + application.append(new MenuItem({ + label: 'Help' + , submenu: Menu.buildFromTemplate([ { label: 'Debug info', accelerator: 'F12', @@ -91,12 +91,10 @@ menuService.createMenu = () => { activeWindow.webContents.openDevTools() } } - ] - } + ]) + })); - const template = [application, edit, help] - - Menu.setApplicationMenu(Menu.buildFromTemplate(template)) + Menu.setApplicationMenu(application); } module.exports = menuService diff --git a/modules/settings-service.js b/modules/settings-service.js index fd503b8..b2ed7f9 100644 --- a/modules/settings-service.js +++ b/modules/settings-service.js @@ -1,5 +1,5 @@ /** - * Module for getting settigns in Main process. + * Module for getting settings in Main process. */ const electronSettings = require('electron-settings') @@ -18,4 +18,8 @@ settingsService.set = (itemKey, settingValue) => { electronSettings.setSync(itemKey, settingValue) } +settingsService.has = (itemKey) => electronSettings.hasSync(itemKey); + +settingsService.unset = (itemKey) => electronSettings.unsetSync(itemKey); + module.exports = settingsService diff --git a/modules/tray-service.js b/modules/tray-service.js index e6facae..7b8f39f 100644 --- a/modules/tray-service.js +++ b/modules/tray-service.js @@ -14,13 +14,13 @@ const trayService = {} const getTrayServiceIcon = (iconName = 'icon') => { let iconImage = '' if (process.platform === 'darwin') { - iconImage = iconName+'Template' + iconImage = iconName } else if (process.platform === 'win32') { iconImage = iconName+'-16x16' } else { iconImage = iconName+'-48x48' } - return path.join(__dirname, '/../resources/images/' + iconImage + '.png') + return path.join(__dirname, '..','resources','images', iconImage + '.png') } trayService.initTray = (window) => { diff --git a/package.json b/package.json index edfeb56..df26507 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ ], "license": "MPL-2.0", "devDependencies": { - "electron": "11.2.3", + "electron": "^16.0.0", "electron-builder": "^22.9.1", "electron-packager": "^15.2.0", "electron-rebuild": "^3.2.5", @@ -67,7 +67,7 @@ }, "win": { "target": "nsis", - "icon": "resources/images/logo.ico" + "icon": "resources/images/logo.png" } } } diff --git a/preload.js b/preload.js new file mode 100644 index 0000000..db32f9c --- /dev/null +++ b/preload.js @@ -0,0 +1,42 @@ +const {ipcRenderer, contextBridge} = require('electron'); +const keytar = require('keytar'); + +contextBridge.exposeInMainWorld('api', { + reload() { + ipcRenderer.send('reload') + }, + + settings: { + has(setting) { + return ipcRenderer.invoke('settings', 'has', setting); + }, + set(setting, value) { + ipcRenderer.invoke('settings', 'set', setting, value); + }, + unset(setting) { + ipcRenderer.invoke('settings', 'unset', setting); + }, + get(setting) { + return ipcRenderer.invoke('settings', 'get', setting); + } + }, + trayService: { + showEnvelope() { + ipcRenderer.invoke('trayService', 'showEnvelope'); + }, + hideEnvelope() { + ipcRenderer.invoke('trayService', 'hideEnvelope'); + } + }, + keytar: { + getPassword(service, login) { + return keytar.getPassword(service, login); + }, + setPassword(service, login, password) { + return keytar.setPassword(service, login, password); + }, + deletePassword(service, login) { + return keytar.deletePassword(service, login); + } + } +}); diff --git a/resources/images/envelope-16x16.png b/resources/images/envelope-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..19a89699166cecada48161461007cec972fd0a1d GIT binary patch literal 438 zcmV;n0ZIOeP)KR z`3KaZP3l(MOQ5tFAxN>@MJ-GG#6_Ys3mxmueLs$ix#`e3i|2uJI6OQj;va4no_5`D zDV~JAt+c{2Cp01Mdog?X!=Adt|8^U8)UnNDq6>N8-Iv7c5>-FqsZ-7@?Gu%HxDZ{i zL3(cy2}1xk#(y>GTC)qOwBiurD_4lhA8k{*5?}K{uNwwOiJrv+r~mLR&5H)7`6Gs#Panu_dXMpca(n=>etnu{I4;&M4xwyV{cJ~^hhZ@g#l;xznWrtl_ zcFjR$KL8Y&XNfmhpvpLgIdZhEo3js}wu3-)GKb|QpBdu`ljJ~Mo51adYqbqcNs@vV zHKL!{KI}?)fauQi+2oZ%Mw?Bq2dsz&mma!2k+D5CX;&Lb~Vw$tr& zcXq{h|LmSU^Sv=Q7QN5dJfUGLuc5BZP(Yek=^y*~eRq zL&=`JoHbmF6ML;vvpiZJz0=IG3khNNG6OAh@{xRu9~oxO)9Zq#^lQOep`LJ0q%(Lm zcvAl=@KP|pPsrpqCTFq}g=c6)#u}UT#vaoU2N=fX;JUy_vsWa_CJNor`}l;|5Nnm* z7L=5*tP6n`!ZvgL#RKW-3-}2cZyffUrno?N_|1q-;s(>w(H}%A!VS8(MrUY>eHQ^{ zq%zKrNJX@^oJtDtQCP+EHUzHvVhRS zNIQKQUC7#7mgPoZODJAETKtKTg98PG6>(}6fJGFHu;vU=T&4RMLlt-|THsBLTyvWC z8U=~3c{Cx_L3isHF^uE>UBSP5^W3y5Lk>F-<|hQEVIhYCk|mn;5tgIC9+bF=W}uXq z_iNeJbdev7E@#tLPz2!NEHXc6TG_4tf?jMou3xa23Mz%%15b#W)ydQyTH@(Y2QB-L zg34%oFwV-3eyM!xO)+6SXpBNtC{Z)F{iRTix-&QBq%stZBG9BDqyE6Mnj*VprLR5R zvWieNyx@}@kDE2e6VWt3)!!SYyYZP9G)w^1=>N~5M5gz5S{xpRKb)33#7Qtg#SdU< z+-4{Meng`c2`f?4dD>*&?kg!S5M>)%`+l|}DvcP1;&*UY6_Ys38#KA5?_@b!DPwtJ z;3BBB(I#AXh@w*7X93Mra?BO|C8{{iQ`B;AV(1L0L^uHrj)|7TD}02>628VrLw}To zw6Ta~eI||Zd%W1~gTo$ckX)`{3#DvkRXiFT5oRMbcv#I``(b>ZD{+B6==;4l!h=0N zj!ityFD$0n@&6mtu$|F-ncS~@7Y|ctW$#V(bc$+J$V%qX$U+BioMREEc$)Q;C#5^v z5=W-69%8^R)QK~N4HUAG zb?E=*>IOc<%W7V9xFBd(PbvwK28x;4$B9GK`TzwI@sfjRZvbMpSw(?2%RC4GMZIL7SyuIau5J(k?A zvYlK-k1(a>;`ID)Vz*0RU;v-xNn`zy=kK6BgF@XOttkbdgSmMgo~xzyf7t-fcXaE2J literal 0 HcmV?d00001 diff --git a/resources/images/envelope.png b/resources/images/envelope.png new file mode 100644 index 0000000000000000000000000000000000000000..2dbffb4c05bcf57747bd990a3cff653d1e83a279 GIT binary patch literal 6373 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 literal 0 HcmV?d00001 diff --git a/resources/images/logo.png b/resources/images/logo.png index f85f0087acbf735ccf0a1f34342c6fc749f13bb5..e88a110c0107ca4bfeba07882c8d4db415872db7 100644 GIT binary patch literal 17252 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 Dp6$5{ literal 7321 zcmZ`;RZtuZjNZi;cPP3PcbDSs?i6>2#hos&UEGViySp#0ZE-JUffh>nk>V|s>pkAX zJtW^GnQt1%jxW`TfhZ@xKC;XDbN)=fw0^(^A4b0um5VGJlsFy#fHJlhhRD41>4-vkVHR z`BoI^>@;v%Z|*yZuHkEE!9GQ3fU5#U(*!epW(NL(^l5-8ctFQ#haeiljCrXeEM`JC z`4B#|m87;&%2uD$WG=JG?$DjJ=I)KU``EOeg=Qf^bEoyobD8|5vxT0Kpy99g?qBbL z*78P#Zlba*s%c68EV!I-^)GNmt^n;s7xq@j2KWgT zhjKZVB6m}UDMbk8Re%@z{EhVP!Vl| zq0m>irqLa3*f_d)e(O8TU@U5J2o~ldzC^j(%h9He2{rk`_?BsGRc>;I0jhg5Vl9~lu)r(I}68z6M{D-j|}urwD1PdWE85R?W6p_bLm0$9^Zwcj}8y-pGt zO!#;*TT_=$k8CzXe36H{*)_ z>X2%xT1_3Ep^o-(+3UXcG3`F0d#HSe zMgT{B%>W>A#Uw2cp8hq<4rFPZ962EVP#Ga+LM6Tuq2@AVtCqK>ncwb2*5(0`+&=g^ z_aE0O4?#Y<<9*j5o@9LXF8+MqYbe5EH|fIOxF08J$?TJR9_K@ql4BK&pB00h7dHJI zTkf5Ck?Udnw&n=mW%_Uv%{is=gPaVyL`@#)P~gJXACr}8R6jV4dJKD z#RNSCv4F7Z$A>o1u>vTf-WHz@#+`iGM|GjaNWb&U6ZNU@gv6ARHlopf63S2xMWLJa zk>FS*ZxA~1A==Y;J|_updZ~`m`NQ}ad||*~M;%fb)R*Z%nzldg_fU@^pR-a*Bcl{_ zT4HneuH!zltks$sS#k=Js^|$Y3PH?QL&xR9aag*PB+0%b^@0tAixZmLhBlEMpu+qy znaL<;_v1OMqKrts=;T^`^MyLO1Ia-g@vMWqpF<6P!G<=g+2J%Nqr)XMEm-WOV5oDe zs;6zDEh0cHzuug>{6(lYC=Rc#Ay^-p`cO#o zG8x!M{!S76{v*lIxnhr2!$l;`gUIKNL0GsF69QgRrs{bmy8l@fX-yt-@!z$$u3+wR(?E2aEJ94A+)(T4^HfKjMf2ldnI7d`w|OIsu>y0qDKbJZA|_0?x%lBFd+h9p znwDPtp>|s!3zO%`VT8Ff4u$?)!HmVukcziudgvjA&5KtEPll|&G+USIvk3^+oc<$- zj@y8+TjYT2QVdsogu8k2kTABZck2B4zel`wM*`Ncf>_d9AkgcHn7pdoa2d6+7e|Kl zm2J5Fg>_5=xmMPnWdV+b?@P3kof*UKV*(FZEM7+>HlsQ|193iObuTTWS&2ACPXK=$ zyr$w5VkIISoNPO+|7H{{)9HG~80bO^;P(Mo=pr`>2u}&KbAwtqn!jDd`J~Q1)lEG8 z-r3%ob#1>4o!mVfs6;n9;Vff3Ls2J5)=Bjaad4E`)jVB6vF6GuQce>ZGdVCxXyi7& zRzVlGpLNgt25n(9rWb6cLXP?F%k>v3dG{*#oUEb1g$g_&E0Wq-Hdg9a!d?}LEQX5nqCsymQW zK6;>LnK`JWUK|$a-$s+7@QiWuu@sT;bib7A*Q{DC3d}r?+Odp>86MQQWCZ@Wu}5g` z#(tY+J^oGSNMT&!b&3g)CG6h_F{zdsAV=`9^DqBUtew8U6keJ=A@JmEGAqa{=O;zS zGMN%BgP`){_#*w$3S-O_L#<4uLft`ijvI+2E-A;sQF_E>Tq2?z_&n2PR6VwPH#u6g zvTV~M`?yO*F)x!wCe9khTX5Ob{(I$nNEuZc#xaLovX3^q>jyu~p#WomJbBVjze`I= zERjs}aB3dCnfRe9!BYbXk8FJ4pNb~uElpd<{%DM#GWGO@%nzDOKZ2Cu2vxm0^?Ixy z^_mkhI1&@0p1uLNE?s*JC%qLP!Psm+Uw@^h^iyroIjDHq!xP~|y9^HRUncWSc=14l z%(4dD5J)<&yRH7V6@8>DP)I~!Y`m)K5Bo2vkj=51m=mpe^u2*~hSdk0OUt%`uFc4b zltq{Id7|)su8d_t+uH&s8Xr}HboSzHR%PyCnE<4^I0~CZVoQQH+?%eXZt0f?mP(AL z>%c&T{{VRHHL)r~!TdK1E|J5-^c1L4uUz3*Pr9KtMZZK`&1f0*u;n{vxuEu>WYvLm zSw1B*rc&Y;$+es6Rjq0WcYdbM>6mEP>1oG$t4B7SVIXAHLpMTvQ!{1 z=;Y94yY*g|UZ9#4YVE|Y>Q5KLT)W`A!!vQ}|Dvvh!1W;9kx3r@*+>=n0(3JnQ+Ug5 zO=CGvwCq7$wjq-3DL6pBQJra7uVNXORc<{U!6~V6DCqc^t$!|a>WU&8zeqv-#tLSo z0shm~^s|lWR%RlZW7OzijkbQs#OH0-3u~F+3(Rag$BicUA{^TA!A1HS`K-tD=ig|4 ztFs1N%{ny_{cB|cVIx07Vr<` z4!%MkCPICFeWB?Ww_9umQpH5hM%R4tzVQ^H=Z92*K`+GL=VmbGlR|&s?BDRSwi6|h zA99LOv?S=TlIW(+Ppsc0T)u5kK9rdS&vU-h{rw-5krW2beWXgPGG0Gb*aeOj6y#Y~ z^`e*)s!JDXBGlV}>X00?hE5MCi-LFir*;(RlbV0oWnfYHd(TQ6yzdplj}8Z6o(S=_ zc^f<{4mPXt`c`n^4gEqx_?WePy$8Ml(m^coyi8B zoW)wU_2+n1jlmU?6awoux$0~DWfhM;TXO(fv~LRDa}T-HmvZ=Kh(o?0GM&DwJyguD ztv5xY%X|lo`o4Iu%nL{PwOztA-iOzn3(@vXV=aaXPSV2mdB4w%P-4ez9f+IeT-R_Z zEDIihOxaUV^2Zv+&?T?5F(gx_xzl$?-25^%$nDWc?Ynx_U9??XuPEe!{N8Ya@8cW1 z=wW(>iws(g@`+;J`%?H=F*p3l|Y4(n;~V(_40H z0HyC&_duu4gLtkF%+*dTAU2AEQiR33fWK7L#L@O61oR8eb^PzAf~{>bpyEE{fTs|a z%7D3U0jhxvWF~a>O{Qy?h zduqlevFov^e&}bZ|J7Ll3&kFdiJ^ABsV8v~vcZp=9g6~y*{h|u9siWCUh$#g0Kj^B zy!p=9$X2&iS{X#TwFz}O=%PVfHmV=JV;j*Vuh$p3Z)2_vlYG{uly^a7h78(SKem{K zYraYbgN5$G_ec8~0u;`SS`mU*$7n!fpJyl`2NmZBPYI?NTDnMRNWVyZAbdQ37jniATiH;tL_DgWuWm3KMYid#XFFzG(qgE>7mKc)JSD~0-Oq|8ttr{HLYFLK zq?~{A&Vc1kL{>3MkG_@pC>OUQQg^y~?x+=6GtJT>-%kN)Y~*2s(JBPDv z=E24vn2DGEVttJKK$NVC2hF* zeKtZQj$_X;TW8{GhfBC2jrF*_Djh-cUKPAZ`-Nm%t239D9RDG9MKp2e@VA0vC0_#80h6>G zG`Pz_9w~kHDkd>7)$`bjk-!9#OJ4uPras3Ga(O)AQl{u_R+zuif{I`SNWYc-dY+)2E_INxIb`H!r!XdN}F-gwHkN*0S|8fsMG*%MqgpvPIuBb_S-J|!w z@>0kI)y7sy8)WuIQ{1r}`6gg+((S!@HLj8eXm|2b+N)f@k?-w$DC-9R$w5z%(!yIf?ed z*{fD^n%?odU6W1R3Ho2saqDAPQcQMCOGK#hl-k2^Hj~bla)-s6lFj3SEnF7m>oSwU zmi2G`PGMdMJ3jJ=g2f>{Tqc4(?NP^hOX}W5oWpk>HUhI^moJn9J4f6}iwdvHDdT80 z;T2)&o%=;a)VOoKb&`t(VWRnGukecQkk&-w`Id_B)PoOhKUUr@<#=EcW$QL~at1B< zSpR3L{DyPtkM2>$D|DxDZ9CkGwiq=O<+MtOScH!5UUj%W^6tsGlewey)zI1>L)wN( z{{hk)Mz6#VYA7@(I)e!c8nDk%oKq^rzasbqEAm9;rx%M>gXNqWfdI=ZuZv1>^oeSJ zlD~;^hm4w$m`zxxWX96K&-*=<0J8F{H&KM!2ZCvtXss?9pRhX>ry?@EIf>+6#^HZ8 zeY?@3KR@o(8*rMZqbF4e{^h$<5Z~7v6wq}$?4Thi|4Or!G5R}EQfZ|`?1C4Y^z8`) z-4JDhOcKZ*AQf-YUrYWjP;eaoz9b?1mFaolp-!|62i5%D^7f+=CUGEpA`xE-W4sCW z6v?DnS4?itpo&2IuEJ^xJcYxP)SXQcEtdFxBasMUCqrz>>nlS)XBV*8d+ll>i2_7c_0d0efr5POlX92Q-5=gk@`f|`yf6T1!F1u;j^AW50CjcWVL6O zlB2TImIu5q%S9m)6^!!qAk?PF>99+!lpP+0KmF%%LBO4a=S)Myomgv3>Pin=wlok+ zPRE#zHloBY%PFz|MTPZkh7L3FVwR-hjj2j|d35yfy{4~wgti3M1C!DLCvqmHD4t{5 zX^&#YLuL_#dl=leJz^cud)d~DE560~rN{-e1aFee46%Yr5K{dqCqT$jr~F&!B#ZB* zK+_Y$2ev`gI^Sa?qWiQUUq?_t}+wod>i1CDQI^BEHUnZp!dlx;0|vc4fg#B!^$ zEAazqx|y7&;p#zZd)Ok(xfOT1NU~H1ir6;JTN(X2xQIuhOeG%gb(AKCoo{8_AG?N9 ztiQ!42UBV4e8{7D0`t`NIeU4O*;Uye?U*EC9Tei*S62Pj>2HN;CZ-<(&mg_10)N{l7z{?sAb?*#^F-jUE=#}Y*u zD?^<-A7O(mIq%DyynKLdOLAiUN=BB5Ia4;e~z0cEE z95VX41kXsm#yS`O;Ng+Pmey$FSEgD1x%MT#Ti1N{Cj*VLK5pms zgj!I2S61E5b;lCf*K{WQRyU2lg3?Oc6WzeMV)<1Qe3B^Q+^xHVK&Dum=T2?P5KZwi z{OP=;^Y5!`P;59^DM^CkEnqHlczV_36I*3@BWKn{PRmLg!%lVj|9Ahxbinf1YK7g*^QtnK*RAg;fEW^$*zK*_(GkGSCSr2*B zwX$0(ZORscPR@%w{J~rBX`mB{d{`{}{A(bgqCxK1D@5Mai*!qF={>QD zRNRPah*3@I5^e?B@no}KUJ>$kuyM#SF6~^4g!@gJ4eK!;H>VnM5Gyv8zLqVG88qcX zAU(JK@w-jfpu26{Q-308&S&y3zy5jl;UHJwSx5YnSLot%GC!nV!dPFLi!O)iIfJB49!Ibvod0QDCNZz|zs-_@VI3Hn~Y?^;`;nV|-H>L3@iPg;YUC=MIP7 z#L(m$zX9t35eU}E1n7-*S|-OCdaR#)1D)Th?ag@jzeUH-yQgXW5!E|Y&Bes)Q> zdfcSO!^Om7>N0r5Vj?Qj6yBS6+8L5MyF0KfujLw^{(E_*K(RM1dUkpA(DI2R1YRV> zR=4p=UM8E-YmD7<&%mLzMd(L$ezcq+Oxov`bZ)!b7rf87n>^VSB7lTh?H zUF5$W-ScmuF+4*V{J9IoL0Xz+u*|AMgD1%lr*wZdMp=Yfk{$EG`cv6$tmffehXu3a zze=cKL&L@LreCb_@%LpQvdNe~A&mW*@|fxKI{rK8B26j_gQ0^bH^1WUk>R(vIJ6?A zf^Bk4K~c{Y_&kLvz>&k>!zc+qH7Nog(2i@}H}ramJ!e1W|9IGeY!<zlN+dwkfz)t}pxwDm3SI*SA z!(W)GHaAQ_zb^rFa#IFDtm)jAGzjU<#W)zctLc~c_WRnjp>)pWX_@%N633fA1bNtA zO#5y0L3WwDbG6}eu^O!;n(b3U%g*=Sr?`*AB)N>J?h@FQQw-IQ)?+4JblMg$m3?C2 zq8^Nqm7al^z=?E(|6QS|sVph(J`d@HG;LMyt0wkFn&vSdzn}cn)KW^o9dX~{AuyZG zCDCw7bo`ONX>v}woifEN&)u_A=gMfX41o!xsp1&ly%A84 zaXIQwW|U!9q}?nnkX)Rj@%kzVix(om^n=rIV`=KbucjL@iJ*1tdBYyz*Dj+Pn@J3$ z>){KorPKPmsrYRLfv4k)XsqS+_S}lg;G6^cG}i$>6#H;VmRAoN`?rryMur;1my2MkqKkFoE^re$t=^vtvO@8nb+lF z@kN^n&yc!`>opv1GF$%jLw%tNjuP>EQqxTc<<1pDsBec^x==0k4x?VOlLZuK3DccR=i}RAl5G4x1W#`VSErEwpHLeDBm74Is3~bHHp|;Y{||CBr?3D3 diff --git a/setup.js b/setup.js index a677813..7337cde 100644 --- a/setup.js +++ b/setup.js @@ -1,5 +1,6 @@ -require('./app/converse-plugins/desktop-credentials.js'); -const{ getCredentials } = require('./app/credentials.js') +await import('./app/converse-plugins/desktop-credentials.js') +await import('./app/converse-plugins/desktop-trayicon.js') +const getCredentials = (await import('./app/credentials.js')).getCredentials; async function initialize () { @@ -39,7 +40,7 @@ async function initialize () { theme: 'concord', view_mode: 'fullscreen', websocket_url, - whitelisted_plugins: ['converse-debug', 'converse-desktop-credentials'], + whitelisted_plugins: ['converse-debug', 'converse-desktop-credentials', 'converse-desktop-trayicon'], }); }