Save paths for screen recording and screenshots (#2354)

This commit is contained in:
end-4
2025-11-06 21:56:13 +01:00
committed by GitHub
4 changed files with 70 additions and 8 deletions
@@ -475,6 +475,14 @@ Singleton {
}
}
property JsonObject screenRecord: JsonObject {
property string savePath: Directories.videos.replace("file://","") // strip "file://"
}
property JsonObject screenSnip: JsonObject {
property string savePath: "" // only copy to clipboard when empty
}
property JsonObject sounds: JsonObject {
property bool battery: false
property bool pomodoro: false
@@ -33,6 +33,10 @@ PanelWindow {
property var selectionMode: RegionSelection.SelectionMode.RectCorners
signal dismiss()
property string saveScreenshotDir: Config.options.screenSnip.savePath !== ""
? Config.options.screenSnip.savePath
: ""
property string screenshotDir: Directories.screenshotTemp
property string imageSearchEngineBaseUrl: Config.options.search.imageSearch.imageSearchEngineBaseUrl
property string fileUploadApiEndpoint: "https://uguu.se/upload"
@@ -259,7 +263,23 @@ PanelWindow {
}
switch (root.action) {
case RegionSelection.SnipAction.Copy:
snipProc.command = ["bash", "-c", `${cropToStdout} | wl-copy && ${cleanup}`]
if (saveScreenshotDir === "") {
// not saving the screenshot, just copy to clipboard
snipProc.command = ["bash", "-c", `${cropToStdout} | wl-copy && ${cleanup}`]
break;
}
const savePathBase = root.saveScreenshotDir
snipProc.command = [
"bash", "-c",
`mkdir -p '${StringUtils.shellSingleQuoteEscape(savePathBase)}' && \
saveFileName="screenshot-$(date '+%Y-%m-%d_%H.%M.%S').png" && \
savePath="${savePathBase}/$saveFileName" && \
${cropToStdout} | tee >(wl-copy) > "$savePath" && \
${cleanup}`
]
break;
case RegionSelection.SnipAction.Edit:
snipProc.command = ["bash", "-c", `${cropToStdout} | swappy -f - && ${cleanup}`]
@@ -85,6 +85,31 @@ ContentPage {
}
ContentSection {
icon: "file_open"
title: Translation.tr("Save paths")
MaterialTextArea {
Layout.fillWidth: true
placeholderText: Translation.tr("Video Recording Path")
text: Config.options.screenRecord.savePath
wrapMode: TextEdit.Wrap
onTextChanged: {
Config.options.screenRecord.savePath = text;
}
}
MaterialTextArea {
Layout.fillWidth: true
placeholderText: Translation.tr("Screenshot Path (leave empty to just copy)")
text: Config.options.screenSnip.savePath
wrapMode: TextEdit.Wrap
onTextChanged: {
Config.options.screenSnip.savePath = text;
}
}
}
ContentSection {
icon: "search"
title: Translation.tr("Search")
@@ -1,5 +1,18 @@
#!/usr/bin/env bash
CONFIG_FILE="$HOME/.config/illogical-impulse/config.json"
JSON_PATH=".screenRecord.savePath"
CUSTOM_PATH=$(jq -r "$JSON_PATH" "$CONFIG_FILE" 2>/dev/null)
RECORDING_DIR=""
if [[ -n "$CUSTOM_PATH" ]]; then
RECORDING_DIR="$CUSTOM_PATH"
else
RECORDING_DIR="$HOME/Videos" # Use default path
fi
getdate() {
date '+%Y-%m-%d_%H.%M.%S'
}
@@ -10,12 +23,8 @@ getactivemonitor() {
hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name'
}
xdgvideo="$(xdg-user-dir VIDEOS)"
if [[ $xdgvideo = "$HOME" ]]; then
unset xdgvideo
fi
mkdir -p "${xdgvideo:-$HOME/Videos}"
cd "${xdgvideo:-$HOME/Videos}" || exit
mkdir -p "$RECORDING_DIR"
cd "$RECORDING_DIR" || exit
# parse --region <value> without modifying $@ so other flags like --fullscreen still work
ARGS=("$@")
@@ -66,4 +75,4 @@ else
wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$region"
fi
fi
fi
fi