[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:
parent
dc005df49b
commit
6b5f0e0be2
|
@ -20,7 +20,7 @@ const defaultPreferences: ConfigV3 = {
|
|||
version: 3,
|
||||
teams: [],
|
||||
showTrayIcon: true,
|
||||
trayIconTheme: 'light',
|
||||
trayIconTheme: 'use_system',
|
||||
minimizeToTray: true,
|
||||
notifications: {
|
||||
flashWindow: 2,
|
||||
|
|
|
@ -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}.`);
|
||||
}
|
||||
|
|
23
src/common/config/migrationPreferences.ts
Normal file
23
src/common/config/migrationPreferences.ts
Normal 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;
|
||||
}
|
|
@ -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),
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -117,3 +117,7 @@ export type LocalConfiguration = Config & {
|
|||
appName: string;
|
||||
enableServerManagement: boolean;
|
||||
}
|
||||
|
||||
export type MigrationInfo = {
|
||||
updateTrayIconWin32: boolean;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue