mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-08 06:25:37 -05:00
theme: handle colors being deleted more gracefully
This commit is contained in:
@@ -14,6 +14,8 @@ import "StockThemes.js" as StockThemes
|
|||||||
Singleton {
|
Singleton {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
|
readonly property string stateDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.GenericCacheLocation).toString()) + "/DankMaterialShell"
|
||||||
|
|
||||||
readonly property bool envDisableMatugen: Quickshell.env("DMS_DISABLE_MATUGEN") === "1" || Quickshell.env("DMS_DISABLE_MATUGEN") === "true"
|
readonly property bool envDisableMatugen: Quickshell.env("DMS_DISABLE_MATUGEN") === "1" || Quickshell.env("DMS_DISABLE_MATUGEN") === "true"
|
||||||
|
|
||||||
readonly property real popupDistance: {
|
readonly property real popupDistance: {
|
||||||
@@ -24,6 +26,7 @@ Singleton {
|
|||||||
property string currentTheme: "blue"
|
property string currentTheme: "blue"
|
||||||
property string currentThemeCategory: "generic"
|
property string currentThemeCategory: "generic"
|
||||||
property bool isLightMode: typeof SessionData !== "undefined" ? SessionData.isLightMode : false
|
property bool isLightMode: typeof SessionData !== "undefined" ? SessionData.isLightMode : false
|
||||||
|
property bool colorsFileLoadFailed: false
|
||||||
|
|
||||||
readonly property string dynamic: "dynamic"
|
readonly property string dynamic: "dynamic"
|
||||||
readonly property string custom : "custom"
|
readonly property string custom : "custom"
|
||||||
@@ -78,8 +81,6 @@ Singleton {
|
|||||||
property var matugenColors: ({})
|
property var matugenColors: ({})
|
||||||
property var customThemeData: null
|
property var customThemeData: null
|
||||||
|
|
||||||
readonly property string stateDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.CacheLocation).toString()) + "/DankMaterialShell"
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
Quickshell.execDetached(["mkdir", "-p", stateDir])
|
Quickshell.execDetached(["mkdir", "-p", stateDir])
|
||||||
Proc.runCommand("matugenCheck", ["which", "matugen"], (output, code) => {
|
Proc.runCommand("matugenCheck", ["which", "matugen"], (output, code) => {
|
||||||
@@ -90,6 +91,20 @@ Singleton {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (colorsFileLoadFailed && currentTheme === dynamic && wallpaperPath) {
|
||||||
|
console.log("Theme: Matugen now available, regenerating colors for dynamic theme")
|
||||||
|
const isLight = (typeof SessionData !== "undefined" && SessionData.isLightMode)
|
||||||
|
const iconTheme = (typeof SettingsData !== "undefined" && SettingsData.iconTheme) ? SettingsData.iconTheme : "System Default"
|
||||||
|
Quickshell.execDetached(["rm", "-f", stateDir + "/matugen.key"])
|
||||||
|
const selectedMatugenType = (typeof SettingsData !== "undefined" && SettingsData.matugenScheme) ? SettingsData.matugenScheme : "scheme-tonal-spot"
|
||||||
|
if (wallpaperPath.startsWith("#")) {
|
||||||
|
setDesiredTheme("hex", wallpaperPath, isLight, iconTheme, selectedMatugenType)
|
||||||
|
} else {
|
||||||
|
setDesiredTheme("image", wallpaperPath, isLight, iconTheme, selectedMatugenType)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const isLight = (typeof SessionData !== "undefined" && SessionData.isLightMode)
|
const isLight = (typeof SessionData !== "undefined" && SessionData.isLightMode)
|
||||||
const iconTheme = (typeof SettingsData !== "undefined" && SettingsData.iconTheme) ? SettingsData.iconTheme : "System Default"
|
const iconTheme = (typeof SettingsData !== "undefined" && SettingsData.iconTheme) ? SettingsData.iconTheme : "System Default"
|
||||||
|
|
||||||
@@ -623,10 +638,12 @@ Singleton {
|
|||||||
|
|
||||||
function setDesiredTheme(kind, value, isLight, iconTheme, matugenType) {
|
function setDesiredTheme(kind, value, isLight, iconTheme, matugenType) {
|
||||||
if (!matugenAvailable) {
|
if (!matugenAvailable) {
|
||||||
console.warn("matugen not available or disabled - cannot set system theme")
|
console.warn("Theme: matugen not available or disabled - cannot set system theme")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("Theme: Setting desired theme -", kind, "mode:", isLight ? "light" : "dark", "type:", matugenType)
|
||||||
|
|
||||||
if (typeof NiriService !== "undefined" && CompositorService.isNiri) {
|
if (typeof NiriService !== "undefined" && CompositorService.isNiri) {
|
||||||
NiriService.suppressNextToast()
|
NiriService.suppressNextToast()
|
||||||
}
|
}
|
||||||
@@ -647,12 +664,13 @@ Singleton {
|
|||||||
Quickshell.execDetached(["sh", "-c", `mkdir -p '${stateDir}' && cat > '${desiredPath}' << 'EOF'\n${json}\nEOF`])
|
Quickshell.execDetached(["sh", "-c", `mkdir -p '${stateDir}' && cat > '${desiredPath}' << 'EOF'\n${json}\nEOF`])
|
||||||
workerRunning = true
|
workerRunning = true
|
||||||
if (rawWallpaperPath.startsWith("we:")) {
|
if (rawWallpaperPath.startsWith("we:")) {
|
||||||
console.log("calling matugen worker")
|
console.log("Theme: Starting matugen worker (WE wallpaper)")
|
||||||
systemThemeGenerator.command = [
|
systemThemeGenerator.command = [
|
||||||
"sh", "-c",
|
"sh", "-c",
|
||||||
`sleep 1 && ${shellDir}/scripts/matugen-worker.sh '${stateDir}' '${shellDir}' '${configDir}' --run`
|
`sleep 1 && ${shellDir}/scripts/matugen-worker.sh '${stateDir}' '${shellDir}' '${configDir}' --run`
|
||||||
]
|
]
|
||||||
} else {
|
} else {
|
||||||
|
console.log("Theme: Starting matugen worker")
|
||||||
systemThemeGenerator.command = [shellDir + "/scripts/matugen-worker.sh", stateDir, shellDir, configDir, "--run"]
|
systemThemeGenerator.command = [shellDir + "/scripts/matugen-worker.sh", stateDir, shellDir, configDir, "--run"]
|
||||||
}
|
}
|
||||||
systemThemeGenerator.running = true
|
systemThemeGenerator.running = true
|
||||||
@@ -814,11 +832,19 @@ Singleton {
|
|||||||
onExited: exitCode => {
|
onExited: exitCode => {
|
||||||
workerRunning = false
|
workerRunning = false
|
||||||
|
|
||||||
if (exitCode !== 0 && exitCode !== 2) {
|
if (exitCode === 0) {
|
||||||
|
console.log("Theme: Matugen worker completed successfully")
|
||||||
|
if (currentTheme === dynamic) {
|
||||||
|
console.log("Theme: Reloading dynamic colors file")
|
||||||
|
dynamicColorsFileView.reload()
|
||||||
|
}
|
||||||
|
} else if (exitCode === 2) {
|
||||||
|
console.log("Theme: Matugen worker completed with code 2 (no changes needed)")
|
||||||
|
} else {
|
||||||
if (typeof ToastService !== "undefined") {
|
if (typeof ToastService !== "undefined") {
|
||||||
ToastService.showError("Theme worker failed (" + exitCode + ")")
|
ToastService.showError("Theme worker failed (" + exitCode + ")")
|
||||||
}
|
}
|
||||||
console.warn("Theme worker failed with exit code:", exitCode)
|
console.warn("Theme: Matugen worker failed with exit code:", exitCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -882,6 +908,8 @@ Singleton {
|
|||||||
|
|
||||||
onLoaded: {
|
onLoaded: {
|
||||||
if (currentTheme === dynamic) {
|
if (currentTheme === dynamic) {
|
||||||
|
console.log("Theme: Dynamic colors file loaded successfully")
|
||||||
|
colorsFileLoadFailed = false
|
||||||
parseAndLoadColors()
|
parseAndLoadColors()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -893,10 +921,20 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onLoadFailed: function (error) {
|
onLoadFailed: function (error) {
|
||||||
if (currentTheme === dynamic && typeof ToastService !== "undefined") {
|
if (currentTheme === dynamic) {
|
||||||
ToastService.showError("Failed to read dynamic colors: " + error)
|
console.log("Theme: Dynamic colors file load failed, marking for regeneration")
|
||||||
|
colorsFileLoadFailed = true
|
||||||
|
const isGreeterMode = (typeof SessionData !== "undefined" && SessionData.isGreeterMode)
|
||||||
|
if (!isGreeterMode && matugenAvailable && wallpaperPath) {
|
||||||
|
console.log("Theme: Matugen available, triggering immediate regeneration")
|
||||||
|
generateSystemThemesFromCurrentTheme()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onPathChanged: {
|
||||||
|
colorsFileLoadFailed = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IpcHandler {
|
IpcHandler {
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ Item {
|
|||||||
source: {
|
source: {
|
||||||
var currentWallpaper = SessionData.getMonitorWallpaper(screenName)
|
var currentWallpaper = SessionData.getMonitorWallpaper(screenName)
|
||||||
if (screenName && currentWallpaper && currentWallpaper.startsWith("we:")) {
|
if (screenName && currentWallpaper && currentWallpaper.startsWith("we:")) {
|
||||||
const cacheHome = StandardPaths.writableLocation(StandardPaths.CacheLocation).toString()
|
const cacheHome = StandardPaths.writableLocation(StandardPaths.GenericCacheLocation).toString()
|
||||||
const baseDir = Paths.strip(cacheHome)
|
const baseDir = Paths.strip(cacheHome)
|
||||||
const screenshotPath = baseDir + "/DankMaterialShell/we_screenshots" + "/" + currentWallpaper.substring(3) + ".jpg"
|
const screenshotPath = baseDir + "/DankMaterialShell/we_screenshots" + "/" + currentWallpaper.substring(3) + ".jpg"
|
||||||
return screenshotPath
|
return screenshotPath
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ Item {
|
|||||||
source: {
|
source: {
|
||||||
var currentWallpaper = SessionData.getMonitorWallpaper(screenName)
|
var currentWallpaper = SessionData.getMonitorWallpaper(screenName)
|
||||||
if (screenName && currentWallpaper && currentWallpaper.startsWith("we:")) {
|
if (screenName && currentWallpaper && currentWallpaper.startsWith("we:")) {
|
||||||
const cacheHome = StandardPaths.writableLocation(StandardPaths.CacheLocation).toString()
|
const cacheHome = StandardPaths.writableLocation(StandardPaths.GenericCacheLocation).toString()
|
||||||
const baseDir = Paths.strip(cacheHome)
|
const baseDir = Paths.strip(cacheHome)
|
||||||
const screenshotPath = baseDir + "/DankMaterialShell/we_screenshots" + "/" + currentWallpaper.substring(3) + ".jpg"
|
const screenshotPath = baseDir + "/DankMaterialShell/we_screenshots" + "/" + currentWallpaper.substring(3) + ".jpg"
|
||||||
return screenshotPath
|
return screenshotPath
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Item {
|
|||||||
command: []
|
command: []
|
||||||
onExited: (code) => {
|
onExited: (code) => {
|
||||||
if (pendingSceneId !== "") {
|
if (pendingSceneId !== "") {
|
||||||
const cacheHome = StandardPaths.writableLocation(StandardPaths.CacheLocation).toString()
|
const cacheHome = StandardPaths.writableLocation(StandardPaths.GenericCacheLocation).toString()
|
||||||
const baseDir = Paths.strip(cacheHome)
|
const baseDir = Paths.strip(cacheHome)
|
||||||
const outDir = baseDir + "/DankMaterialShell/we_screenshots"
|
const outDir = baseDir + "/DankMaterialShell/we_screenshots"
|
||||||
const outPath = outDir + "/" + pendingSceneId + ".jpg"
|
const outPath = outDir + "/" + pendingSceneId + ".jpg"
|
||||||
|
|||||||
Reference in New Issue
Block a user