Migration: migrate deprecated desktop media player settings

This commit is contained in:
Ly-sec
2025-12-28 20:58:03 +01:00
parent 72f82cc0b8
commit a9ce31c8c6
3 changed files with 108 additions and 2 deletions
+104
View File
@@ -0,0 +1,104 @@
import QtQuick
QtObject {
id: root
// Migrate desktop widget MediaPlayer legacy properties
// - hideWhenIdle: true -> hideMode: "idle"
// - visualizerVisibility: false -> showVisualizer: false
function migrate(adapter, logger, rawJson) {
logger.i("Settings", "Migrating settings to v34");
// Check rawJson for desktop widgets
if (rawJson?.desktopWidgets?.monitorWidgets) {
var monitorWidgets = rawJson.desktopWidgets.monitorWidgets;
var migrated = false;
// Ensure adapter has desktopWidgets.monitorWidgets
if (!adapter.desktopWidgets) {
adapter.desktopWidgets = {};
}
if (!adapter.desktopWidgets.monitorWidgets) {
adapter.desktopWidgets.monitorWidgets = [];
}
for (var i = 0; i < monitorWidgets.length; i++) {
var monitor = monitorWidgets[i];
if (monitor.widgets && Array.isArray(monitor.widgets)) {
// Find or create corresponding monitor in adapter
var adapterMonitorIndex = -1;
for (var k = 0; k < adapter.desktopWidgets.monitorWidgets.length; k++) {
if (adapter.desktopWidgets.monitorWidgets[k].name === monitor.name) {
adapterMonitorIndex = k;
break;
}
}
// Create monitor entry if it doesn't exist
if (adapterMonitorIndex < 0) {
adapter.desktopWidgets.monitorWidgets.push({
"name": monitor.name,
"widgets": []
});
adapterMonitorIndex = adapter.desktopWidgets.monitorWidgets.length - 1;
}
// Ensure widgets array exists
if (!adapter.desktopWidgets.monitorWidgets[adapterMonitorIndex].widgets) {
adapter.desktopWidgets.monitorWidgets[adapterMonitorIndex].widgets = [];
}
for (var j = 0; j < monitor.widgets.length; j++) {
var widget = monitor.widgets[j];
// Only migrate MediaPlayer widgets
if (widget.id === "MediaPlayer") {
var needsUpdate = false;
// Get existing widget from adapter or create new one
var adapterWidget = (j < adapter.desktopWidgets.monitorWidgets[adapterMonitorIndex].widgets.length) ? adapter.desktopWidgets.monitorWidgets[adapterMonitorIndex].widgets[j] : Object.assign({}, widget);
// Migrate hideWhenIdle to hideMode
if (widget.hideWhenIdle === true && (adapterWidget.hideMode === undefined || adapterWidget.hideMode === "visible")) {
adapterWidget.hideMode = "idle";
if (adapterWidget.hideWhenIdle !== undefined) {
delete adapterWidget.hideWhenIdle;
}
needsUpdate = true;
logger.i("Settings", "Migrated MediaPlayer hideWhenIdle=true to hideMode=idle for monitor: " + (monitor.name || "unknown"));
}
// Migrate visualizerVisibility to showVisualizer
if (widget.visualizerVisibility === false && adapterWidget.showVisualizer === undefined) {
adapterWidget.showVisualizer = false;
if (adapterWidget.visualizerVisibility !== undefined) {
delete adapterWidget.visualizerVisibility;
}
needsUpdate = true;
logger.i("Settings", "Migrated MediaPlayer visualizerVisibility=false to showVisualizer=false for monitor: " + (monitor.name || "unknown"));
}
// Update the widget if changes were made
if (needsUpdate) {
// Ensure widget exists in adapter array
while (adapter.desktopWidgets.monitorWidgets[adapterMonitorIndex].widgets.length <= j) {
adapter.desktopWidgets.monitorWidgets[adapterMonitorIndex].widgets.push({});
}
adapter.desktopWidgets.monitorWidgets[adapterMonitorIndex].widgets[j] = adapterWidget;
migrated = true;
}
}
}
}
}
if (migrated) {
logger.i("Settings", "Migration to v34 completed: migrated MediaPlayer widget properties");
} else {
logger.i("Settings", "Migration to v34 completed: no MediaPlayer widgets needed migration");
}
}
return true;
}
}
+3 -1
View File
@@ -11,7 +11,8 @@ QtObject {
28: migration28Component,
29: migration29Component,
32: migration32Component,
33: migration33Component
33: migration33Component,
34: migration34Component
})
// Migration components
@@ -20,4 +21,5 @@ QtObject {
property Component migration29Component: Migration29 {}
property Component migration32Component: Migration32 {}
property Component migration33Component: Migration33 {}
property Component migration34Component: Migration34 {}
}
+1 -1
View File
@@ -24,7 +24,7 @@ Singleton {
- Default cache directory: ~/.cache/noctalia
*/
readonly property alias data: adapter // Used to access via Settings.data.xxx.yyy
readonly property int settingsVersion: 33
readonly property int settingsVersion: 34
readonly property bool isDebug: Quickshell.env("NOCTALIA_DEBUG") === "1"
readonly property string shellName: "noctalia"
readonly property string configDir: Quickshell.env("NOCTALIA_CONFIG_DIR") || (Quickshell.env("XDG_CONFIG_HOME") || Quickshell.env("HOME") + "/.config") + "/" + shellName + "/"