From 10cd06c70b349d2948f07504a014c4a32952080e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Kiss?= Date: Mon, 5 Nov 2018 19:51:39 +0100 Subject: [PATCH] feat: allow 8.4.3 firmware features (#845) * feat: allow 8.4.3 firmware features * feat: remove "layer-double-tap" command line argument --- package-lock.json | 26 ++++++++++--------- package.json | 1 + packages/uhk-agent/src/electron-main.ts | 4 +-- .../uhk-agent/src/services/app.service.ts | 3 +-- .../src/models/command-line-args.ts | 5 ---- packages/uhk-web/package-lock.json | 6 ++--- packages/uhk-web/package.json | 1 + .../keymap/edit/keymap-edit.component.ts | 4 +-- .../macro/edit/macro-edit.component.html | 1 + .../macro/edit/macro-edit.component.ts | 5 +++- .../macro/list/macro-list.component.html | 2 +- .../macro/list/macro-list.component.ts | 1 + .../components/popover/popover.component.html | 1 + .../components/popover/popover.component.ts | 4 ++- .../tab/macro/macro-tab.component.html | 2 +- .../popover/tab/macro/macro-tab.component.ts | 1 + packages/uhk-web/src/app/store/index.ts | 14 ++++++++-- .../src/app/store/reducers/app.reducer.ts | 1 - .../uhk-web/src/app/util/version-helper.ts | 9 +++++++ 19 files changed, 57 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ba537cc..b002aa2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1049,7 +1049,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -2200,6 +2200,12 @@ "@types/node": "*" } }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "dev": true + }, "@types/usb": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/usb/-/usb-1.1.3.tgz", @@ -5988,7 +5994,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -7575,7 +7581,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -7687,7 +7693,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -7822,14 +7828,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7849,8 +7853,7 @@ "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", @@ -7998,7 +8001,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -11381,7 +11383,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -12617,7 +12619,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { diff --git a/package.json b/package.json index b2d9bfdc..0c60b555 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@types/node": "8.0.53", "@types/node-hid": "0.7.0", "@types/request": "2.0.8", + "@types/semver": "5.5.0", "@types/usb": "1.1.3", "autoprefixer": "6.5.3", "buffer": "5.0.6", diff --git a/packages/uhk-agent/src/electron-main.ts b/packages/uhk-agent/src/electron-main.ts index c585a689..58c63f51 100644 --- a/packages/uhk-agent/src/electron-main.ts +++ b/packages/uhk-agent/src/electron-main.ts @@ -22,9 +22,7 @@ import { setMenu } from './electron-menu'; const optionDefinitions = [ {name: 'addons', type: Boolean}, - {name: 'spe', type: Boolean}, // simulate privilege escalation error - // show 'Lock layer when double tapping this key' checkbox on 'Layer' tab of the config popover - {name: 'layer-double-tap', type: Boolean} + {name: 'spe', type: Boolean} // simulate privilege escalation error ]; const options: CommandLineArgs = commandLineArgs(optionDefinitions); diff --git a/packages/uhk-agent/src/services/app.service.ts b/packages/uhk-agent/src/services/app.service.ts index 348d1089..16117296 100644 --- a/packages/uhk-agent/src/services/app.service.ts +++ b/packages/uhk-agent/src/services/app.service.ts @@ -26,8 +26,7 @@ export class AppService extends MainServiceBase { const deviceConnectionState = this.uhkHidDeviceService.getDeviceConnectionState(); const response: AppStartInfo = { commandLineArgs: { - addons: this.options.addons || false, - layerDoubleTap: this.options['layer-double-tap'] || false + addons: this.options.addons || false }, deviceConnected: deviceConnectionState.connected, hasPermission: deviceConnectionState.hasPermission, diff --git a/packages/uhk-common/src/models/command-line-args.ts b/packages/uhk-common/src/models/command-line-args.ts index 7f70e550..1e53fca3 100644 --- a/packages/uhk-common/src/models/command-line-args.ts +++ b/packages/uhk-common/src/models/command-line-args.ts @@ -7,9 +7,4 @@ export interface CommandLineArgs { * simulate privilege escalation error */ spe?: boolean; - /** - * show 'Lock layer when double tapping this key' checkbox on 'Layer' tab of the config popover - * if it false the checkbox invisible and the value of the checkbox = true - */ - layerDoubleTap?: boolean; } diff --git a/packages/uhk-web/package-lock.json b/packages/uhk-web/package-lock.json index 09a5b190..c846f651 100644 --- a/packages/uhk-web/package-lock.json +++ b/packages/uhk-web/package-lock.json @@ -9540,9 +9540,9 @@ } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "semver-dsl": { diff --git a/packages/uhk-web/package.json b/packages/uhk-web/package.json index ca70c4ce..5444199d 100644 --- a/packages/uhk-web/package.json +++ b/packages/uhk-web/package.json @@ -70,6 +70,7 @@ "reselect": "3.0.1", "rxjs": "5.5.8", "typescript": "2.6.2", + "semver": "5.6.0", "uhk-common": "1.0.0", "xml-loader": "1.2.1", "zone.js": "0.8.26", diff --git a/packages/uhk-web/src/app/components/keymap/edit/keymap-edit.component.ts b/packages/uhk-web/src/app/components/keymap/edit/keymap-edit.component.ts index dff7a31c..5d2964ec 100644 --- a/packages/uhk-web/src/app/components/keymap/edit/keymap-edit.component.ts +++ b/packages/uhk-web/src/app/components/keymap/edit/keymap-edit.component.ts @@ -14,7 +14,7 @@ import 'rxjs/add/operator/combineLatest'; import { saveAs } from 'file-saver'; -import { allowLayerDoubleTap, AppState, getKeyboardLayout } from '../../../store'; +import { layerDoubleTapSupported, AppState, getKeyboardLayout } from '../../../store'; import { getKeymap, getKeymaps, getUserConfiguration } from '../../../store/reducers/user-configuration'; import { KeyboardLayout } from '../../../keyboard/keyboard-layout.enum'; import { KeymapActions } from '../../../store/actions'; @@ -51,7 +51,7 @@ export class KeymapEditComponent { .map((keymaps: Keymap[]) => keymaps.length > 1); this.keyboardLayout$ = store.select(getKeyboardLayout); - this.allowLayerDoubleTap$ = store.select(allowLayerDoubleTap); + this.allowLayerDoubleTap$ = store.select(layerDoubleTapSupported); } downloadKeymap() { diff --git a/packages/uhk-web/src/app/components/macro/edit/macro-edit.component.html b/packages/uhk-web/src/app/components/macro/edit/macro-edit.component.html index 7202d00b..bb562efc 100644 --- a/packages/uhk-web/src/app/components/macro/edit/macro-edit.component.html +++ b/packages/uhk-web/src/app/components/macro/edit/macro-edit.component.html @@ -5,6 +5,7 @@ > ; private subscription: Subscription; constructor(private store: Store, public route: ActivatedRoute) { @@ -37,6 +39,7 @@ export class MacroEditComponent implements OnDestroy { }); this.isNew = this.route.snapshot.params['empty'] === 'new'; + this.macroPlaybackSupported$ = this.store.select(macroPlaybackSupported); } ngOnDestroy() { diff --git a/packages/uhk-web/src/app/components/macro/list/macro-list.component.html b/packages/uhk-web/src/app/components/macro/list/macro-list.component.html index 356b5d11..aa281136 100644 --- a/packages/uhk-web/src/app/components/macro/list/macro-list.component.html +++ b/packages/uhk-web/src/app/components/macro/list/macro-list.component.html @@ -1,6 +1,6 @@
-

Please note that macro playback is not implemented yet. You can create macros, but they won't have any effect until firmware support is implemented. We're working on this.

+

Please note that macro playback is not implemented yet. You can create macros, but they won't have any effect until firmware support is implemented. We're working on this.

MacroItemComponent)) macroItems: QueryList; @Output() add = new EventEmitter(); diff --git a/packages/uhk-web/src/app/components/popover/popover.component.html b/packages/uhk-web/src/app/components/popover/popover.component.html index f2f8be7f..9b920258 100644 --- a/packages/uhk-web/src/app/components/popover/popover.component.html +++ b/packages/uhk-web/src/app/components/popover/popover.component.html @@ -42,6 +42,7 @@ > ; private readonly currentKeymap$ = new BehaviorSubject(undefined); @@ -158,6 +159,7 @@ export class PopoverComponent implements OnChanges { .map(([keymaps, currentKeymap]: [Keymap[], Keymap]) => keymaps.filter((keymap: Keymap) => currentKeymap.abbreviation !== keymap.abbreviation) ); + this.macroPlaybackSupported$ = store.select(macroPlaybackSupported); } ngOnChanges(change: SimpleChanges) { diff --git a/packages/uhk-web/src/app/components/popover/tab/macro/macro-tab.component.html b/packages/uhk-web/src/app/components/popover/tab/macro/macro-tab.component.html index 1c1204f4..67f3a7b3 100644 --- a/packages/uhk-web/src/app/components/popover/tab/macro/macro-tab.component.html +++ b/packages/uhk-web/src/app/components/popover/tab/macro/macro-tab.component.html @@ -2,7 +2,7 @@ No macros are available to choose from. Create a macro first! -

Please note that macro playback is not implemented yet. You can bind macros, but they won't have any effect until firmware support is implemented. We're working on this.

+

Please note that macro playback is not implemented yet. You can bind macros, but they won't have any effect until firmware support is implemented. We're working on this.

Play macro: ; diff --git a/packages/uhk-web/src/app/store/index.ts b/packages/uhk-web/src/app/store/index.ts index 1543685d..f2aae19f 100644 --- a/packages/uhk-web/src/app/store/index.ts +++ b/packages/uhk-web/src/app/store/index.ts @@ -2,7 +2,7 @@ import { createSelector } from 'reselect'; import { ActionReducerMap, MetaReducer } from '@ngrx/store'; import { RouterReducerState, routerReducer } from '@ngrx/router-store'; import { storeFreeze } from 'ngrx-store-freeze'; -import { Keymap, UserConfiguration } from 'uhk-common'; +import { HardwareModules, Keymap, UserConfiguration } from 'uhk-common'; import * as fromUserConfig from './reducers/user-configuration'; import * as fromPreset from './reducers/preset'; @@ -14,6 +14,7 @@ import * as fromSelectors from './reducers/selectors'; import { initProgressButtonState } from './reducers/progress-button-state'; import { environment } from '../../environments/environment'; import { RouterStateUrl } from './router-util'; +import { isVersionGte } from '../util'; // State interface for the application export interface AppState { @@ -45,7 +46,6 @@ export const getUserConfiguration = (state: AppState) => state.userConfiguration export const appState = (state: AppState) => state.app; export const showAddonMenu = createSelector(appState, fromApp.showAddonMenu); -export const allowLayerDoubleTap = createSelector(appState, fromApp.allowLayerDoubleTap); export const getUndoableNotification = createSelector(appState, fromApp.getUndoableNotification); export const getPrevUserConfiguration = createSelector(appState, fromApp.getPrevUserConfiguration); export const runningInElectron = createSelector(appState, fromApp.runningInElectron); @@ -113,3 +113,13 @@ export const getSideMenuPageState = createSelector( ); export const getRouterState = (state: AppState) => state.router; + +export const macroPlaybackSupported = createSelector(getHardwareModules, (hardwareModules: HardwareModules): boolean => { + return isVersionGte(hardwareModules.rightModuleInfo.firmwareVersion, '8.4.3'); +}); +export const layerDoubleTapSupported = createSelector( + getHardwareModules, + (hardwareModules: HardwareModules): boolean => { + return isVersionGte(hardwareModules.rightModuleInfo.firmwareVersion, '8.4.3'); + } +); diff --git a/packages/uhk-web/src/app/store/reducers/app.reducer.ts b/packages/uhk-web/src/app/store/reducers/app.reducer.ts index 9ce906f9..a6061abe 100644 --- a/packages/uhk-web/src/app/store/reducers/app.reducer.ts +++ b/packages/uhk-web/src/app/store/reducers/app.reducer.ts @@ -171,7 +171,6 @@ export function reducer(state = initialState, action: Action & { payload: any }) } export const showAddonMenu = (state: State) => state.commandLineArgs.addons; -export const allowLayerDoubleTap = (state: State) => state.commandLineArgs.layerDoubleTap; export const getUndoableNotification = (state: State) => state.undoableNotification; export const getPrevUserConfiguration = (state: State) => state.prevUserConfig; export const runningInElectron = (state: State) => state.runningInElectron; diff --git a/packages/uhk-web/src/app/util/version-helper.ts b/packages/uhk-web/src/app/util/version-helper.ts index ec426c9d..cea16102 100644 --- a/packages/uhk-web/src/app/util/version-helper.ts +++ b/packages/uhk-web/src/app/util/version-helper.ts @@ -1,3 +1,4 @@ +import * as semver from 'semver'; import { VersionInformation } from 'uhk-common'; const collectVersions = (): VersionInformation => { @@ -20,3 +21,11 @@ export const getVersions = (): VersionInformation => { } return versions; }; + +export const isVersionGte = (v1: string, v2: string): boolean => { + if (!v1) { + return false; + } + + return semver.gte(v1, v2); +};