mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-25 14:02:53 -05:00
254 lines
12 KiB
JavaScript
254 lines
12 KiB
JavaScript
.pragma library
|
|
|
|
.import "./SettingsSpec.js" as SpecModule
|
|
|
|
function parse(root, jsonObj) {
|
|
var SPEC = SpecModule.SPEC;
|
|
|
|
if (!jsonObj) return;
|
|
|
|
for (var k in SPEC) {
|
|
if (k === "pluginSettings") continue;
|
|
if (!(k in jsonObj)) {
|
|
root[k] = SPEC[k].def;
|
|
}
|
|
}
|
|
|
|
for (var k in jsonObj) {
|
|
if (!SPEC[k]) continue;
|
|
if (k === "pluginSettings") 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;
|
|
if (k === "pluginSettings") continue;
|
|
out[k] = root[k];
|
|
}
|
|
out.configVersion = root.settingsConfigVersion;
|
|
return out;
|
|
}
|
|
|
|
function migrateToVersion(obj, targetVersion) {
|
|
if (!obj) return null;
|
|
|
|
var settings = JSON.parse(JSON.stringify(obj));
|
|
var currentVersion = settings.configVersion || 0;
|
|
|
|
if (currentVersion >= targetVersion) {
|
|
return null;
|
|
}
|
|
|
|
if (currentVersion < 2) {
|
|
console.info("Migrating settings from version", currentVersion, "to version 2");
|
|
|
|
if (settings.barConfigs === undefined) {
|
|
var position = 0;
|
|
if (settings.dankBarAtBottom !== undefined || settings.topBarAtBottom !== undefined) {
|
|
var atBottom = settings.dankBarAtBottom !== undefined ? settings.dankBarAtBottom : settings.topBarAtBottom;
|
|
position = atBottom ? 1 : 0;
|
|
} else if (settings.dankBarPosition !== undefined) {
|
|
position = settings.dankBarPosition;
|
|
}
|
|
|
|
var defaultConfig = {
|
|
id: "default",
|
|
name: "Main Bar",
|
|
enabled: true,
|
|
position: position,
|
|
screenPreferences: ["all"],
|
|
showOnLastDisplay: true,
|
|
leftWidgets: settings.dankBarLeftWidgets || ["launcherButton", "workspaceSwitcher", "focusedWindow"],
|
|
centerWidgets: settings.dankBarCenterWidgets || ["music", "clock", "weather"],
|
|
rightWidgets: settings.dankBarRightWidgets || ["systemTray", "clipboard", "cpuUsage", "memUsage", "notificationButton", "battery", "controlCenterButton"],
|
|
spacing: settings.dankBarSpacing !== undefined ? settings.dankBarSpacing : 4,
|
|
innerPadding: settings.dankBarInnerPadding !== undefined ? settings.dankBarInnerPadding : 4,
|
|
bottomGap: settings.dankBarBottomGap !== undefined ? settings.dankBarBottomGap : 0,
|
|
transparency: settings.dankBarTransparency !== undefined ? settings.dankBarTransparency : 1.0,
|
|
widgetTransparency: settings.dankBarWidgetTransparency !== undefined ? settings.dankBarWidgetTransparency : 1.0,
|
|
squareCorners: settings.dankBarSquareCorners !== undefined ? settings.dankBarSquareCorners : false,
|
|
noBackground: settings.dankBarNoBackground !== undefined ? settings.dankBarNoBackground : false,
|
|
gothCornersEnabled: settings.dankBarGothCornersEnabled !== undefined ? settings.dankBarGothCornersEnabled : false,
|
|
gothCornerRadiusOverride: settings.dankBarGothCornerRadiusOverride !== undefined ? settings.dankBarGothCornerRadiusOverride : false,
|
|
gothCornerRadiusValue: settings.dankBarGothCornerRadiusValue !== undefined ? settings.dankBarGothCornerRadiusValue : 12,
|
|
borderEnabled: settings.dankBarBorderEnabled !== undefined ? settings.dankBarBorderEnabled : false,
|
|
borderColor: settings.dankBarBorderColor || "surfaceText",
|
|
borderOpacity: settings.dankBarBorderOpacity !== undefined ? settings.dankBarBorderOpacity : 1.0,
|
|
borderThickness: settings.dankBarBorderThickness !== undefined ? settings.dankBarBorderThickness : 1,
|
|
fontScale: settings.dankBarFontScale !== undefined ? settings.dankBarFontScale : 1.0,
|
|
autoHide: settings.dankBarAutoHide !== undefined ? settings.dankBarAutoHide : false,
|
|
autoHideDelay: settings.dankBarAutoHideDelay !== undefined ? settings.dankBarAutoHideDelay : 250,
|
|
openOnOverview: settings.dankBarOpenOnOverview !== undefined ? settings.dankBarOpenOnOverview : false,
|
|
visible: settings.dankBarVisible !== undefined ? settings.dankBarVisible : true,
|
|
popupGapsAuto: settings.popupGapsAuto !== undefined ? settings.popupGapsAuto : true,
|
|
popupGapsManual: settings.popupGapsManual !== undefined ? settings.popupGapsManual : 4
|
|
};
|
|
|
|
settings.barConfigs = [defaultConfig];
|
|
|
|
var legacyKeys = [
|
|
"dankBarLeftWidgets", "dankBarCenterWidgets", "dankBarRightWidgets",
|
|
"dankBarWidgetOrder", "dankBarAutoHide", "dankBarAutoHideDelay",
|
|
"dankBarOpenOnOverview", "dankBarVisible", "dankBarSpacing",
|
|
"dankBarBottomGap", "dankBarInnerPadding", "dankBarPosition",
|
|
"dankBarSquareCorners", "dankBarNoBackground", "dankBarGothCornersEnabled",
|
|
"dankBarGothCornerRadiusOverride", "dankBarGothCornerRadiusValue",
|
|
"dankBarBorderEnabled", "dankBarBorderColor", "dankBarBorderOpacity",
|
|
"dankBarBorderThickness", "popupGapsAuto", "popupGapsManual",
|
|
"dankBarAtBottom", "topBarAtBottom", "dankBarTransparency", "dankBarWidgetTransparency"
|
|
];
|
|
|
|
for (var i = 0; i < legacyKeys.length; i++) {
|
|
delete settings[legacyKeys[i]];
|
|
}
|
|
|
|
console.info("Migrated single bar settings to barConfigs");
|
|
}
|
|
|
|
settings.configVersion = 2;
|
|
}
|
|
|
|
if (currentVersion < 3) {
|
|
console.info("Migrating settings from version", currentVersion, "to version 3");
|
|
console.info("Per-widget controlCenterButton config now supported via widgetData properties");
|
|
settings.configVersion = 3;
|
|
}
|
|
|
|
if (currentVersion < 4) {
|
|
console.info("Migrating settings from version", currentVersion, "to version 4");
|
|
console.info("Migrating desktop widgets to unified desktopWidgetInstances");
|
|
|
|
var instances = [];
|
|
|
|
if (settings.desktopClockEnabled) {
|
|
var clockPositions = {};
|
|
if (settings.desktopClockX !== undefined && settings.desktopClockX >= 0) {
|
|
clockPositions["default"] = {
|
|
x: settings.desktopClockX,
|
|
y: settings.desktopClockY,
|
|
width: settings.desktopClockWidth || 280,
|
|
height: settings.desktopClockHeight || 180
|
|
};
|
|
}
|
|
|
|
instances.push({
|
|
id: "dw_clock_primary",
|
|
widgetType: "desktopClock",
|
|
name: "Desktop Clock",
|
|
enabled: true,
|
|
config: {
|
|
style: settings.desktopClockStyle || "analog",
|
|
transparency: settings.desktopClockTransparency !== undefined ? settings.desktopClockTransparency : 0.8,
|
|
colorMode: settings.desktopClockColorMode || "primary",
|
|
customColor: settings.desktopClockCustomColor || "#ffffff",
|
|
showDate: settings.desktopClockShowDate !== false,
|
|
showAnalogNumbers: settings.desktopClockShowAnalogNumbers || false,
|
|
showAnalogSeconds: settings.desktopClockShowAnalogSeconds !== false,
|
|
displayPreferences: settings.desktopClockDisplayPreferences || ["all"]
|
|
},
|
|
positions: clockPositions
|
|
});
|
|
}
|
|
|
|
if (settings.systemMonitorEnabled) {
|
|
var sysmonPositions = {};
|
|
if (settings.systemMonitorX !== undefined && settings.systemMonitorX >= 0) {
|
|
sysmonPositions["default"] = {
|
|
x: settings.systemMonitorX,
|
|
y: settings.systemMonitorY,
|
|
width: settings.systemMonitorWidth || 320,
|
|
height: settings.systemMonitorHeight || 480
|
|
};
|
|
}
|
|
|
|
instances.push({
|
|
id: "dw_sysmon_primary",
|
|
widgetType: "systemMonitor",
|
|
name: "System Monitor",
|
|
enabled: true,
|
|
config: {
|
|
showHeader: settings.systemMonitorShowHeader !== false,
|
|
transparency: settings.systemMonitorTransparency !== undefined ? settings.systemMonitorTransparency : 0.8,
|
|
colorMode: settings.systemMonitorColorMode || "primary",
|
|
customColor: settings.systemMonitorCustomColor || "#ffffff",
|
|
showCpu: settings.systemMonitorShowCpu !== false,
|
|
showCpuGraph: settings.systemMonitorShowCpuGraph !== false,
|
|
showCpuTemp: settings.systemMonitorShowCpuTemp !== false,
|
|
showGpuTemp: settings.systemMonitorShowGpuTemp || false,
|
|
gpuPciId: settings.systemMonitorGpuPciId || "",
|
|
showMemory: settings.systemMonitorShowMemory !== false,
|
|
showMemoryGraph: settings.systemMonitorShowMemoryGraph !== false,
|
|
showNetwork: settings.systemMonitorShowNetwork !== false,
|
|
showNetworkGraph: settings.systemMonitorShowNetworkGraph !== false,
|
|
showDisk: settings.systemMonitorShowDisk !== false,
|
|
showTopProcesses: settings.systemMonitorShowTopProcesses || false,
|
|
topProcessCount: settings.systemMonitorTopProcessCount || 3,
|
|
topProcessSortBy: settings.systemMonitorTopProcessSortBy || "cpu",
|
|
layoutMode: settings.systemMonitorLayoutMode || "auto",
|
|
graphInterval: settings.systemMonitorGraphInterval || 60,
|
|
displayPreferences: settings.systemMonitorDisplayPreferences || ["all"]
|
|
},
|
|
positions: sysmonPositions
|
|
});
|
|
}
|
|
|
|
var variants = settings.systemMonitorVariants || [];
|
|
for (var i = 0; i < variants.length; i++) {
|
|
var v = variants[i];
|
|
instances.push({
|
|
id: v.id,
|
|
widgetType: "systemMonitor",
|
|
name: v.name || ("System Monitor " + (i + 2)),
|
|
enabled: true,
|
|
config: v.config || {},
|
|
positions: v.positions || {}
|
|
});
|
|
}
|
|
|
|
settings.desktopWidgetInstances = instances;
|
|
settings.configVersion = 4;
|
|
}
|
|
|
|
if (currentVersion < 5) {
|
|
console.info("Migrating settings from version", currentVersion, "to version 5");
|
|
console.info("Moving sensitive data (weather location, coordinates) to session.json");
|
|
|
|
delete settings.weatherLocation;
|
|
delete settings.weatherCoordinates;
|
|
|
|
settings.configVersion = 5;
|
|
}
|
|
|
|
return settings;
|
|
}
|
|
|
|
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) {
|
|
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;
|
|
}
|
|
}
|