mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-05 14:59:27 -05:00
82 lines
3.5 KiB
QML
82 lines
3.5 KiB
QML
pragma ComponentBehavior: Bound
|
|
pragma Singleton
|
|
import qs.modules.common
|
|
import qs.modules.common.utils
|
|
import qs.modules.common.functions
|
|
import qs.modules.common.widgets
|
|
import qs.services
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import Qt.labs.synchronizer
|
|
import Quickshell
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
enum Action {
|
|
Copy,
|
|
Edit,
|
|
Search,
|
|
CharRecognition,
|
|
Record,
|
|
RecordWithSound
|
|
}
|
|
|
|
property string imageSearchEngineBaseUrl: Config.options.search.imageSearch.imageSearchEngineBaseUrl
|
|
property string fileUploadApiEndpoint: "https://uguu.se/upload"
|
|
|
|
function getCommand(x, y, width, height, screenshotPath, action, saveDir = "") {
|
|
// Set command for action
|
|
const rx = Math.round(x);
|
|
const ry = Math.round(y);
|
|
const rw = Math.round(width);
|
|
const rh = Math.round(height);
|
|
const cropBase = `magick ${StringUtils.shellSingleQuoteEscape(screenshotPath)} `
|
|
+ `-crop ${rw}x${rh}+${rx}+${ry}`
|
|
const cropToStdout = `${cropBase} -`
|
|
const cropInPlace = `${cropBase} '${StringUtils.shellSingleQuoteEscape(screenshotPath)}'`
|
|
const cleanup = `rm '${StringUtils.shellSingleQuoteEscape(screenshotPath)}'`
|
|
const slurpRegion = `${rx},${ry} ${rw}x${rh}`
|
|
const uploadAndGetUrl = (filePath) => {
|
|
return `curl -sF files[]=@'${StringUtils.shellSingleQuoteEscape(filePath)}' ${root.fileUploadApiEndpoint} | jq -r '.files[0].url'`
|
|
}
|
|
const annotationCommand = `${Config.options.regionSelector.annotation.useSatty ? "satty" : "swappy"} -f -`;
|
|
switch (action) {
|
|
case ScreenshotAction.Action.Copy:
|
|
if (saveDir === "") {
|
|
// not saving the screenshot, just copy to clipboard
|
|
return ["bash", "-c", `${cropToStdout} | wl-copy && ${cleanup}`]
|
|
break;
|
|
}
|
|
return [
|
|
"bash", "-c",
|
|
`mkdir -p '${StringUtils.shellSingleQuoteEscape(saveDir)}' && \
|
|
saveFileName="screenshot-$(date '+%Y-%m-%d_%H.%M.%S').png" && \
|
|
savePath="${saveDir}/$saveFileName" && \
|
|
${cropToStdout} | tee >(wl-copy) > "$savePath" && \
|
|
${cleanup}`
|
|
]
|
|
|
|
break;
|
|
case ScreenshotAction.Action.Edit:
|
|
return ["bash", "-c", `${cropToStdout} | ${annotationCommand} && ${cleanup}`]
|
|
break;
|
|
case ScreenshotAction.Action.Search:
|
|
return ["bash", "-c", `${cropInPlace} && xdg-open "${root.imageSearchEngineBaseUrl}$(${uploadAndGetUrl(screenshotPath)})" && ${cleanup}`]
|
|
break;
|
|
case ScreenshotAction.Action.CharRecognition:
|
|
return ["bash", "-c", `${cropInPlace} && tesseract '${StringUtils.shellSingleQuoteEscape(screenshotPath)}' stdout -l $(tesseract --list-langs | awk 'NR>1{print $1}' | tr '\\n' '+' | sed 's/\\+$/\\n/') | wl-copy && ${cleanup}`]
|
|
break;
|
|
case ScreenshotAction.Action.Record:
|
|
return ["bash", "-c", `${Directories.recordScriptPath} --region '${slurpRegion}'`]
|
|
break;
|
|
case ScreenshotAction.Action.RecordWithSound:
|
|
return ["bash", "-c", `${Directories.recordScriptPath} --region '${slurpRegion}' --sound`]
|
|
break;
|
|
default:
|
|
console.warn("[Region Selector] Unknown snip action, skipping snip.");
|
|
return;
|
|
}
|
|
}
|
|
}
|