Make saving the configuration more robust (#594)
* feat: Make saving the configuration more robust * parse backup user config before return * fix some bug * Add write-userconfig.js and invalid-config.bin * throw exception if failed user config parsing * Merge branch 'master' into feat-467-make-save-more-robust * hide keymaps and macros if agent in restore mode * fix Device name settings
This commit is contained in:
committed by
László Monda
parent
00c5b69129
commit
13ec617d58
@@ -1,5 +1,15 @@
|
||||
import { ipcMain } from 'electron';
|
||||
import { ConfigurationReply, DeviceConnectionState, HardwareModules, IpcEvents, IpcResponse, LogService } from 'uhk-common';
|
||||
import {
|
||||
ConfigurationReply,
|
||||
DeviceConnectionState,
|
||||
getHardwareConfigFromDeviceResponse,
|
||||
HardwareModules,
|
||||
IpcEvents,
|
||||
IpcResponse,
|
||||
LogService,
|
||||
mapObjectToUserConfigBinaryBuffer,
|
||||
SaveUserConfigurationData
|
||||
} from 'uhk-common';
|
||||
import { snooze, UhkHidDevice, UhkOperations } from 'uhk-usb';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
@@ -14,6 +24,7 @@ import 'rxjs/add/operator/distinctUntilChanged';
|
||||
import { saveTmpFirmware } from '../util/save-extract-firmware';
|
||||
import { TmpFirmware } from '../models/tmp-firmware';
|
||||
import { QueueManager } from './queue-manager';
|
||||
import { backupUserConfiguration, getBackupUserConfigurationContent } from '../util/backup-user-confoguration';
|
||||
|
||||
/**
|
||||
* IpcMain pair of the UHK Communication
|
||||
@@ -78,10 +89,14 @@ export class DeviceService {
|
||||
rightModuleInfo: await this.operations.getRightModuleVersionInfo()
|
||||
};
|
||||
|
||||
const hardwareConfig = getHardwareConfigFromDeviceResponse(result.hardwareConfiguration);
|
||||
const uniqueId = hardwareConfig.uniqueId;
|
||||
|
||||
response = {
|
||||
success: true,
|
||||
...result,
|
||||
modules
|
||||
modules,
|
||||
backupConfiguration: await getBackupUserConfigurationContent(this.logService, uniqueId)
|
||||
};
|
||||
} catch (error) {
|
||||
response = {
|
||||
@@ -162,10 +177,13 @@ export class DeviceService {
|
||||
|
||||
private async saveUserConfiguration(event: Electron.Event, args: Array<string>): Promise<void> {
|
||||
const response = new IpcResponse();
|
||||
const json = args[0];
|
||||
const data: SaveUserConfigurationData = JSON.parse(args[0]);
|
||||
|
||||
try {
|
||||
await this.operations.saveUserConfiguration(json);
|
||||
await backupUserConfiguration(data);
|
||||
|
||||
const buffer = mapObjectToUserConfigBinaryBuffer(data.configuration);
|
||||
await this.operations.saveUserConfiguration(buffer);
|
||||
|
||||
response.success = true;
|
||||
}
|
||||
|
||||
32
packages/uhk-agent/src/util/backup-user-confoguration.ts
Normal file
32
packages/uhk-agent/src/util/backup-user-confoguration.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import { app } from 'electron';
|
||||
import { LogService, UserConfiguration, SaveUserConfigurationData } from 'uhk-common';
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs-extra';
|
||||
|
||||
export const getBackupUserConfigurationPath = (uniqueId: number): string => {
|
||||
const appDataDir = app.getPath('userData');
|
||||
|
||||
return path.join(appDataDir, `${uniqueId}.json`);
|
||||
};
|
||||
|
||||
export const backupUserConfiguration = (data: SaveUserConfigurationData): Promise<void> => {
|
||||
const backupFilePath = getBackupUserConfigurationPath(data.uniqueId);
|
||||
return fs.writeJSON(backupFilePath, data.configuration, {spaces: 2});
|
||||
};
|
||||
|
||||
export const getBackupUserConfigurationContent = async (logService: LogService, uniqueId: number): Promise<UserConfiguration> => {
|
||||
try {
|
||||
const backupFilePath = getBackupUserConfigurationPath(uniqueId);
|
||||
|
||||
if (await fs.pathExists(backupFilePath)) {
|
||||
const json = await fs.readJSON(backupFilePath);
|
||||
new UserConfiguration().fromJsonObject(json);
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch (error) {
|
||||
logService.error('Can not load backup user configuration for device', {uniqueId, error});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user