Wallpaper: cleanup

This commit is contained in:
LemmyCook 2025-08-29 13:04:11 -04:00
parent c37ef867a1
commit db3ea7ed73
3 changed files with 97 additions and 69 deletions

View file

@ -13,6 +13,7 @@ Singleton {
Logger.log("Wallpaper", "Service started")
}
// All available wallpaper transitions
readonly property ListModel transitionsModel: ListModel {
ListElement {
key: "none"
@ -29,13 +30,20 @@ Singleton {
Connections {
target: Settings.data.wallpaper
function onDirectoryChanged() { console.log("ondirchanged") ; root.listWallpapers() }
function onRandomEnabledChanged() { root.toggleRandomWallpaper() }
function onRandomIntervalSecChanged() { root.restartRandomWallpaperTimer() }
function onDirectoryChanged() {
root.listWallpapers()
}
function onRandomEnabledChanged() {
root.toggleRandomWallpaper()
}
function onRandomIntervalSecChanged() {
root.restartRandomWallpaperTimer()
}
}
// -------------------------------------------------------------------
function geMonitorDefinition(screenName) {
// Get specific monitor wallpaper data
function getMonitorConfig(screenName) {
var monitors = Settings.data.wallpaper.monitors
if (monitors !== undefined) {
for (var i = 0; i < monitors.length; i++) {
@ -47,42 +55,36 @@ Singleton {
}
// -------------------------------------------------------------------
function getMonitorWallpaperDirectory(screenName) {
var monitor = geMonitorDefinition(screenName)
if (monitor !== undefined) {
// Get specific monitor directory
function getMonitorDirectory(screenName) {
var monitor = getMonitorConfig(screenName)
if (monitor !== undefined && monitor.directory !== undefined) {
return monitor.directory
}
// Fall back to the main/single directory
return Settings.data.wallpaper.directory
}
// -------------------------------------------------------------------
function setMonitorWallpaperDirectory(screenName, directory) {
var monitor = geMonitorDefinition(screenName)
// Set specific monitor directory
function setMonitorDirectory(screenName, directory) {
var monitor = getMonitorConfig(screenName)
if (monitor !== undefined) {
monitor.directory = directory
return
} else {
Settings.data.wallpaper.monitors.push({
"name": screenName,
"directory": directory,
"wallpaper": ""
})
}
Settings.data.wallpaper.monitors.push({
"name": screenName,
"directory": directory,
"wallpaper": ""
})
}
// -------------------------------------------------------------------
function listWallpapers() {
Logger.log("Wallpaper", "Listing wallpapers")
scanning = true
wallpaperList = []
// Set the folder directly to avoid model reset issues
folderModel.folder = "file://" + (Settings.data.wallpaper.directory !== undefined ? Settings.data.wallpaper.directory : "")
}
// -------------------------------------------------------------------
// Get specific monitor wallpaper
function getWallpaper(screenName) {
// Logger.log("Wallpaper", "getWallpaper on", screenName)
var monitor = geMonitorDefinition(screenName)
var monitor = getMonitorConfig(screenName)
if ((monitor !== undefined) && (monitor["wallpaper"] !== undefined)) {
return monitor["wallpaper"]
}
@ -91,22 +93,22 @@ Singleton {
// -------------------------------------------------------------------
function changeWallpaper(screenName, path) {
Logger.log("Changing wallpaper")
if (screenName !== undefined) {
setCurrentWallpaper(screenName, path)
setWallpaper(screenName, path)
} else {
// If no screenName specified change for all screens
for (var i = 0; i < Quickshell.screens.length; i++) {
setCurrentWallpaper(Quickshell.screens[i].name, path, false)
setWallpaper(Quickshell.screens[i].name, path)
}
}
}
// -------------------------------------------------------------------
function setCurrentWallpaper(screenName, path) {
function setWallpaper(screenName, path) {
if (path === "" || path === undefined) {
return
}
if (screenName === undefined) {
Logger.warn("Wallpaper", "setCurrentWallpaper", "no screen specified")
return
@ -124,9 +126,9 @@ Singleton {
wallpaperChanged = true
Settings.data.wallpaper.monitors.push({
"name": screenName,
"directory": Settings.data.wallpaper.directory,
"directory": getMonitorDirectory(screenName),
"wallpaper": path
})
})
}
// Restart the random wallpaper timer
@ -142,13 +144,16 @@ Singleton {
// -------------------------------------------------------------------
function setRandomWallpaper() {
Logger.log("Wallpaper", "setRandomWallpaper");
Logger.log("Wallpaper", "setRandomWallpaper")
for (var i = 0; i < Quickshell.screens.length; i++) {
var screenName = Quickshell.screens[i].name
// TODO one list per monitor
var randomIndex = Math.floor(Math.random() * wallpaperList.length)
var randomPath = wallpaperList[randomIndex]
setCurrentWallpaper(screenName, randomPath)
var wallpaperList = getWallpaperList(screenName)
if (wallpaperList.length > 0) {
var randomIndex = Math.floor(Math.random() * wallpaperList.length)
var randomPath = wallpaperList[randomIndex]
setCurrentWallpaper(screenName, randomPath)
}
}
}
@ -171,6 +176,17 @@ Singleton {
}
}
// -------------------------------------------------------------------
function listWallpapers() {
if (!Settings.isLoaded) {
return
}
// TODO
Logger.log("Wallpaper", "Listing wallpapers for all monitors")
scanning = true
}
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// -------------------------------------------------------------------
@ -183,23 +199,23 @@ Singleton {
triggeredOnStart: false
}
FolderListModel {
id: folderModel
nameFilters: ["*.jpg", "*.jpeg", "*.png", "*.gif", "*.pnm", "*.bmp"]
showDirs: false
sortField: FolderListModel.Name
onStatusChanged: {
if (status === FolderListModel.Ready) {
var files = []
for (var i = 0; i < count; i++) {
var directory = (Settings.data.wallpaper.directory !== undefined ? Settings.data.wallpaper.directory : "")
var filepath = directory + "/" + get(i, "fileName")
files.push(filepath)
}
wallpaperList = files
scanning = false
Logger.log("Wallpaper", "List refreshed, count:", wallpaperList.length)
}
}
}
// FolderListModel {
// id: folderModel
// nameFilters: ["*.jpg", "*.jpeg", "*.png", "*.gif", "*.pnm", "*.bmp"]
// showDirs: false
// sortField: FolderListModel.Name
// onStatusChanged: {
// if (status === FolderListModel.Ready) {
// var files = []
// for (var i = 0; i < count; i++) {
// var directory = (Settings.data.wallpaper.directory !== undefined ? Settings.data.wallpaper.directory : "")
// var filepath = directory + "/" + get(i, "fileName")
// files.push(filepath)
// }
// wallpaperList = files
// scanning = false
// Logger.log("Wallpaper", "List refreshed, count:", wallpaperList.length)
// }
// }
// }
}