forked from Shinonome/dots-hyprland
Merge branch 'main' into hefty-hype
This commit is contained in:
@@ -16,9 +16,20 @@ Process {
|
|||||||
return StringUtils.shellSingleQuoteEscape(FileUtils.trimFileProtocol(filePath));
|
return StringUtils.shellSingleQuoteEscape(FileUtils.trimFileProtocol(filePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function processSourceUrl() {
|
||||||
|
return StringUtils.shellSingleQuoteEscape(sourceUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
function curlUserAgentArg() {
|
||||||
|
if (!downloadUserAgent) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return ` -H 'User-Agent: ${StringUtils.shellSingleQuoteEscape(downloadUserAgent)}'`;
|
||||||
|
}
|
||||||
|
|
||||||
running: true
|
running: true
|
||||||
command: ["bash", "-c",
|
command: ["bash", "-c",
|
||||||
`mkdir -p $(dirname '${processFilePath()}'); [ -f '${processFilePath()}' ] || curl -sSL '${sourceUrl}' -o '${processFilePath()}' && file '${processFilePath()}'`
|
`mkdir -p $(dirname '${processFilePath()}'); [ -f '${processFilePath()}' ] || curl -sSL '${processSourceUrl()}'${curlUserAgentArg()} -o '${processFilePath()}' && file '${processFilePath()}'`
|
||||||
]
|
]
|
||||||
stdout: StdioCollector {
|
stdout: StdioCollector {
|
||||||
id: imageSizeOutputCollector
|
id: imageSizeOutputCollector
|
||||||
|
|||||||
@@ -172,8 +172,10 @@ Button {
|
|||||||
onClicked: {
|
onClicked: {
|
||||||
root.showActions = false;
|
root.showActions = false;
|
||||||
const targetPath = root.imageData.is_nsfw ? root.nsfwPath : root.downloadPath;
|
const targetPath = root.imageData.is_nsfw ? root.nsfwPath : root.downloadPath;
|
||||||
|
const userAgent = Config.options?.networking?.userAgent ?? ""
|
||||||
|
const userAgentHeader = userAgent ? ` -H 'User-Agent: ${StringUtils.shellSingleQuoteEscape(userAgent)}'` : ""
|
||||||
Quickshell.execDetached(["bash", "-c",
|
Quickshell.execDetached(["bash", "-c",
|
||||||
`mkdir -p '${targetPath}' && curl '${root.imageData.file_url}' -o '${targetPath}/${root.fileName}' && notify-send '${Translation.tr("Download complete")}' '${root.downloadPath}/${root.fileName}' -a 'Shell'`
|
`mkdir -p '${targetPath}' && curl '${StringUtils.shellSingleQuoteEscape(root.imageData.file_url)}'${userAgentHeader} -o '${targetPath}/${root.fileName}' && notify-send '${Translation.tr("Download complete")}' '${root.downloadPath}/${root.fileName}' -a 'Shell'`
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ Rectangle {
|
|||||||
rowHeight: imageRow.rowHeight
|
rowHeight: imageRow.rowHeight
|
||||||
imageRadius: imageRow.modelData.images.length == 1 ? 50 : Appearance.rounding.normal
|
imageRadius: imageRow.modelData.images.length == 1 ? 50 : Appearance.rounding.normal
|
||||||
// Download manually to reduce redundant requests or make sure downloading works
|
// Download manually to reduce redundant requests or make sure downloading works
|
||||||
manualDownload: ["danbooru", "waifu.im", "t.alcy.cc"].includes(root.responseData.provider)
|
manualDownload: ["danbooru", "waifu.im", "t.alcy.cc", "konachan"].includes(root.responseData.provider)
|
||||||
previewDownloadPath: root.previewDownloadPath
|
previewDownloadPath: root.previewDownloadPath
|
||||||
downloadPath: root.downloadPath
|
downloadPath: root.downloadPath
|
||||||
nsfwPath: root.nsfwPath
|
nsfwPath: root.nsfwPath
|
||||||
|
|||||||
@@ -29,14 +29,15 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||||||
|
|
||||||
mkdir -p "$PICTURES_DIR/Wallpapers"
|
mkdir -p "$PICTURES_DIR/Wallpapers"
|
||||||
page=$((1 + RANDOM % 1000));
|
page=$((1 + RANDOM % 1000));
|
||||||
response=$(curl "https://konachan.net/post.json?tags=rating%3Asafe&limit=1&page=$page")
|
illogicalImpulseConfigPath="$HOME/.config/illogical-impulse/config.json"
|
||||||
|
userAgent=$(jq -r '.networking.userAgent // empty' "$illogicalImpulseConfigPath" 2>/dev/null)
|
||||||
|
response=$(curl -A "$userAgent" "https://konachan.net/post.json?tags=rating%3Asafe&limit=1&page=$page")
|
||||||
link=$(echo "$response" | jq '.[0].file_url' -r);
|
link=$(echo "$response" | jq '.[0].file_url' -r);
|
||||||
ext=$(echo "$link" | awk -F. '{print $NF}')
|
ext=$(echo "$link" | awk -F. '{print $NF}')
|
||||||
downloadPath="$PICTURES_DIR/Wallpapers/random_wallpaper.$ext"
|
downloadPath="$PICTURES_DIR/Wallpapers/random_wallpaper.$ext"
|
||||||
illogicalImpulseConfigPath="$HOME/.config/illogical-impulse/config.json"
|
currentWallpaperPath=$(jq -r '.background.wallpaperPath' "$illogicalImpulseConfigPath")
|
||||||
currentWallpaperPath=$(jq -r '.background.wallpaperPath' $illogicalImpulseConfigPath)
|
|
||||||
if [ "$downloadPath" == "$currentWallpaperPath" ]; then
|
if [ "$downloadPath" == "$currentWallpaperPath" ]; then
|
||||||
downloadPath="$PICTURES_DIR/Wallpapers/random_wallpaper-1.$ext"
|
downloadPath="$PICTURES_DIR/Wallpapers/random_wallpaper-1.$ext"
|
||||||
fi
|
fi
|
||||||
curl "$link" -o "$downloadPath"
|
curl -A "$userAgent" "$link" -o "$downloadPath"
|
||||||
"$SCRIPT_DIR/../switchwall.sh" --image "$downloadPath"
|
"$SCRIPT_DIR/../switchwall.sh" --image "$downloadPath"
|
||||||
|
|||||||
@@ -444,6 +444,30 @@ main() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# If mode_flag is dark or light, try to find a variant with that mode suffix
|
||||||
|
if [[ "$mode_flag" == "dark" || "$mode_flag" == "light" ]]; then
|
||||||
|
# Get directory, filename without extension, and extension
|
||||||
|
local imgdir="$(dirname "$imgpath")"
|
||||||
|
local imgbase="$(basename "$imgpath")"
|
||||||
|
local imgname="${imgbase%.*}"
|
||||||
|
local imgext="${imgbase##*.}"
|
||||||
|
|
||||||
|
# Strip existing -dark or -light suffix
|
||||||
|
local stripped_name="${imgname%-dark}"
|
||||||
|
stripped_name="${stripped_name%-light}"
|
||||||
|
|
||||||
|
# Construct the new path with the requested mode suffix
|
||||||
|
local new_imgpath="${imgdir}/${stripped_name}-${mode_flag}.${imgext}"
|
||||||
|
local new_stripped_imgpath="${imgdir}/${stripped_name}.${imgext}"
|
||||||
|
|
||||||
|
# If the variant exists, use it
|
||||||
|
if [[ -f "$new_imgpath" ]]; then
|
||||||
|
imgpath="$new_imgpath"
|
||||||
|
elif [[ -f "$new_stripped_imgpath" ]]; then
|
||||||
|
imgpath="$new_stripped_imgpath"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
switch "$imgpath" "$mode_flag" "$type_flag" "$color_flag" "$color"
|
switch "$imgpath" "$mode_flag" "$type_flag" "$color_flag" "$color"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -190,19 +190,19 @@ Singleton {
|
|||||||
"waifu.im": {
|
"waifu.im": {
|
||||||
"name": "waifu.im",
|
"name": "waifu.im",
|
||||||
"url": "https://waifu.im",
|
"url": "https://waifu.im",
|
||||||
"api": "https://api.waifu.im/search",
|
"api": "https://api.waifu.im/images",
|
||||||
"description": Translation.tr("Waifus only | Excellent quality, limited quantity"),
|
"description": Translation.tr("Waifus only | Excellent quality, limited quantity"),
|
||||||
"mapFunc": (response) => {
|
"mapFunc": (response) => {
|
||||||
response = response.images
|
response = response.items
|
||||||
return response.map(item => {
|
return response.map(item => {
|
||||||
return {
|
return {
|
||||||
"id": item.image_id,
|
"id": item.id,
|
||||||
"width": item.width,
|
"width": item.width,
|
||||||
"height": item.height,
|
"height": item.height,
|
||||||
"aspect_ratio": item.width / item.height,
|
"aspect_ratio": item.width / item.height,
|
||||||
"tags": item.tags.map(tag => {return tag.name}).join(" "),
|
"tags": item.tags.map(tag => {return tag.name}).join(" "),
|
||||||
"rating": item.is_nsfw ? "e" : "s",
|
"rating": item.isNsfw ? "e" : "s",
|
||||||
"is_nsfw": item.is_nsfw,
|
"is_nsfw": item.isNsfw,
|
||||||
"md5": item.md5,
|
"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)
|
"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,
|
"sample_url": item.url,
|
||||||
@@ -212,10 +212,9 @@ Singleton {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
"tagSearchTemplate": "https://api.waifu.im/tags",
|
"tagSearchTemplate": "https://api.waifu.im/tags?Name={{query}}",
|
||||||
"tagMapFunc": (response) => {
|
"tagMapFunc": (response) => {
|
||||||
return [...response.versatile.map(item => {return {"name": item}}),
|
return response.items.map(item => {return {"name": item.name}})
|
||||||
...response.nsfw.map(item => {return {"name": item}})]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"t.alcy.cc": {
|
"t.alcy.cc": {
|
||||||
@@ -276,7 +275,7 @@ Singleton {
|
|||||||
property var currentProvider: Persistent.states.booru.provider
|
property var currentProvider: Persistent.states.booru.provider
|
||||||
|
|
||||||
function getWorkingImageSource(url) {
|
function 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)$/, '')}`;
|
||||||
}
|
}
|
||||||
return url;
|
return url;
|
||||||
@@ -330,10 +329,10 @@ Singleton {
|
|||||||
else if (currentProvider === "waifu.im") {
|
else if (currentProvider === "waifu.im") {
|
||||||
var tagsArray = tagString.split(" ");
|
var tagsArray = tagString.split(" ");
|
||||||
tagsArray.forEach(tag => {
|
tagsArray.forEach(tag => {
|
||||||
params.push("included_tags=" + encodeURIComponent(tag));
|
params.push("IncludedTags=" + encodeURIComponent(tag.toLowerCase()));
|
||||||
});
|
});
|
||||||
params.push("limit=" + Math.min(limit, 30)) // Only admin can do > 30
|
params.push("PageSize=" + Math.min(limit, 30)) // Only admin can do > 30
|
||||||
params.push("is_nsfw=" + (nsfw ? "null" : "false")) // null is random
|
params.push("IsNsfw=" + (nsfw ? "All" : "False")) // null is random
|
||||||
}
|
}
|
||||||
else if (currentProvider === "t.alcy.cc") {
|
else if (currentProvider === "t.alcy.cc") {
|
||||||
url += tagString
|
url += tagString
|
||||||
@@ -406,8 +405,8 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Required for danbooru
|
// Required for danbooru and konachan
|
||||||
if (currentProvider == "danbooru") {
|
if (["danbooru", "konachan"].includes(currentProvider)) {
|
||||||
xhr.setRequestHeader("User-Agent", defaultUserAgent)
|
xhr.setRequestHeader("User-Agent", defaultUserAgent)
|
||||||
}
|
}
|
||||||
else if (currentProvider == "zerochan") {
|
else if (currentProvider == "zerochan") {
|
||||||
@@ -458,8 +457,8 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Required for danbooru
|
// Required for danbooru and konachan
|
||||||
if (currentProvider == "danbooru") {
|
if (["danbooru", "konachan"].includes(currentProvider)) {
|
||||||
xhr.setRequestHeader("User-Agent", defaultUserAgent)
|
xhr.setRequestHeader("User-Agent", defaultUserAgent)
|
||||||
}
|
}
|
||||||
xhr.send()
|
xhr.send()
|
||||||
|
|||||||
Reference in New Issue
Block a user