diff --git a/.config/quickshell/modules/sidebarLeft/Anime.qml b/.config/quickshell/modules/sidebarLeft/Anime.qml index c092b5315..06fbeacbd 100644 --- a/.config/quickshell/modules/sidebarLeft/Anime.qml +++ b/.config/quickshell/modules/sidebarLeft/Anime.qml @@ -18,6 +18,7 @@ Item { id: root property var panelWindow property var inputField: tagInputField + readonly property list responses: Booru.responses property string previewDownloadPath: `${StandardPaths.standardLocations(StandardPaths.CacheLocation)[0]}/media/waifus`.replace("file://", "") property string downloadPath: (StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0] + "/homework").replace("file://", "") property string nsfwPath: (StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0] + "/homework/🌶️").replace("file://", "") @@ -59,8 +60,8 @@ Item { name: "next", description: qsTr("Get the next page of results"), execute: () => { - if (Booru.responses.length > 0) { - const lastResponse = Booru.responses[Booru.responses.length - 1]; + if (root.responses.length > 0) { + const lastResponse = root.responses[root.responses.length - 1]; root.handleInput(`${lastResponse.tags.join(" ")} ${parseInt(lastResponse.page) + 1}`); } } @@ -94,8 +95,8 @@ Item { } } else if (inputText.trim() == "+") { - if (Booru.responses.length > 0) { - const lastResponse = Booru.responses[Booru.responses.length - 1] + if (root.responses.length > 0) { + const lastResponse = root.responses[root.responses.length - 1] root.handleInput(lastResponse.tags.join(" ") + ` ${parseInt(lastResponse.page) + 1}`); } } @@ -175,12 +176,12 @@ Item { spacing: 10 model: ScriptModel { values: { - if(Booru.responses.length > booruResponseListView.lastResponseLength) { - if (booruResponseListView.lastResponseLength > 0 && Booru.responses[booruResponseListView.lastResponseLength].provider != "system") + if(root.responses.length > booruResponseListView.lastResponseLength) { + if (booruResponseListView.lastResponseLength > 0 && root.responses[booruResponseListView.lastResponseLength].provider != "system") booruResponseListView.contentY = booruResponseListView.contentY + root.scrollOnNewResponse - booruResponseListView.lastResponseLength = Booru.responses.length + booruResponseListView.lastResponseLength = root.responses.length } - return Booru.responses + return root.responses } } delegate: BooruResponse { @@ -193,7 +194,7 @@ Item { } Item { // Placeholder when list is empty - opacity: Booru.responses.length === 0 ? 1 : 0 + opacity: root.responses.length === 0 ? 1 : 0 visible: opacity > 0 anchors.fill: parent @@ -558,7 +559,9 @@ Item { id: toolTip extraVisibleCondition: false alternativeVisibleCondition: mouseArea.containsMouse // Show tooltip when hovered - content: qsTr("The current API used. Endpoint: ") + Booru.providers[Booru.currentProvider].url + qsTr("\nSet with /mode PROVIDER") + // content: qsTr("The current API used. Endpoint: ") + Booru.providers[Booru.currentProvider].url + qsTr("\nSet with /mode PROVIDER") + content: StringUtils.format(qsTr("Current API endpoint: {0}\nSet it with {1}mode PROVIDER"), + Booru.providers[Booru.currentProvider].url, root.commandPrefix) } MouseArea { diff --git a/.config/quickshell/services/Booru.qml b/.config/quickshell/services/Booru.qml index 9246d6633..c87c0f86d 100644 --- a/.config/quickshell/services/Booru.qml +++ b/.config/quickshell/services/Booru.qml @@ -9,6 +9,8 @@ import QtQuick; Singleton { id: root + property Component booruResponseDataComponent: BooruResponseData {} + signal tagSuggestion(string query, var suggestions) Connections { @@ -19,7 +21,7 @@ Singleton { } property string failMessage: qsTr("That didn't work. Tips:\n- Check your tags and NSFW settings\n- If you don't have a tag in mind, type a page number") - property var responses: [] + property list responses: [] property var getWorkingImageSource: (url) => { if (url.includes('pximg.net')) { return `https://www.pixiv.net/en/artworks/${url.substring(url.lastIndexOf('/') + 1).replace(/_p\d+\.(png|jpg|jpeg|gif)$/, '')}`; @@ -247,13 +249,13 @@ Singleton { } function addSystemMessage(message) { - responses = [...responses, { + responses = [...responses, root.booruResponseDataComponent.createObject(null, { "provider": "system", "tags": [], "page": -1, "images": [], "message": `${message}` - }] + })] } function constructRequestUrl(tags, nsfw=true, limit=20, page=1) { @@ -315,23 +317,23 @@ Singleton { var response = JSON.parse(xhr.responseText) response = providers[currentProvider].mapFunc(response) // console.log("[Booru] Mapped response: " + JSON.stringify(response)) - root.responses = [...root.responses, { + root.responses = [...root.responses, root.booruResponseDataComponent.createObject(null, { "provider": currentProvider, "tags": tags, "page": page, "images": response, "message": response.length > 0 ? "" : root.failMessage - }] + })] } catch (e) { console.log("[Booru] Failed to parse response: " + e) - root.responses = [...root.responses, { + root.responses = [...root.responses, root.responseDataComponent.createObject(null, { "provider": currentProvider, "tags": tags, "page": page, "images": [], "message": root.failMessage - }] + })] } } else if (xhr.readyState === XMLHttpRequest.DONE) { diff --git a/.config/quickshell/services/BooruResponseData.qml b/.config/quickshell/services/BooruResponseData.qml new file mode 100644 index 000000000..775da2568 --- /dev/null +++ b/.config/quickshell/services/BooruResponseData.qml @@ -0,0 +1,13 @@ +import "root:/modules/common" +import Quickshell; +import Quickshell.Io; +import Qt.labs.platform +import QtQuick; + +QtObject { + property string provider + property list tags + property var page + property list images + property string message +}