mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
119 lines
4.4 KiB
JavaScript
119 lines
4.4 KiB
JavaScript
.pragma library
|
|
|
|
.import "./SettingsSpec.js" as SpecModule
|
|
|
|
function parse(root, jsonObj) {
|
|
var SPEC = SpecModule.SPEC;
|
|
for (var k in SPEC) {
|
|
var spec = SPEC[k];
|
|
root[k] = spec.def;
|
|
}
|
|
|
|
if (!jsonObj) return;
|
|
|
|
for (var k in jsonObj) {
|
|
if (!SPEC[k]) continue;
|
|
var raw = jsonObj[k];
|
|
var spec = SPEC[k];
|
|
var coerce = spec.coerce;
|
|
root[k] = coerce ? (coerce(raw) !== undefined ? coerce(raw) : root[k]) : raw;
|
|
}
|
|
}
|
|
|
|
function toJson(root) {
|
|
var SPEC = SpecModule.SPEC;
|
|
var out = {};
|
|
for (var k in SPEC) {
|
|
if (SPEC[k].persist === false) continue;
|
|
out[k] = root[k];
|
|
}
|
|
out.configVersion = root.settingsConfigVersion;
|
|
return out;
|
|
}
|
|
|
|
function migrate(root, jsonObj) {
|
|
var SPEC = SpecModule.SPEC;
|
|
if (!jsonObj) return;
|
|
|
|
if (jsonObj.themeIndex !== undefined || jsonObj.themeIsDynamic !== undefined) {
|
|
var themeNames = ["blue", "deepBlue", "purple", "green", "orange", "red", "cyan", "pink", "amber", "coral"];
|
|
if (jsonObj.themeIsDynamic) {
|
|
root.currentThemeName = "dynamic";
|
|
} else if (jsonObj.themeIndex >= 0 && jsonObj.themeIndex < themeNames.length) {
|
|
root.currentThemeName = themeNames[jsonObj.themeIndex];
|
|
}
|
|
console.info("Auto-migrated theme from index", jsonObj.themeIndex, "to", root.currentThemeName);
|
|
}
|
|
|
|
if ((jsonObj.dankBarWidgetOrder && jsonObj.dankBarWidgetOrder.length > 0) ||
|
|
(jsonObj.topBarWidgetOrder && jsonObj.topBarWidgetOrder.length > 0)) {
|
|
if (jsonObj.dankBarLeftWidgets === undefined && jsonObj.dankBarCenterWidgets === undefined && jsonObj.dankBarRightWidgets === undefined) {
|
|
var widgetOrder = jsonObj.dankBarWidgetOrder || jsonObj.topBarWidgetOrder;
|
|
root.dankBarLeftWidgets = widgetOrder.filter(function(w) { return ["launcherButton", "workspaceSwitcher", "focusedWindow"].indexOf(w) >= 0; });
|
|
root.dankBarCenterWidgets = widgetOrder.filter(function(w) { return ["clock", "music", "weather"].indexOf(w) >= 0; });
|
|
root.dankBarRightWidgets = widgetOrder.filter(function(w) { return ["systemTray", "clipboard", "systemResources", "notificationButton", "battery", "controlCenterButton"].indexOf(w) >= 0; });
|
|
}
|
|
}
|
|
|
|
if (jsonObj.useOSLogo !== undefined) {
|
|
root.launcherLogoMode = jsonObj.useOSLogo ? "os" : "apps";
|
|
root.launcherLogoColorOverride = jsonObj.osLogoColorOverride !== undefined ? jsonObj.osLogoColorOverride : "";
|
|
root.launcherLogoBrightness = jsonObj.osLogoBrightness !== undefined ? jsonObj.osLogoBrightness : 0.5;
|
|
root.launcherLogoContrast = jsonObj.osLogoContrast !== undefined ? jsonObj.osLogoContrast : 1;
|
|
}
|
|
|
|
if (jsonObj.mediaCompactMode !== undefined && jsonObj.mediaSize === undefined) {
|
|
root.mediaSize = jsonObj.mediaCompactMode ? 0 : 1;
|
|
}
|
|
|
|
for (var k in SPEC) {
|
|
var spec = SPEC[k];
|
|
if (!spec.migrate) continue;
|
|
for (var i = 0; i < spec.migrate.length; i++) {
|
|
var oldKey = spec.migrate[i];
|
|
if (jsonObj[oldKey] !== undefined && jsonObj[k] === undefined) {
|
|
var raw = jsonObj[oldKey];
|
|
var coerce = spec.coerce;
|
|
root[k] = coerce ? (coerce(raw) !== undefined ? coerce(raw) : root[k]) : raw;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (jsonObj.dankBarAtBottom !== undefined || jsonObj.topBarAtBottom !== undefined) {
|
|
var atBottom = jsonObj.dankBarAtBottom !== undefined ? jsonObj.dankBarAtBottom : jsonObj.topBarAtBottom;
|
|
root.dankBarPosition = atBottom ? 1 : 0;
|
|
}
|
|
|
|
if (jsonObj.pluginSettings !== undefined) {
|
|
root.pluginSettings = jsonObj.pluginSettings;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function cleanup(fileText) {
|
|
var getValidKeys = SpecModule.getValidKeys;
|
|
if (!fileText || !fileText.trim()) return;
|
|
|
|
try {
|
|
var settings = JSON.parse(fileText);
|
|
var validKeys = getValidKeys();
|
|
var needsSave = false;
|
|
|
|
for (var key in settings) {
|
|
if (validKeys.indexOf(key) < 0) {
|
|
console.log("SettingsData: Removing unused key:", key);
|
|
delete settings[key];
|
|
needsSave = true;
|
|
}
|
|
}
|
|
|
|
return needsSave ? JSON.stringify(settings, null, 2) : null;
|
|
} catch (e) {
|
|
console.warn("SettingsData: Failed to cleanup unused keys:", e.message);
|
|
return null;
|
|
}
|
|
}
|