Fixed sponsorTimes data on export and import

This commit is contained in:
Ajay Ramachandran
2020-03-26 12:18:52 -04:00
parent e73d79071c
commit 2c980a269d
2 changed files with 23 additions and 5 deletions

View File

@@ -33,6 +33,10 @@ interface SBObject {
defaults: SBConfig;
localConfig: SBConfig;
config: SBConfig;
// Functions
encodeStoredItem<T>(data: T): T | Array<any>;
convertJSON(): void;
}
// Allows a SBMap to be conveted into json form
@@ -119,7 +123,11 @@ var Config: SBObject = {
mobileUpdateShowCount: 0
},
localConfig: null,
config: null
config: null,
// Functions
encodeStoredItem,
convertJSON
};
// Function setup
@@ -130,7 +138,7 @@ var Config: SBObject = {
*
* @param data
*/
function encodeStoredItem(data) {
function encodeStoredItem<T>(data: T): T | Array<any> {
// if data is SBMap convert to json for storing
if(!(data instanceof SBMap)) return data;
return Array.from(data.entries());
@@ -142,7 +150,7 @@ function encodeStoredItem(data) {
*
* @param {*} data
*/
function decodeStoredItem(id: string, data) {
function decodeStoredItem<T>(id: string, data: T): T | SBMap<string, any> {
if (!Config.defaults[id]) return data;
if (Config.defaults[id] instanceof SBMap) {
@@ -239,7 +247,7 @@ function resetConfig() {
Config.config = Config.defaults;
};
function convertJSON() {
function convertJSON(): void {
Object.keys(Config.localConfig).forEach(key => {
Config.localConfig[key] = decodeStoredItem(key, Config.localConfig[key]);
});

View File

@@ -379,7 +379,12 @@ function activatePrivateTextChange(element: HTMLElement) {
// See if anything extra must be done
switch (option) {
case "*":
result = JSON.stringify(Config.localConfig);
let jsonData = JSON.parse(JSON.stringify(Config.localConfig));
// Fix sponsorTimes data as it is destroyed from the JSON stringify
jsonData.sponsorTimes = Config.encodeStoredItem(Config.localConfig.sponsorTimes);
result = JSON.stringify(jsonData);
break;
}
@@ -399,7 +404,9 @@ function activatePrivateTextChange(element: HTMLElement) {
for (const key in newConfig) {
Config.config[key] = newConfig[key];
}
Config.convertJSON();
// Reload options on page
init();
if (newConfig.supportInvidious) {
@@ -458,6 +465,9 @@ function copyDebugOutputToClipboard() {
config: JSON.parse(JSON.stringify(Config.localConfig)) // Deep clone config object
};
// Fix sponsorTimes data as it is destroyed from the JSON stringify
output.config.sponsorTimes = Config.encodeStoredItem(Config.localConfig.sponsorTimes);
// Sanitise sensitive user config values
delete output.config.userID;
output.config.serverAddress = (output.config.serverAddress === CompileConfig.serverAddress)