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
@@ -18,6 +18,7 @@ Item {
id: root id: root
property var panelWindow property var panelWindow
property var inputField: tagInputField 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 previewDownloadPath: `${StandardPaths.standardLocations(StandardPaths.CacheLocation)[0]}/media/waifus`.replace("file://", "")
property string downloadPath: (StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0] + "/homework").replace("file://", "") property string downloadPath: (StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0] + "/homework").replace("file://", "")
property string nsfwPath: (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", name: "next",
description: qsTr("Get the next page of results"), description: qsTr("Get the next page of results"),
execute: () => { execute: () => {
if (Booru.responses.length > 0) { if (root.responses.length > 0) {
const lastResponse = Booru.responses[Booru.responses.length - 1]; const lastResponse = root.responses[root.responses.length - 1];
root.handleInput(`${lastResponse.tags.join(" ")} ${parseInt(lastResponse.page) + 1}`); root.handleInput(`${lastResponse.tags.join(" ")} ${parseInt(lastResponse.page) + 1}`);
} }
} }
@@ -94,8 +95,8 @@ Item {
} }
} }
else if (inputText.trim() == "+") { else if (inputText.trim() == "+") {
if (Booru.responses.length > 0) { if (root.responses.length > 0) {
const lastResponse = Booru.responses[Booru.responses.length - 1] const lastResponse = root.responses[root.responses.length - 1]
root.handleInput(lastResponse.tags.join(" ") + ` ${parseInt(lastResponse.page) + 1}`); root.handleInput(lastResponse.tags.join(" ") + ` ${parseInt(lastResponse.page) + 1}`);
} }
} }
@@ -175,12 +176,12 @@ Item {
spacing: 10 spacing: 10
model: ScriptModel { model: ScriptModel {
values: { values: {
if(Booru.responses.length > booruResponseListView.lastResponseLength) { if(root.responses.length > booruResponseListView.lastResponseLength) {
if (booruResponseListView.lastResponseLength > 0 && Booru.responses[booruResponseListView.lastResponseLength].provider != "system") if (booruResponseListView.lastResponseLength > 0 && root.responses[booruResponseListView.lastResponseLength].provider != "system")
booruResponseListView.contentY = booruResponseListView.contentY + root.scrollOnNewResponse booruResponseListView.contentY = booruResponseListView.contentY + root.scrollOnNewResponse
booruResponseListView.lastResponseLength = Booru.responses.length booruResponseListView.lastResponseLength = root.responses.length
} }
return Booru.responses return root.responses
} }
} }
delegate: BooruResponse { delegate: BooruResponse {
@@ -193,7 +194,7 @@ Item {
} }
Item { // Placeholder when list is empty Item { // Placeholder when list is empty
opacity: Booru.responses.length === 0 ? 1 : 0 opacity: root.responses.length === 0 ? 1 : 0
visible: opacity > 0 visible: opacity > 0
anchors.fill: parent anchors.fill: parent
@@ -558,7 +559,9 @@ Item {
id: toolTip id: toolTip
extraVisibleCondition: false extraVisibleCondition: false
alternativeVisibleCondition: mouseArea.containsMouse // Show tooltip when hovered 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 { MouseArea {
+9 -7
View File
@@ -9,6 +9,8 @@ import QtQuick;
Singleton { Singleton {
id: root id: root
property Component booruResponseDataComponent: BooruResponseData {}
signal tagSuggestion(string query, var suggestions) signal tagSuggestion(string query, var suggestions)
Connections { 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 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) => { property var getWorkingImageSource: (url) => {
if (url.includes('pximg.net')) { if (url.includes('pximg.net')) {
return `https://www.pixiv.net/en/artworks/${url.substring(url.lastIndexOf('/') + 1).replace(/_p\d+\.(png|jpg|jpeg|gif)$/, '')}`; 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) { function addSystemMessage(message) {
responses = [...responses, { responses = [...responses, root.booruResponseDataComponent.createObject(null, {
"provider": "system", "provider": "system",
"tags": [], "tags": [],
"page": -1, "page": -1,
"images": [], "images": [],
"message": `${message}` "message": `${message}`
}] })]
} }
function constructRequestUrl(tags, nsfw=true, limit=20, page=1) { function constructRequestUrl(tags, nsfw=true, limit=20, page=1) {
@@ -315,23 +317,23 @@ Singleton {
var response = JSON.parse(xhr.responseText) var response = JSON.parse(xhr.responseText)
response = providers[currentProvider].mapFunc(response) response = providers[currentProvider].mapFunc(response)
// console.log("[Booru] Mapped response: " + JSON.stringify(response)) // console.log("[Booru] Mapped response: " + JSON.stringify(response))
root.responses = [...root.responses, { root.responses = [...root.responses, root.booruResponseDataComponent.createObject(null, {
"provider": currentProvider, "provider": currentProvider,
"tags": tags, "tags": tags,
"page": page, "page": page,
"images": response, "images": response,
"message": response.length > 0 ? "" : root.failMessage "message": response.length > 0 ? "" : root.failMessage
}] })]
} catch (e) { } catch (e) {
console.log("[Booru] Failed to parse response: " + e) console.log("[Booru] Failed to parse response: " + e)
root.responses = [...root.responses, { root.responses = [...root.responses, root.responseDataComponent.createObject(null, {
"provider": currentProvider, "provider": currentProvider,
"tags": tags, "tags": tags,
"page": page, "page": page,
"images": [], "images": [],
"message": root.failMessage "message": root.failMessage
}] })]
} }
} }
else if (xhr.readyState === XMLHttpRequest.DONE) { else if (xhr.readyState === XMLHttpRequest.DONE) {
@@ -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
}