From 0f0471fa6085d988a0a16bae9ced6b3a4e44b57d Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sun, 20 Jul 2025 12:10:16 +1000 Subject: filedialog: better mime detection Required file Also show folders first --- widgets/filedialog/FolderContents.qml | 36 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 22 deletions(-) (limited to 'widgets') diff --git a/widgets/filedialog/FolderContents.qml b/widgets/filedialog/FolderContents.qml index f8e10d9..c6129df 100644 --- a/widgets/filedialog/FolderContents.qml +++ b/widgets/filedialog/FolderContents.qml @@ -15,13 +15,13 @@ GridView { required property var dialog - property var mimes: ({}) - clip: true focus: true + currentIndex: -1 Keys.onEscapePressed: root.currentIndex = -1 model: FolderListModel { + showDirsFirst: true folder: { let url = "file://"; if (root.dialog.cwd[0] === "Home") @@ -77,18 +77,22 @@ GridView { asynchronous: true implicitSize: Sizes.itemWidth - Appearance.padding.normal * 2 - source: { - const mime = root.mimes[item.fileSuffix]; - - if (mime?.startsWith("image-")) - return item.fileUrl; - - return Quickshell.iconPath(item.fileIsDir ? "inode-directory" : root.mimes[item.fileSuffix] ?? "application-x-zerosize", "image-missing"); - } + source: Quickshell.iconPath(item.fileIsDir ? "inode-directory" : "application-x-zerosize") onStatusChanged: { if (status === Image.Error) source = Quickshell.iconPath("error"); } + + Process { + running: !item.fileIsDir + command: ["file", "--mime", "-b", item.filePath] + stdout: StdioCollector { + onStreamFinished: { + const mime = text.split(";")[0].replace("/", "-"); + icon.source = mime.startsWith("image-") ? item.fileUrl : Quickshell.iconPath(mime, "image-missing"); + } + } + } } StyledText { @@ -115,16 +119,4 @@ GridView { } } } - - FileView { - path: "/etc/mime.types" - onLoaded: { - root.mimes = text().split("\n").filter(l => !l.startsWith("#")).reduce((mimes, line) => { - const [type, ext] = line.split(/\s+/); - if (ext) - mimes[ext] = type.replace("/", "-"); - return mimes; - }, {}); - } - } } -- cgit v1.2.3-freya