From 32ff695d9e2993fcc904a58b3f5486b2285e8825 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:29:38 +1000 Subject: filedialog: better icon filtering Only thumbnail valid image types Also move wallpaper extensions into separate singleton in utils --- modules/background/Wallpaper.qml | 2 +- modules/dashboard/Wrapper.qml | 2 +- services/Wallpapers.qml | 5 ++--- utils/Images.qml | 12 ++++++++++++ widgets/filedialog/FolderContents.qml | 2 +- 5 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 utils/Images.qml diff --git a/modules/background/Wallpaper.qml b/modules/background/Wallpaper.qml index 57f5dc0..2ec4927 100644 --- a/modules/background/Wallpaper.qml +++ b/modules/background/Wallpaper.qml @@ -66,7 +66,7 @@ Item { title: qsTr("Select a wallpaper") filterLabel: qsTr("Image files") - filters: Wallpapers.extensions + filters: Images.validImageExtensions onAccepted: path => Wallpapers.setWallpaper(path) } diff --git a/modules/dashboard/Wrapper.qml b/modules/dashboard/Wrapper.qml index d3630a6..0336d59 100644 --- a/modules/dashboard/Wrapper.qml +++ b/modules/dashboard/Wrapper.qml @@ -17,7 +17,7 @@ Item { readonly property FileDialog facePicker: FileDialog { title: qsTr("Select a profile picture") filterLabel: qsTr("Image files") - filters: Wallpapers.extensions + filters: Images.validImageExtensions onAccepted: path => { Paths.copy(path, `${Paths.home}/.face`); Quickshell.execDetached(["notify-send", "-a", "caelestia-shell", "-u", "low", "-h", `STRING:image-path:${path}`, "Profile picture changed", `Profile picture changed to ${Paths.shortenHome(path)}`]); diff --git a/services/Wallpapers.qml b/services/Wallpapers.qml index d72423b..2044c87 100644 --- a/services/Wallpapers.qml +++ b/services/Wallpapers.qml @@ -10,7 +10,6 @@ Searcher { id: root readonly property string currentNamePath: Paths.strip(`${Paths.state}/wallpaper/path.txt`) - readonly property list extensions: ["jpg", "jpeg", "png", "webp", "tif", "tiff"] property bool showPreview: false readonly property string current: showPreview ? previewPath : actualCurrent @@ -89,7 +88,7 @@ Searcher { running: true command: ["find", Paths.expandTilde(Config.paths.wallpaperDir), "-type", "d", "-path", '*/.*', "-prune", "-o", "-not", "-name", '.*', "-type", "f", "-print"] stdout: StdioCollector { - onStreamFinished: wallpapers.model = text.trim().split("\n").filter(w => root.extensions.includes(w.slice(w.lastIndexOf(".") + 1))).sort() + onStreamFinished: wallpapers.model = text.trim().split("\n").filter(w => Images.isValidImageByName(w)).sort() } } @@ -100,7 +99,7 @@ Searcher { command: ["inotifywait", "-r", "-e", "close_write,moved_to,create", "-m", Paths.expandTilde(Config.paths.wallpaperDir)] stdout: SplitParser { onRead: data => { - if (root.extensions.includes(data.slice(data.lastIndexOf(".") + 1))) + if (Images.isValidImageByName(data)) getWallsProc.running = true; } } diff --git a/utils/Images.qml b/utils/Images.qml new file mode 100644 index 0000000..a006d32 --- /dev/null +++ b/utils/Images.qml @@ -0,0 +1,12 @@ +pragma Singleton + +import Quickshell + +Singleton { + readonly property list validImageTypes: ["jpeg", "png", "webp", "tiff", "svg"] + readonly property list validImageExtensions: ["jpg", "jpeg", "png", "webp", "tif", "tiff", "svg"] + + function isValidImageByName(name: string): bool { + return validImageTypes.some(t => name.endsWith(`.${t}`)); + } +} diff --git a/widgets/filedialog/FolderContents.qml b/widgets/filedialog/FolderContents.qml index 5c3994e..1881288 100644 --- a/widgets/filedialog/FolderContents.qml +++ b/widgets/filedialog/FolderContents.qml @@ -171,7 +171,7 @@ Item { stdout: StdioCollector { onStreamFinished: { const mime = text.split(";")[0].replace("/", "-"); - icon.source = mime.startsWith("image-") ? item.fileUrl : Quickshell.iconPath(mime, "image-missing"); + icon.source = Images.validImageTypes.some(t => mime === `image-${t}`) ? item.fileUrl : Quickshell.iconPath(mime, "image-missing"); } } } -- cgit v1.2.3-freya