From b05049dedf0f16197c3e32d5bf5d1d4652c6d9ba Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 10 May 2025 21:23:20 +0200 Subject: [PATCH] move toPlainObject to object_utils.js --- .../modules/common/functions/object_utils.js | 29 +++++++++++++++ .config/quickshell/services/ConfigLoader.qml | 35 +++---------------- 2 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 .config/quickshell/modules/common/functions/object_utils.js diff --git a/.config/quickshell/modules/common/functions/object_utils.js b/.config/quickshell/modules/common/functions/object_utils.js new file mode 100644 index 000000000..51eed7f92 --- /dev/null +++ b/.config/quickshell/modules/common/functions/object_utils.js @@ -0,0 +1,29 @@ +function trimFileProtocol(str) { + return str.startsWith("file://") ? str.slice(7) : str; +} + +function toPlainObject(qtObj) { + if (qtObj === null || typeof qtObj !== "object") return qtObj; + + // Handle arrays + if (Array.isArray(qtObj)) { + return qtObj.map(toPlainObject); + } + + const result = ({}); + for (let key in qtObj) { + if ( + typeof qtObj[key] !== "function" && + !key.startsWith("objectName") && + !key.startsWith("children") && + !key.startsWith("object") && + !key.startsWith("parent") && + !key.startsWith("metaObject") && + !key.startsWith("destroyed") && + !key.startsWith("reloadableId") + ) { + result[key] = toPlainObject(qtObj[key]); + } + } + return result; +} \ No newline at end of file diff --git a/.config/quickshell/services/ConfigLoader.qml b/.config/quickshell/services/ConfigLoader.qml index 5f20c7fbe..176dfd0ca 100644 --- a/.config/quickshell/services/ConfigLoader.qml +++ b/.config/quickshell/services/ConfigLoader.qml @@ -2,6 +2,8 @@ pragma Singleton pragma ComponentBehavior: Bound import "root:/modules/common" +import "root:/modules/common/functions/file_utils.js" as FileUtils +import "root:/modules/common/functions/object_utils.js" as ObjectUtils import QtQuick import Quickshell import Quickshell.Io @@ -12,35 +14,9 @@ Singleton { id: root property string fileDir: `${StandardPaths.standardLocations(StandardPaths.ConfigLocation)[0]}/illogical-impulse` property string fileName: "config.json" - property string filePath: `${root.fileDir}/${root.fileName}` + property string filePath: FileUtils.trimFileProtocol(`${root.fileDir}/${root.fileName}`) property bool firstLoad: true - function toPlainObject(qtObj) { - if (qtObj === null || typeof qtObj !== "object") return qtObj; - - // Handle arrays - if (Array.isArray(qtObj)) { - return qtObj.map(toPlainObject); - } - - const result = ({}); - for (let key in qtObj) { - if ( - typeof qtObj[key] !== "function" && - !key.startsWith("objectName") && - !key.startsWith("children") && - !key.startsWith("object") && - !key.startsWith("parent") && - !key.startsWith("metaObject") && - !key.startsWith("destroyed") && - !key.startsWith("reloadableId") - ) { - result[key] = toPlainObject(qtObj[key]); - } - } - return result; - } - function loadConfig() { configFileView.reload() } @@ -94,7 +70,7 @@ Singleton { FileView { id: configFileView - path: root.filePath + path: Qt.resolvedUrl(root.filePath) watchChanges: true onFileChanged: { console.log("[ConfigLoader] File changed, reloading...") @@ -108,8 +84,7 @@ Singleton { onLoadFailed: (error) => { if(error == FileViewError.FileNotFound) { console.log("[ConfigLoader] File not found, creating new file.") - // Apply ConfigOptions json to file - const plainConfig = toPlainObject(ConfigOptions) + const plainConfig = ObjectUtils.toPlainObject(ConfigOptions) configFileView.setText(JSON.stringify(plainConfig, null, 2)) Hyprland.dispatch(`exec notify-send "Shell configuration created" "${root.filePath}"`) } else {