booru: small refractor

This commit is contained in:
end-4 2025-05-04 00:05:04 +02:00
parent 3404eacf4b
commit dc0a15e63b
3 changed files with 35 additions and 17 deletions

View file

@ -18,6 +18,7 @@ Item {
id: root
property var panelWindow
property var inputField: tagInputField
readonly property list<var> 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 {

View file

@ -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<var> 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) {

View file

@ -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<var> tags
property var page
property list<var> images
property string message
}