Skip to content
This repository was archived by the owner on May 17, 2023. It is now read-only.

Commit d35e0a8

Browse files
authored
Fix settings restoration (#26)
1 parent 0689802 commit d35e0a8

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

src/Pages/BackupPage.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ export default function BackupPage() {
5656

5757
let validated = {};
5858
for (const [key, value] of Object.entries(data)) {
59-
if (nextData[key] && typeof value == typeof nextData[key]) {
60-
if (typeof nextData[key] == "object") {
61-
validated[key] = validateValues(value, nextData[key]);
59+
const nextDataValue = nextData[key];
60+
if ((nextDataValue != null || nextDataValue != undefined) && typeof value == typeof nextDataValue) {
61+
if (typeof nextDataValue == "object") {
62+
validated[key] = validateValues(value, nextDataValue);
6263
} else {
63-
validated[key] = nextData[key];
64-
64+
validated[key] = nextDataValue;
6565
}
6666
}
6767
}
@@ -88,7 +88,7 @@ export default function BackupPage() {
8888
const handleSave = async (values) => {
8989
let exportData = {};
9090
for (const [key, value] of Object.entries(checkValues)) {
91-
if (key.match("export_") && value) {
91+
if (key.match("export_") && (value != null || value != undefined)) {
9292
let skey = key.slice(7, key.length);
9393
if (optionState[skey] != undefined || optionState[skey] != null) {
9494
exportData[skey] = optionState[skey];
@@ -158,7 +158,7 @@ export default function BackupPage() {
158158
// filter by known values
159159
let filteredData = {};
160160
for (const [key, value] of Object.entries(checkValues)) {
161-
if (key.match("import_") && value) {
161+
if (key.match("import_") && (value != null || value != undefined)) {
162162
let skey = key.slice(7, key.length);
163163
if (newData[skey] != undefined || newData[skey] != null) {
164164
filteredData[skey] = newData[skey];

src/Services/WebApi.js

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,21 @@ async function getDisplayOptions() {
4444
}
4545

4646
async function setDisplayOptions(options, isPreview) {
47-
let newOptions = { ...options };
47+
let newOptions = sanitizeRequest(options);
4848
newOptions.i2cAddress = parseInt(options.i2cAddress);
4949
newOptions.buttonLayout = parseInt(options.buttonLayout);
5050
newOptions.buttonLayoutRight = parseInt(options.buttonLayoutRight);
5151
newOptions.splashMode = parseInt(options.splashMode);
5252
newOptions.splashDuration = parseInt(options.splashDuration) * 1000; // seconds to milliseconds
5353
newOptions.displaySaverTimeout = parseInt(options.displaySaverTimeout) * 60000; // minutes to milliseconds
5454
newOptions.splashChoice = parseInt(options.splashChoice);
55-
newOptions.buttonLayoutCustomOptions.params.layout = parseInt(options.buttonLayoutCustomOptions.params.layout);
56-
newOptions.buttonLayoutCustomOptions.paramsRight.layout = parseInt(options.buttonLayoutCustomOptions.paramsRight.layout);
57-
newOptions.splashImage = '';
55+
56+
if (newOptions.buttonLayoutCustomOptions) {
57+
newOptions.buttonLayoutCustomOptions.params.layout = parseInt(options.buttonLayoutCustomOptions?.params?.layout);
58+
newOptions.buttonLayoutCustomOptions.paramsRight.layout = parseInt(options.buttonLayoutCustomOptions?.paramsRight?.layout);
59+
}
60+
61+
delete newOptions.splashImage;
5862
const url = !isPreview ? `${baseUrl}/api/setDisplayOptions` : `${baseUrl}/api/setPreviewDisplayOptions`;
5963
return axios.post(url, newOptions)
6064
.then((response) => {
@@ -89,7 +93,7 @@ async function getGamepadOptions() {
8993
}
9094

9195
async function setGamepadOptions(options) {
92-
return axios.post(`${baseUrl}/api/setGamepadOptions`, options)
96+
return axios.post(`${baseUrl}/api/setGamepadOptions`, sanitizeRequest(options))
9397
.then((response) => {
9498
console.log(response.data);
9599
return true;
@@ -107,7 +111,7 @@ async function getLedOptions() {
107111
}
108112

109113
async function setLedOptions(options) {
110-
return axios.post(`${baseUrl}/api/setLedOptions`, options)
114+
return axios.post(`${baseUrl}/api/setLedOptions`, sanitizeRequest(options))
111115
.then((response) => {
112116
console.log(response.data);
113117
return true;
@@ -134,7 +138,7 @@ async function setPinMappings(mappings) {
134138
let data = {};
135139
Object.keys(mappings).map((button, i) => data[button] = mappings[button].pin);
136140

137-
return axios.post(`${baseUrl}/api/setPinMappings`, data)
141+
return axios.post(`${baseUrl}/api/setPinMappings`, sanitizeRequest(data))
138142
.then((response) => {
139143
console.log(response.data);
140144
return true;
@@ -152,7 +156,7 @@ async function getAddonsOptions() {
152156
}
153157

154158
async function setAddonsOptions(options) {
155-
return axios.post(`${baseUrl}/api/setAddonsOptions`, options)
159+
return axios.post(`${baseUrl}/api/setAddonsOptions`, sanitizeRequest(options))
156160
.then((response) => {
157161
console.log(response.data);
158162
return true;
@@ -181,6 +185,12 @@ async function reboot() {
181185
.catch(console.error);
182186
}
183187

188+
function sanitizeRequest(request) {
189+
const newRequest = {...request};
190+
delete newRequest.usedPins;
191+
return newRequest;
192+
}
193+
184194
const WebApi = {
185195
resetSettings,
186196
getDisplayOptions,

0 commit comments

Comments
 (0)