forked from Shinonome/dots-hyprland
booru: small refractor
This commit is contained in:
@@ -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,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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user