diff --git a/js/modules/os.js b/js/modules/os.js deleted file mode 100644 index 245172f684..0000000000 --- a/js/modules/os.js +++ /dev/null @@ -1,7 +0,0 @@ -/* eslint-env node */ - -exports.isMacOS = () => process.platform === 'darwin'; - -exports.isLinux = () => process.platform === 'linux'; - -exports.isWindows = () => process.platform === 'win32'; diff --git a/js/modules/types/settings.js b/js/modules/types/settings.js deleted file mode 100644 index 85fbd7addf..0000000000 --- a/js/modules/types/settings.js +++ /dev/null @@ -1,3 +0,0 @@ -const OS = require('../os'); - -exports.isAudioNotificationSupported = () => !OS.isLinux(); diff --git a/preload.js b/preload.js index dc729e5ad2..412456a887 100644 --- a/preload.js +++ b/preload.js @@ -200,7 +200,7 @@ window.Signal.Migrations.Migrations1DatabaseWithoutAttachmentData = require('./j window.Signal.Migrations.upgradeMessageSchema = upgradeMessageSchema; window.Signal.Notifications = require('./ts/notifications'); -window.Signal.OS = require('./js/modules/os'); +window.Signal.OS = require('./ts/OS'); window.Signal.Settings = require('./js/modules/settings'); window.Signal.Startup = require('./js/modules/startup'); @@ -211,7 +211,7 @@ window.Signal.Types.Errors = require('./js/modules/types/errors'); window.Signal.Types.Message = Message; window.Signal.Types.MIME = require('./ts/types/MIME'); -window.Signal.Types.Settings = require('./js/modules/types/settings'); +window.Signal.Types.Settings = require('./ts/types/Settings'); window.Signal.Util = require('./ts/util'); window.Signal.Views = {}; diff --git a/ts/OS.ts b/ts/OS.ts new file mode 100644 index 0000000000..efc71bf9e6 --- /dev/null +++ b/ts/OS.ts @@ -0,0 +1,15 @@ +import is from '@sindresorhus/is'; +import os from 'os'; +import semver from 'semver'; + +export const isMacOS = () => process.platform === 'darwin'; +export const isLinux = () => process.platform === 'linux'; +export const isWindows = (minVersion?: string) => { + const isPlatformValid = process.platform === 'win32'; + const osRelease = os.release(); + const isVersionValid = is.undefined(minVersion) + ? true + : semver.gte(osRelease, minVersion); + + return isPlatformValid && isVersionValid; +}; diff --git a/test/modules/types/settings_test.js b/ts/test/types/Settings_test.ts similarity index 61% rename from test/modules/types/settings_test.js rename to ts/test/types/Settings_test.ts index 59f1953484..306e0ef99a 100644 --- a/test/modules/types/settings_test.js +++ b/ts/test/types/Settings_test.ts @@ -1,7 +1,8 @@ -const sinon = require('sinon'); -const { assert } = require('chai'); +import os from 'os'; +import sinon from 'sinon'; +import { assert } from 'chai'; -const Settings = require('../../../js/modules/types/settings'); +import * as Settings from '../../../ts/types/Settings'; describe('Settings', () => { const sandbox = sinon.createSandbox(); @@ -22,16 +23,19 @@ describe('Settings', () => { }); context('on Windows', () => { - beforeEach(() => { - sandbox.stub(process, 'platform').value('win32'); - }); + context('version 8+', () => { + beforeEach(() => { + sandbox.stub(process, 'platform').value('win32'); + sandbox.stub(os, 'release').returns('8.0.0'); + }); - afterEach(() => { - sandbox.restore(); - }); + afterEach(() => { + sandbox.restore(); + }); - it('should return true', () => { - assert.isTrue(Settings.isAudioNotificationSupported()); + it('should return true', () => { + assert.isTrue(Settings.isAudioNotificationSupported()); + }); }); }); diff --git a/ts/types/Settings.ts b/ts/types/Settings.ts new file mode 100644 index 0000000000..521106230b --- /dev/null +++ b/ts/types/Settings.ts @@ -0,0 +1,4 @@ +import * as OS from '../OS'; + +export const isAudioNotificationSupported = () => + OS.isWindows() || OS.isMacOS();