[MM-36058][MM-40572] Tray fixes (#1933)

* [MM-36058] Added config migration function, update default tray icon theme to system, allow Windows users to override icon theme

* [MM-40572] Restore minimize to tray option for Windows

* Lint fix

* Test fix

* Oops
This commit is contained in:
Devin Binnie 2022-01-04 15:00:56 -05:00 committed by Devin Binnie
parent dc005df49b
commit 6b5f0e0be2
7 changed files with 53 additions and 5 deletions

View file

@ -20,7 +20,7 @@ const defaultPreferences: ConfigV3 = {
version: 3,
teams: [],
showTrayIcon: true,
trayIconTheme: 'light',
trayIconTheme: 'use_system',
minimizeToTray: true,
notifications: {
flashWindow: 2,

View file

@ -30,6 +30,7 @@ import defaultPreferences, {getDefaultDownloadLocation} from './defaultPreferenc
import upgradeConfigData from './upgradePreferences';
import buildConfig from './buildConfig';
import RegistryConfig, {REGISTRY_READ_EVENT} from './RegistryConfig';
import migrateConfigItems from './migrationPreferences';
/**
* Handles loading and merging all sources of configuration as well as saving user provided config
@ -331,6 +332,11 @@ export default class Config extends EventEmitter {
this.writeFileSync(this.configFilePath, configData);
log.info(`Configuration updated to version ${this.defaultConfigData.version} successfully.`);
}
const didMigrate = migrateConfigItems(configData);
if (didMigrate) {
this.writeFileSync(this.configFilePath, configData);
log.info('Migrating config items successfully.');
}
} catch (error) {
log.error(`Failed to update configuration to version ${this.defaultConfigData.version}.`);
}

View file

@ -0,0 +1,23 @@
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import path from 'path';
import {app} from 'electron';
import {Config, MigrationInfo} from 'types/config';
import JsonFileManager from 'common/JsonFileManager';
export default function migrateConfigItems(config: Config) {
const migrationPrefs = new JsonFileManager<MigrationInfo>(path.resolve(app.getPath('userData'), 'migration-info.json'));
let didMigrate = false;
if (!migrationPrefs.getValue('updateTrayIconWin32') && process.platform === 'win32') {
config.trayIconTheme = 'use_system';
migrationPrefs.setValue('updateTrayIconWin32', true);
didMigrate = true;
}
return didMigrate;
}

View file

@ -108,7 +108,7 @@ const configDataSchemaV3 = Joi.object<ConfigV3>({
})).default([]),
})).default([]),
showTrayIcon: Joi.boolean().default(false),
trayIconTheme: Joi.any().allow('').valid('light', 'dark').default('light'),
trayIconTheme: Joi.any().allow('').valid('light', 'dark', 'use_system').default('use_system'),
minimizeToTray: Joi.boolean().default(false),
notifications: Joi.object({
flashWindow: Joi.any().valid(0, 2).default(0),

View file

@ -17,7 +17,8 @@ let lastStatus = 'normal';
let lastMessage = app.name;
export function refreshTrayImages(trayIconTheme: string) {
const winTheme = nativeTheme.shouldUseDarkColors ? 'dark' : 'light';
const systemTheme = nativeTheme.shouldUseDarkColors ? 'dark' : 'light';
const winTheme = trayIconTheme === 'use_system' ? systemTheme : trayIconTheme;
switch (process.platform) {
case 'win32':

View file

@ -606,7 +606,7 @@ export default class SettingsPage extends React.PureComponent<Record<string, nev
</FormCheck>);
}
if (window.process.platform === 'linux') {
if (window.process.platform === 'linux' || window.process.platform === 'win32') {
options.push(
<FormGroup
key='trayIconTheme'
@ -614,6 +614,20 @@ export default class SettingsPage extends React.PureComponent<Record<string, nev
style={{marginLeft: '20px'}}
>
{'Icon theme: '}
{window.process.platform === 'win32' &&
<>
<FormCheck
type='radio'
inline={true}
name='trayIconTheme'
value='use_system'
defaultChecked={this.state.trayIconTheme === 'use_system' || !this.state.trayIconTheme}
onChange={() => this.handleChangeTrayIconTheme('use_system')}
label={'Use system default'}
/>
{' '}
</>
}
<FormCheck
type='radio'
inline={true}
@ -637,7 +651,7 @@ export default class SettingsPage extends React.PureComponent<Record<string, nev
);
}
if (window.process.platform === 'linux') {
if (window.process.platform === 'linux' || window.process.platform === 'win32') {
options.push(
<FormCheck
key='inputMinimizeToTray'

View file

@ -117,3 +117,7 @@ export type LocalConfiguration = Config & {
appName: string;
enableServerManagement: boolean;
}
export type MigrationInfo = {
updateTrayIconWin32: boolean;
}