From c79c26bea3ad2b08d96ba6ec5a1fd7e0cc5c05d9 Mon Sep 17 00:00:00 2001 From: Ismael Martinez Ramos Date: Thu, 4 Apr 2024 10:49:34 +0100 Subject: [PATCH] adding how to debug in bug report, moving react logic into its own handler, moving theme.js to use react instead of angular, change regex in mainAppWindow to allow for v1 and v2 versions and removing some rough lines --- .github/ISSUE_TEMPLATE/bug_report.md | 9 +++++ app/appConfiguration/index.js | 2 +- app/browser/tools/activityHub.js | 3 +- app/browser/tools/instance.js | 12 ------ app/browser/tools/reactHandler.js | 20 ++++++++++ app/browser/tools/theme.js | 13 ++++--- app/browser/tools/wakeLock.js | 56 ++++++++++++++-------------- app/index.js | 2 +- app/mainAppWindow/index.js | 8 ++-- app/menus/application.js | 2 +- app/menus/tray.js | 2 +- app/spellCheckProvider/codes.js | 2 +- app/spellCheckProvider/index.js | 2 +- app/streamSelector/browser.js | 1 - app/streamSelector/index.js | 2 - scripts/afterpack.js | 29 +++++++------- 16 files changed, 90 insertions(+), 75 deletions(-) create mode 100644 app/browser/tools/reactHandler.js diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b44d994c..1cb973b5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -28,5 +28,14 @@ If applicable, add screenshots to help explain your problem. - Installation package [deb, rpm, snap, AppImage, tar.gz, source...] - Version [e.g. 0.1.17] +**Debug** +When possible, please run the application from the terminal using `--webDebug` and try to reproduce the error. + +The provide in this section the output from both the terminal and the browser debug console. + +```bash +teams-for-linux --webDebug --appLogLevels=error,info,warn,debug +``` + **Additional context** Add any other context about the problem here. diff --git a/app/appConfiguration/index.js b/app/appConfiguration/index.js index b7defbbc..c05ce23d 100644 --- a/app/appConfiguration/index.js +++ b/app/appConfiguration/index.js @@ -47,4 +47,4 @@ class AppConfiguration { } } -module.exports = { AppConfiguration }; \ No newline at end of file +module.exports = { AppConfiguration }; diff --git a/app/browser/tools/activityHub.js b/app/browser/tools/activityHub.js index 2976ca43..5864943b 100644 --- a/app/browser/tools/activityHub.js +++ b/app/browser/tools/activityHub.js @@ -1,4 +1,5 @@ const instance = require('./instance'); +const ReactHandler = require('./reactHandler'); /** * @type {Array<{handler:(data)=>void,event:string,handle:number}>} */ @@ -56,7 +57,7 @@ class ActivityHub { * @param {number} state */ setMachineState(state) { - const teams2IdleTracker = instance.getTeams2IdleTracker(); + const teams2IdleTracker = ReactHandler.getTeams2IdleTracker(); if (teams2IdleTracker) { try { console.log(`setMachineState teams2 state=${state}`); diff --git a/app/browser/tools/instance.js b/app/browser/tools/instance.js index c64a6239..2939c0d5 100644 --- a/app/browser/tools/instance.js +++ b/app/browser/tools/instance.js @@ -15,18 +15,6 @@ class Instance { return await this.whenReady(tries + 1); } } - - getTeams2ReactElement() { - return document.getElementById('app'); - } - - getTeams2CoreServices() { - return this.getTeams2ReactElement()?._reactRootContainer?._internalRoot?.current?.updateQueue?.baseState?.element?.props?.coreServices; - } - - getTeams2IdleTracker() { - return this.getTeams2CoreServices()?.clientState?._idleTracker; - } } function getAppObjects() { diff --git a/app/browser/tools/reactHandler.js b/app/browser/tools/reactHandler.js new file mode 100644 index 00000000..3ebc6ea2 --- /dev/null +++ b/app/browser/tools/reactHandler.js @@ -0,0 +1,20 @@ +class ReactHandler { + + _getTeams2ReactElement() { + return document.getElementById('app'); + } + + _getTeams2CoreServices() { + return this._getTeams2ReactElement()?._reactRootContainer?._internalRoot?.current?.updateQueue?.baseState?.element?.props?.coreServices; + } + + getTeams2IdleTracker() { + return this._getTeams2CoreServices()?.clientState?._idleTracker; + } + + getTeams2ClientPreferences() { + return this._getTeams2CoreServices()?.clientPreferences?.clientPreferences; + } +} + +module.exports = new ReactHandler(); \ No newline at end of file diff --git a/app/browser/tools/theme.js b/app/browser/tools/theme.js index 2d28795d..a9add77e 100644 --- a/app/browser/tools/theme.js +++ b/app/browser/tools/theme.js @@ -1,4 +1,4 @@ -const instance = require('./instance'); +const ReactHandler = require('./reactHandler'); class ThemeManager { /** @@ -8,17 +8,18 @@ class ThemeManager { init(config, ipcRenderer) { this.ipcRenderer = ipcRenderer; this.config = config; + ReactHandler.getTeams2ClientPreferences().followOsTheme = config.followSystemTheme; if (config.followSystemTheme) { - this.ipcRenderer.on('system-theme-changed', this.applyTheme); + console.log('followSystemTheme', config.followSystemTheme); + this.ipcRenderer.on('system-theme-changed', this.applyTheme); } } applyTheme = async (event, ...args) => { const theme = args[0] ? 'dark' : 'default'; - const inst = await instance.whenReady().catch(() => { - console.error('Failed to apply Theme'); - }); - inst.controller.layoutService.setTheme(theme); + const clientPreferences = ReactHandler.getTeams2ClientPreferences(); + clientPreferences.useTheme = theme; + console.log('Theme changed to', theme); } } diff --git a/app/browser/tools/wakeLock.js b/app/browser/tools/wakeLock.js index 3e673277..0ff7de98 100644 --- a/app/browser/tools/wakeLock.js +++ b/app/browser/tools/wakeLock.js @@ -1,36 +1,36 @@ var _WakeLock_lock = new WeakMap(); class WakeLock { - constructor() { - _WakeLock_lock.set(this, null); - } + constructor() { + _WakeLock_lock.set(this, null); + } - async enable() { - try { - var lock = await navigator.wakeLock.request('screen'); - lock.addEventListener('release', () => { - console.log('Wake Lock was released'); - }); - console.log('Wake Lock is active'); - _WakeLock_lock.set(this, lock); + async enable() { + try { + var lock = await navigator.wakeLock.request('screen'); + lock.addEventListener('release', () => { + console.log('Wake Lock was released'); + }); + console.log('Wake Lock is active'); + _WakeLock_lock.set(this, lock); - } catch (err) { - console.error(`${err.name}, ${err.message}`); - } - } + } catch (err) { + console.error(`${err.name}, ${err.message}`); + } + } - async disable() { - var lock = _WakeLock_lock.get(this); - if (!lock) { - return; - } - try { - await lock.release(); - lock = null; - _WakeLock_lock.set(this, lock); - } catch (err) { - console.error(`${err.name}, ${err.message}`); - } - } + async disable() { + var lock = _WakeLock_lock.get(this); + if (!lock) { + return; + } + try { + await lock.release(); + lock = null; + _WakeLock_lock.set(this, lock); + } catch (err) { + console.error(`${err.name}, ${err.message}`); + } + } } const wakeLock = new WakeLock(); diff --git a/app/index.js b/app/index.js index 865e52d9..c1370eef 100644 --- a/app/index.js +++ b/app/index.js @@ -335,4 +335,4 @@ function onCustomBGServiceConfigDownloadFailure(err) { catch (err) { logger.error(`Failed to save remote configuration at '${dlpath}'`); } -} \ No newline at end of file +} diff --git a/app/mainAppWindow/index.js b/app/mainAppWindow/index.js index 95e1c1e0..840d09f1 100644 --- a/app/mainAppWindow/index.js +++ b/app/mainAppWindow/index.js @@ -222,8 +222,8 @@ function restoreWindow() { } function processArgs(args) { - var regHttps = /^https:\/\/teams.microsoft.com\/l\/(meetup-join|channel)\//g; - var regMS = /^msteams:\/l\/(meetup-join|channel)\//g; + var regHttps = /^https:\/\/teams.microsoft.com\/.*(?:meetup-join|channel)/g; + var regMS = /^msteams:\/.*(?:meetup-join|channel)/g; logger.debug('processArgs:', args); for (const arg of args) { if (regHttps.test(arg)) { @@ -317,7 +317,7 @@ function onBeforeSendHeadersHandler(detail, callback) { * @returns {{action: 'deny'} | {action: 'allow', outlivesOpener?: boolean, overrideBrowserWindowOptions?: Electron.BrowserWindowConstructorOptions}} */ function onNewWindow(details) { - if (details.url.startsWith('https://teams.microsoft.com/l/meetup-join')) { + if (details.url.startsWith('https://teams.microsoft.com/l/meetup-join') || details.url.startsWith('https://teams.microsoft.com/v2/l/meetup-join')) { logger.debug('DEBUG - captured meetup-join url'); return { action: 'deny' }; } else if (details.url === 'about:blank' || details.url === 'about:blank#blocked') { @@ -619,4 +619,4 @@ function enableWakeLockOnWindowRestore() { if (isOnCall) { window.webContents.send('enable-wakelock'); } -} \ No newline at end of file +} diff --git a/app/menus/application.js b/app/menus/application.js index 940695f2..33fbcd0f 100644 --- a/app/menus/application.js +++ b/app/menus/application.js @@ -109,4 +109,4 @@ function getNotificationsMenu(Menus) { } ] }; -} \ No newline at end of file +} diff --git a/app/menus/tray.js b/app/menus/tray.js index 521da333..d0ccb277 100644 --- a/app/menus/tray.js +++ b/app/menus/tray.js @@ -34,4 +34,4 @@ class ApplicationTray { this.tray.destroy(); } } -exports = module.exports = ApplicationTray; \ No newline at end of file +exports = module.exports = ApplicationTray; diff --git a/app/spellCheckProvider/codes.js b/app/spellCheckProvider/codes.js index e3f50190..6253cbc7 100644 --- a/app/spellCheckProvider/codes.js +++ b/app/spellCheckProvider/codes.js @@ -701,4 +701,4 @@ const codes = [ } ]; -module.exports = codes; \ No newline at end of file +module.exports = codes; diff --git a/app/spellCheckProvider/index.js b/app/spellCheckProvider/index.js index 991e1ba8..3d26d56e 100644 --- a/app/spellCheckProvider/index.js +++ b/app/spellCheckProvider/index.js @@ -136,4 +136,4 @@ function stringCompare(str1, str2) { return le ? -1 : gr ? 1 : 0; } -module.exports = { SpellCheckProvider }; \ No newline at end of file +module.exports = { SpellCheckProvider }; diff --git a/app/streamSelector/browser.js b/app/streamSelector/browser.js index 667000ce..25a718f7 100644 --- a/app/streamSelector/browser.js +++ b/app/streamSelector/browser.js @@ -123,4 +123,3 @@ function createQualitySelector(properties) { defaultSelection = defaultSelection > -1 ? defaultSelection : properties.screens.length - 1; properties.sscontainer.selectedIndex = defaultSelection; } - diff --git a/app/streamSelector/index.js b/app/streamSelector/index.js index 2083d0cb..ccd42419 100644 --- a/app/streamSelector/index.js +++ b/app/streamSelector/index.js @@ -151,5 +151,3 @@ function createScreenRequestHandler() { } module.exports = { StreamSelector }; - - diff --git a/scripts/afterpack.js b/scripts/afterpack.js index e6372a33..fdf159cf 100644 --- a/scripts/afterpack.js +++ b/scripts/afterpack.js @@ -2,19 +2,19 @@ const {flipFuses, FuseVersion, FuseV1Options} = require('@electron/fuses'); const {chmod} = require('fs/promises'); function getAppFileName(context) { - const productFileName = context.packager.appInfo.productFilename + const productFileName = context.packager.appInfo.productFilename; switch (context.electronPlatformName) { - case 'win32': - return `${productFileName}.exe`; - case 'darwin': - return `${productFileName}.app`; - case 'mas': - return `${productFileName}.app`; - case 'linux': - return context.packager.executableName; - default: - return ''; + case 'win32': + return `${productFileName}.exe`; + case 'darwin': + return `${productFileName}.app`; + case 'mas': + return `${productFileName}.app`; + case 'linux': + return context.packager.executableName; + default: + return ''; } } @@ -25,11 +25,10 @@ exports.default = async function afterPack(context) { await flipFuses( path, { - version: FuseVersion.V1, - [FuseV1Options.EnableCookieEncryption]: true, + version: FuseVersion.V1, + [FuseV1Options.EnableCookieEncryption]: true, }, - ); - + ); } catch (error) { console.error('afterPack error: ', error); process.exit(1);