forked from Shinonome/dots-hyprland
"booru": waifu.im support
This commit is contained in:
@@ -22,10 +22,10 @@ Button {
|
|||||||
Process {
|
Process {
|
||||||
id: downloadProcess
|
id: downloadProcess
|
||||||
running: false
|
running: false
|
||||||
command: ["bash", "-c", `curl '${imageData.preview_url}' -o '${previewDownloadPath}/${root.fileName}' && echo 'done'`]
|
command: ["bash", "-c", `curl '${root.imageData.preview_url ?? root.imageData.sample_url}' -o '${root.previewDownloadPath}/${root.fileName}' && echo 'done'`]
|
||||||
stdout: SplitParser {
|
stdout: SplitParser {
|
||||||
onRead: (data) => {
|
onRead: (data) => {
|
||||||
console.log("Download output:", data)
|
// console.log("Download output:", data)
|
||||||
if(data.includes("done")) {
|
if(data.includes("done")) {
|
||||||
imageObject.source = `${previewDownloadPath}/${root.fileName}`
|
imageObject.source = `${previewDownloadPath}/${root.fileName}`
|
||||||
}
|
}
|
||||||
@@ -35,6 +35,9 @@ Button {
|
|||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
if (root.manualDownload) {
|
if (root.manualDownload) {
|
||||||
|
// console.log("Manual download triggered")
|
||||||
|
// console.log("Image data:", JSON.stringify(root.imageData))
|
||||||
|
// console.log("Download command:", downloadProcess.command.join(" "))
|
||||||
downloadProcess.running = true
|
downloadProcess.running = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -207,9 +207,10 @@ Rectangle {
|
|||||||
Repeater {
|
Repeater {
|
||||||
model: modelData.images
|
model: modelData.images
|
||||||
delegate: BooruImage {
|
delegate: BooruImage {
|
||||||
|
required property var modelData
|
||||||
imageData: modelData
|
imageData: modelData
|
||||||
rowHeight: imageRow.rowHeight
|
rowHeight: imageRow.rowHeight
|
||||||
manualDownload: root.responseData.provider == "danbooru"
|
manualDownload: ["danbooru", "waifu.im"].includes(root.responseData.provider)
|
||||||
previewDownloadPath: root.previewDownloadPath
|
previewDownloadPath: root.previewDownloadPath
|
||||||
downloadPath: root.downloadPath
|
downloadPath: root.downloadPath
|
||||||
nsfwPath: root.nsfwPath
|
nsfwPath: root.nsfwPath
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
property var defaultUserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
|
property var defaultUserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
|
||||||
property var providerList: ["yandere", "konachan", "zerochan", "danbooru", "gelbooru"]
|
property var providerList: ["yandere", "konachan", "zerochan", "danbooru", "gelbooru", "waifu.im"]
|
||||||
property var providers: {
|
property var providers: {
|
||||||
"system": { "name": "System" },
|
"system": { "name": "System" },
|
||||||
"yandere": {
|
"yandere": {
|
||||||
@@ -155,7 +155,32 @@ Singleton {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"waifu.im": {
|
||||||
|
"name": "waifu.im",
|
||||||
|
"url": "https://waifu.im",
|
||||||
|
"api": "https://api.waifu.im/search",
|
||||||
|
"listAccess": ["images"],
|
||||||
|
"mapFunc": (response) => {
|
||||||
|
return response.map(item => {
|
||||||
|
return {
|
||||||
|
"id": item.image_id,
|
||||||
|
"width": item.width,
|
||||||
|
"height": item.height,
|
||||||
|
"aspect_ratio": item.width / item.height,
|
||||||
|
"tags": item.tags.map(tag => {return tag.name}).join(" "),
|
||||||
|
"rating": item.is_nsfw ? "e" : "s",
|
||||||
|
"is_nsfw": item.is_nsfw,
|
||||||
|
"md5": item.md5,
|
||||||
|
"preview_url": item.sample_url ?? item.url, // preview_url just says access denied (maybe i fucked up and sent too many requests idk)
|
||||||
|
"sample_url": item.url,
|
||||||
|
"file_url": item.url,
|
||||||
|
"file_ext": item.extension,
|
||||||
|
"source": getWorkingImageSource(item.source) ?? item.url,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
property var currentProvider: ConfigOptions.sidebar.booru.defaultProvider
|
property var currentProvider: ConfigOptions.sidebar.booru.defaultProvider
|
||||||
@@ -189,7 +214,7 @@ Singleton {
|
|||||||
var provider = providers[currentProvider]
|
var provider = providers[currentProvider]
|
||||||
var baseUrl = provider.api
|
var baseUrl = provider.api
|
||||||
var tagString = tags.join(" ")
|
var tagString = tags.join(" ")
|
||||||
if (!nsfw && currentProvider !== "zerochan") {
|
if (!nsfw && !(["zerochan", "waifu.im"].includes(currentProvider))) {
|
||||||
tagString += " rating:safe"
|
tagString += " rating:safe"
|
||||||
}
|
}
|
||||||
var params = []
|
var params = []
|
||||||
@@ -201,6 +226,14 @@ Singleton {
|
|||||||
params.push("t=" + 1)
|
params.push("t=" + 1)
|
||||||
params.push("p=" + page)
|
params.push("p=" + page)
|
||||||
}
|
}
|
||||||
|
else if (currentProvider === "waifu.im") {
|
||||||
|
var tagsArray = tagString.split(" ");
|
||||||
|
tagsArray.forEach(tag => {
|
||||||
|
params.push("included_tags=" + encodeURIComponent(tag));
|
||||||
|
});
|
||||||
|
params.push("limit=" + Math.min(limit, 30)) // Only admin can do > 30
|
||||||
|
params.push("is_nsfw=" + (nsfw ? "null" : "false")) // null is random
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
params.push("tags=" + encodeURIComponent(tagString))
|
params.push("tags=" + encodeURIComponent(tagString))
|
||||||
params.push("limit=" + limit)
|
params.push("limit=" + limit)
|
||||||
@@ -230,12 +263,14 @@ Singleton {
|
|||||||
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
|
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
|
||||||
try {
|
try {
|
||||||
// console.log("[Booru] Raw response length: " + xhr.responseText.length)
|
// console.log("[Booru] Raw response length: " + xhr.responseText.length)
|
||||||
console.log("[Booru] Raw response: " + xhr.responseText)
|
// console.log("[Booru] Raw response: " + xhr.responseText)
|
||||||
var response = JSON.parse(xhr.responseText)
|
var response = JSON.parse(xhr.responseText)
|
||||||
|
|
||||||
// Access nested properties based on listAccess
|
// Access nested properties based on listAccess
|
||||||
var accessList = providers[currentProvider].listAccess
|
var accessList = providers[currentProvider].listAccess
|
||||||
for (var i = 0; i < accessList.length; ++i) {
|
for (var i = 0; i < accessList.length; ++i) {
|
||||||
|
// console.log("[Booru] Accessing property: " + accessList[i])
|
||||||
|
// console.log("[Booru] Current response: " + JSON.stringify(response))
|
||||||
if (response && response.hasOwnProperty(accessList[i])) {
|
if (response && response.hasOwnProperty(accessList[i])) {
|
||||||
response = response[accessList[i]]
|
response = response[accessList[i]]
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user