From 696ff4298fa4b34a2e109d9595f4776ae154b5e1 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 9 Nov 2025 12:57:05 +0100 Subject: [PATCH] BooruImage: refractor image downloader proc --- .../common/utils/ImageDownloaderProcess.qml | 31 +++++++++++++++++++ .../ii/sidebarLeft/anime/BooruImage.qml | 28 +++++++++-------- 2 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 dots/.config/quickshell/ii/modules/common/utils/ImageDownloaderProcess.qml diff --git a/dots/.config/quickshell/ii/modules/common/utils/ImageDownloaderProcess.qml b/dots/.config/quickshell/ii/modules/common/utils/ImageDownloaderProcess.qml new file mode 100644 index 000000000..11ff92a6d --- /dev/null +++ b/dots/.config/quickshell/ii/modules/common/utils/ImageDownloaderProcess.qml @@ -0,0 +1,31 @@ +import QtQuick +import Quickshell +import Quickshell.Io +import qs.modules.common +import qs.modules.common.functions + +Process { + id: root + + signal done(string path, int width, int height); + required property string filePath; + required property string sourceUrl; + property string downloadUserAgent: Config.options?.networking.userAgent ?? "" + + function processFilePath() { + return StringUtils.shellSingleQuoteEscape(FileUtils.trimFileProtocol(filePath)); + } + + running: true + command: ["bash", "-c", + `mkdir -p $(dirname '${processFilePath(filePath)}'); [ -f '${processFilePath(filePath)}' ] || curl -sSL '${sourceUrl}' -o '${processFilePath(filePath)}' && magick identify -format '%w %h' '${processFilePath(filePath)}'[0]` + ] + stdout: StdioCollector { + id: imageSizeOutputCollector + onStreamFinished: { + const output = imageSizeOutputCollector.text.trim(); + const [width, height] = output.split(" ").map(Number); + root.done(root.filePath, width, height); + } + } +} diff --git a/dots/.config/quickshell/ii/modules/ii/sidebarLeft/anime/BooruImage.qml b/dots/.config/quickshell/ii/modules/ii/sidebarLeft/anime/BooruImage.qml index 99f6f1ab3..e403417ba 100644 --- a/dots/.config/quickshell/ii/modules/ii/sidebarLeft/anime/BooruImage.qml +++ b/dots/.config/quickshell/ii/modules/ii/sidebarLeft/anime/BooruImage.qml @@ -1,7 +1,8 @@ import qs.services import qs.modules.common -import qs.modules.common.widgets import qs.modules.common.functions +import qs.modules.common.utils +import qs.modules.common.widgets import QtQml import QtQuick import QtQuick.Controls @@ -25,18 +26,19 @@ Button { property real imageRadius: Appearance.rounding.small property bool showActions: false - Process { - id: downloadProcess - running: false - command: ["bash", "-c", `mkdir -p '${root.previewDownloadPath}' && [ -f ${root.filePath} ] || curl -sSL '${root.imageData.preview_url ?? root.imageData.sample_url}' -o '${root.filePath}'`] - onExited: (exitCode, exitStatus) => { - imageObject.source = `${previewDownloadPath}/${root.fileName}` - } - } - - Component.onCompleted: { - if (root.manualDownload) { - downloadProcess.running = true + ImageDownloaderProcess { + id: imageDownloader + running: root.manualDownload + filePath: root.filePath + sourceUrl: root.imageData.preview_url ?? root.imageData.sample_url + onDone: (path, width, height) => { + imageObject.source = "" + imageObject.source = path + if (!modelData.width || !modelData.height) { + modelData.width = width + modelData.height = height + modelData.aspect_ratio = width / height + } } }