Officially support the system tray on Linux, in beta only
This commit is contained in:
parent
af1f2ea449
commit
8b30fc17cd
6 changed files with 40 additions and 22 deletions
|
@ -20,7 +20,8 @@ export class SystemTraySettingCache {
|
|||
|
||||
constructor(
|
||||
private readonly sql: Pick<MainSQL, 'sqlCall'>,
|
||||
private readonly argv: Array<string>
|
||||
private readonly argv: Array<string>,
|
||||
private readonly appVersion: string
|
||||
) {}
|
||||
|
||||
async get(): Promise<SystemTraySetting> {
|
||||
|
@ -51,7 +52,7 @@ export class SystemTraySettingCache {
|
|||
log.info(
|
||||
`getSystemTraySetting saw --use-tray-icon flag. Returning ${result}`
|
||||
);
|
||||
} else if (isSystemTraySupported()) {
|
||||
} else if (isSystemTraySupported(this.appVersion)) {
|
||||
const { value } = (await this.sql.sqlCall('getItemById', [
|
||||
'system-tray-setting',
|
||||
])) || { value: undefined };
|
||||
|
|
|
@ -280,7 +280,9 @@
|
|||
props: {
|
||||
i18n,
|
||||
initialValue: window.initialData.systemTray,
|
||||
isSystemTraySupported: Settings.isSystemTraySupported(),
|
||||
isSystemTraySupported: Settings.isSystemTraySupported(
|
||||
window.getVersion()
|
||||
),
|
||||
onChange: window.setSystemTraySetting,
|
||||
},
|
||||
});
|
||||
|
|
6
main.js
6
main.js
|
@ -128,7 +128,11 @@ const { maybeParseUrl, setUrlSearchParams } = require('./ts/util/url');
|
|||
const sql = new MainSQL();
|
||||
|
||||
let systemTrayService;
|
||||
const systemTraySettingCache = new SystemTraySettingCache(sql, process.argv);
|
||||
const systemTraySettingCache = new SystemTraySettingCache(
|
||||
sql,
|
||||
process.argv,
|
||||
app.getVersion()
|
||||
);
|
||||
|
||||
const challengeHandler = new ChallengeMainHandler();
|
||||
|
||||
|
|
|
@ -26,16 +26,21 @@ describe('SystemTraySettingCache', () => {
|
|||
});
|
||||
|
||||
it('returns MinimizeToAndStartInSystemTray if passed the --start-in-tray argument', async () => {
|
||||
const justOneArg = new SystemTraySettingCache(sql, ['--start-in-tray']);
|
||||
const justOneArg = new SystemTraySettingCache(
|
||||
sql,
|
||||
['--start-in-tray'],
|
||||
'1.2.3'
|
||||
);
|
||||
assert.strictEqual(
|
||||
await justOneArg.get(),
|
||||
SystemTraySetting.MinimizeToAndStartInSystemTray
|
||||
);
|
||||
|
||||
const bothArgs = new SystemTraySettingCache(sql, [
|
||||
'--start-in-tray',
|
||||
'--use-tray-icon',
|
||||
]);
|
||||
const bothArgs = new SystemTraySettingCache(
|
||||
sql,
|
||||
['--start-in-tray', '--use-tray-icon'],
|
||||
'1.2.3'
|
||||
);
|
||||
assert.strictEqual(
|
||||
await bothArgs.get(),
|
||||
SystemTraySetting.MinimizeToAndStartInSystemTray
|
||||
|
@ -45,7 +50,7 @@ describe('SystemTraySettingCache', () => {
|
|||
});
|
||||
|
||||
it('returns MinimizeToSystemTray if passed the --use-tray-icon argument', async () => {
|
||||
const cache = new SystemTraySettingCache(sql, ['--use-tray-icon']);
|
||||
const cache = new SystemTraySettingCache(sql, ['--use-tray-icon'], '1.2.3');
|
||||
assert.strictEqual(
|
||||
await cache.get(),
|
||||
SystemTraySetting.MinimizeToSystemTray
|
||||
|
@ -57,7 +62,7 @@ describe('SystemTraySettingCache', () => {
|
|||
it('returns DoNotUseSystemTray if system tray is supported but no preference is stored', async () => {
|
||||
sandbox.stub(process, 'platform').value('win32');
|
||||
|
||||
const cache = new SystemTraySettingCache(sql, []);
|
||||
const cache = new SystemTraySettingCache(sql, [], '1.2.3');
|
||||
assert.strictEqual(await cache.get(), SystemTraySetting.DoNotUseSystemTray);
|
||||
});
|
||||
|
||||
|
@ -66,7 +71,7 @@ describe('SystemTraySettingCache', () => {
|
|||
|
||||
sqlCallStub.resolves({ value: 'garbage' });
|
||||
|
||||
const cache = new SystemTraySettingCache(sql, []);
|
||||
const cache = new SystemTraySettingCache(sql, [], '1.2.3');
|
||||
assert.strictEqual(await cache.get(), SystemTraySetting.DoNotUseSystemTray);
|
||||
});
|
||||
|
||||
|
@ -75,7 +80,7 @@ describe('SystemTraySettingCache', () => {
|
|||
|
||||
sqlCallStub.resolves({ value: 'MinimizeToSystemTray' });
|
||||
|
||||
const cache = new SystemTraySettingCache(sql, []);
|
||||
const cache = new SystemTraySettingCache(sql, [], '1.2.3');
|
||||
assert.strictEqual(
|
||||
await cache.get(),
|
||||
SystemTraySetting.MinimizeToSystemTray
|
||||
|
@ -85,7 +90,7 @@ describe('SystemTraySettingCache', () => {
|
|||
it('only kicks off one request to the database if multiple sources ask at once', async () => {
|
||||
sandbox.stub(process, 'platform').value('win32');
|
||||
|
||||
const cache = new SystemTraySettingCache(sql, []);
|
||||
const cache = new SystemTraySettingCache(sql, [], '1.2.3');
|
||||
|
||||
await Promise.all([cache.get(), cache.get(), cache.get()]);
|
||||
|
||||
|
@ -95,7 +100,7 @@ describe('SystemTraySettingCache', () => {
|
|||
it('returns DoNotUseSystemTray if system tray is unsupported and there are no CLI flags', async () => {
|
||||
sandbox.stub(process, 'platform').value('darwin');
|
||||
|
||||
const cache = new SystemTraySettingCache(sql, []);
|
||||
const cache = new SystemTraySettingCache(sql, [], '1.2.3');
|
||||
assert.strictEqual(await cache.get(), SystemTraySetting.DoNotUseSystemTray);
|
||||
|
||||
sinon.assert.notCalled(sqlCallStub);
|
||||
|
|
|
@ -171,18 +171,23 @@ describe('Settings', () => {
|
|||
describe('isSystemTraySupported', () => {
|
||||
it('returns false on macOS', () => {
|
||||
sandbox.stub(process, 'platform').value('darwin');
|
||||
assert.isFalse(Settings.isSystemTraySupported());
|
||||
assert.isFalse(Settings.isSystemTraySupported('1.2.3'));
|
||||
});
|
||||
|
||||
it('returns true on Windows 8', () => {
|
||||
sandbox.stub(process, 'platform').value('win32');
|
||||
sandbox.stub(os, 'release').returns('8.0.0');
|
||||
assert.isTrue(Settings.isSystemTraySupported());
|
||||
assert.isTrue(Settings.isSystemTraySupported('1.2.3'));
|
||||
});
|
||||
|
||||
it('returns false on Linux', () => {
|
||||
it('returns false on Linux production', () => {
|
||||
sandbox.stub(process, 'platform').value('linux');
|
||||
assert.isFalse(Settings.isSystemTraySupported());
|
||||
assert.isFalse(Settings.isSystemTraySupported('1.2.3'));
|
||||
});
|
||||
|
||||
it('returns true on Linux beta', () => {
|
||||
sandbox.stub(process, 'platform').value('linux');
|
||||
assert.isTrue(Settings.isSystemTraySupported('1.2.3-beta.4'));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import * as OS from '../OS';
|
||||
import { isBeta } from '../util/version';
|
||||
|
||||
const MIN_WINDOWS_VERSION = '8.0.0';
|
||||
|
||||
|
@ -53,7 +54,7 @@ export const getTitleBarVisibility = (): TitleBarVisibility =>
|
|||
/**
|
||||
* Returns `true` if you can minimize the app to the system tray. Users can override this
|
||||
* option with a command line flag, but that is not officially supported.
|
||||
*
|
||||
* We may add support for Linux in the future.
|
||||
*/
|
||||
export const isSystemTraySupported = OS.isWindows;
|
||||
export const isSystemTraySupported = (appVersion: string): boolean =>
|
||||
// We eventually want to support Linux in production.
|
||||
OS.isWindows() || (OS.isLinux() && isBeta(appVersion));
|
||||
|
|
Loading…
Add table
Reference in a new issue