summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/dms/Common/CacheData.qml
diff options
context:
space:
mode:
authorNippy <nippy@rp1.hu>2026-05-08 19:50:49 +0200
committerNippy <nippy@rp1.hu>2026-05-08 19:50:49 +0200
commit3462bcc46ecf74f576ea4397f16492c16bd75b10 (patch)
treec5ab7aef4498647e057bda8d49c11e5f9dda74c9 /raveos-hyprland-theme/theme-data/dms/Common/CacheData.qml
parent56616f693b4f263cbf0d47da43b67424efa6022d (diff)
downloadRaveOS-PKGBUILD-3462bcc46ecf74f576ea4397f16492c16bd75b10.tar.gz
RaveOS-PKGBUILD-3462bcc46ecf74f576ea4397f16492c16bd75b10.zip
raveos update
Diffstat (limited to 'raveos-hyprland-theme/theme-data/dms/Common/CacheData.qml')
-rw-r--r--raveos-hyprland-theme/theme-data/dms/Common/CacheData.qml227
1 files changed, 227 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/dms/Common/CacheData.qml b/raveos-hyprland-theme/theme-data/dms/Common/CacheData.qml
new file mode 100644
index 0000000..6de7a8b
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/dms/Common/CacheData.qml
@@ -0,0 +1,227 @@
+pragma Singleton
+pragma ComponentBehavior: Bound
+
+import QtCore
+import QtQuick
+import Quickshell
+import Quickshell.Io
+
+Singleton {
+ id: root
+
+ readonly property int cacheConfigVersion: 1
+
+ readonly property bool isGreeterMode: Quickshell.env("DMS_RUN_GREETER") === "1" || Quickshell.env("DMS_RUN_GREETER") === "true"
+
+ readonly property string _stateUrl: StandardPaths.writableLocation(StandardPaths.GenericCacheLocation)
+ readonly property string _stateDir: Paths.strip(_stateUrl)
+
+ property bool _loading: false
+
+ property string wallpaperLastPath: ""
+ property string profileLastPath: ""
+
+ property var fileBrowserSettings: ({
+ "wallpaper": {
+ "lastPath": "",
+ "viewMode": "grid",
+ "sortBy": "name",
+ "sortAscending": true,
+ "iconSizeIndex": 1,
+ "showSidebar": true
+ },
+ "profile": {
+ "lastPath": "",
+ "viewMode": "grid",
+ "sortBy": "name",
+ "sortAscending": true,
+ "iconSizeIndex": 1,
+ "showSidebar": true
+ },
+ "notepad_save": {
+ "lastPath": "",
+ "viewMode": "list",
+ "sortBy": "name",
+ "sortAscending": true,
+ "iconSizeIndex": 1,
+ "showSidebar": true
+ },
+ "notepad_load": {
+ "lastPath": "",
+ "viewMode": "list",
+ "sortBy": "name",
+ "sortAscending": true,
+ "iconSizeIndex": 1,
+ "showSidebar": true
+ },
+ "generic": {
+ "lastPath": "",
+ "viewMode": "list",
+ "sortBy": "name",
+ "sortAscending": true,
+ "iconSizeIndex": 1,
+ "showSidebar": true
+ },
+ "default": {
+ "lastPath": "",
+ "viewMode": "list",
+ "sortBy": "name",
+ "sortAscending": true,
+ "iconSizeIndex": 1,
+ "showSidebar": true
+ }
+ })
+
+ Component.onCompleted: {
+ if (!isGreeterMode) {
+ loadCache();
+ }
+ }
+
+ function loadCache() {
+ _loading = true;
+ parseCache(cacheFile.text());
+ _loading = false;
+ }
+
+ function parseCache(content) {
+ _loading = true;
+ try {
+ if (content && content.trim()) {
+ const cache = JSON.parse(content);
+
+ wallpaperLastPath = cache.wallpaperLastPath !== undefined ? cache.wallpaperLastPath : "";
+ profileLastPath = cache.profileLastPath !== undefined ? cache.profileLastPath : "";
+
+ if (cache.fileBrowserSettings !== undefined) {
+ fileBrowserSettings = cache.fileBrowserSettings;
+ } else if (cache.fileBrowserViewMode !== undefined) {
+ fileBrowserSettings = {
+ "wallpaper": {
+ "lastPath": cache.wallpaperLastPath || "",
+ "viewMode": cache.fileBrowserViewMode || "grid",
+ "sortBy": cache.fileBrowserSortBy || "name",
+ "sortAscending": cache.fileBrowserSortAscending !== undefined ? cache.fileBrowserSortAscending : true,
+ "iconSizeIndex": cache.fileBrowserIconSizeIndex !== undefined ? cache.fileBrowserIconSizeIndex : 1,
+ "showSidebar": cache.fileBrowserShowSidebar !== undefined ? cache.fileBrowserShowSidebar : true
+ },
+ "profile": {
+ "lastPath": cache.profileLastPath || "",
+ "viewMode": cache.fileBrowserViewMode || "grid",
+ "sortBy": cache.fileBrowserSortBy || "name",
+ "sortAscending": cache.fileBrowserSortAscending !== undefined ? cache.fileBrowserSortAscending : true,
+ "iconSizeIndex": cache.fileBrowserIconSizeIndex !== undefined ? cache.fileBrowserIconSizeIndex : 1,
+ "showSidebar": cache.fileBrowserShowSidebar !== undefined ? cache.fileBrowserShowSidebar : true
+ },
+ "file": {
+ "lastPath": "",
+ "viewMode": "list",
+ "sortBy": "name",
+ "sortAscending": true,
+ "iconSizeIndex": 1,
+ "showSidebar": true
+ }
+ };
+ }
+
+ if (cache.configVersion === undefined) {
+ migrateFromUndefinedToV1(cache);
+ cleanupUnusedKeys();
+ saveCache();
+ }
+ }
+ } catch (e) {
+ console.warn("CacheData: Failed to parse cache:", e.message);
+ } finally {
+ _loading = false;
+ }
+ }
+
+ function saveCache() {
+ if (_loading)
+ return;
+ cacheFile.setText(JSON.stringify({
+ "wallpaperLastPath": wallpaperLastPath,
+ "profileLastPath": profileLastPath,
+ "fileBrowserSettings": fileBrowserSettings,
+ "configVersion": cacheConfigVersion
+ }, null, 2));
+ }
+
+ function migrateFromUndefinedToV1(cache) {
+ console.info("CacheData: Migrating configuration from undefined to version 1");
+ }
+
+ function cleanupUnusedKeys() {
+ const validKeys = ["wallpaperLastPath", "profileLastPath", "fileBrowserSettings", "configVersion"];
+
+ try {
+ const content = cacheFile.text();
+ if (!content || !content.trim())
+ return;
+ const cache = JSON.parse(content);
+ let needsSave = false;
+
+ for (const key in cache) {
+ if (!validKeys.includes(key)) {
+ console.log("CacheData: Removing unused key:", key);
+ delete cache[key];
+ needsSave = true;
+ }
+ }
+
+ if (needsSave) {
+ cacheFile.setText(JSON.stringify(cache, null, 2));
+ }
+ } catch (e) {
+ console.warn("CacheData: Failed to cleanup unused keys:", e.message);
+ }
+ }
+
+ function loadLauncherCache() {
+ try {
+ var content = launcherCacheFile.text();
+ if (content && content.trim())
+ return JSON.parse(content);
+ } catch (e) {
+ console.warn("CacheData: Failed to parse launcher cache:", e.message);
+ }
+ return null;
+ }
+
+ function saveLauncherCache(sections) {
+ if (_loading)
+ return;
+ launcherCacheFile.setText(JSON.stringify(sections));
+ }
+
+ FileView {
+ id: launcherCacheFile
+
+ path: isGreeterMode ? "" : _stateDir + "/DankMaterialShell/launcher_cache.json"
+ blockLoading: true
+ blockWrites: true
+ atomicWrites: true
+ watchChanges: false
+ }
+
+ FileView {
+ id: cacheFile
+
+ path: isGreeterMode ? "" : _stateDir + "/DankMaterialShell/cache.json"
+ blockLoading: true
+ blockWrites: true
+ atomicWrites: true
+ watchChanges: !isGreeterMode
+ onLoaded: {
+ if (!isGreeterMode) {
+ parseCache(cacheFile.text());
+ }
+ }
+ onLoadFailed: error => {
+ if (!isGreeterMode) {
+ console.info("CacheData: No cache file found, starting fresh");
+ }
+ }
+ }
+}