#!/bin/bash
#PupSnap 4.0
#Copyright 2025 GPL3
#Roger Grider (radky)

export TEXTDOMAIN=pupsnap2
export OUTPUT_CHARSET=UTF-8

APPDIR="/usr/local/PupSnap"
PREFDIR="$APPDIR/preferences"
SAVEFOLDER=`cat $PREFDIR/savefolder`
[ ! -d "$SAVEFOLDER" ] && Xdialog --title Alert --beep --msgbox "\n $(gettext 'Selected save folder not found !') \n" 0 0 && $APPDIR/PupSnap && exit 0
[[ ! $(ls $SAVEFOLDER) ]] && FILENAME=""

BEEP=`cat $PREFDIR/beep`
DATE=`cat $PREFDIR/date`
DATE_STAMP=`date +%F`
DELAY=`cat $PREFDIR/delay 2>/dev/null`
IMAGEEDITOR=`cat $PREFDIR/imageeditor`
IMAGEVIEWER=`cat $PREFDIR/imageviewer`
FILETYPE=`cat $PREFDIR/filetype | tr [:upper:] [:lower:]`
QUALITY=`cat $PREFDIR/quality`
QUALITY_NUM=`cat $PREFDIR/quality_num`
SCALE=`cat $PREFDIR/scale`
SCALE_PCT=`cat $PREFDIR/scale_pct | sed 's/%//g'`
[ "$SCALE_PCT" = "800px" ] && SCALE_PCT="800x0"

FULL=`cat $PREFDIR/full_capture`
REGION=`cat $PREFDIR/region_capture`
WINDOW=`cat $PREFDIR/window_capture`
BORDER=`cat $PREFDIR/border`

ACTION=`cat $PREFDIR/action`
CURSOR=`cat $PREFDIR/cursor`
HOST=`cat $PREFDIR/image_host`
XCLIPBOARD=`cat $PREFDIR/clipboard`

if [ "$FULL" = "false" -a "$REGION" = "false" -a "$WINDOW" = "false" ]; then #capture mode not set
	Xdialog --title Alert --beep --msgbox "\n $(gettext 'Select one of the following in PupSnap options:') \n\n $(gettext 'Fullscreen, Region or Window') \n" 0 0 && $APPDIR/PupSnap && exit 0
fi

[ "$CURSOR" = "$(gettext 'Enable')" ] && POINTER="--pointer" || POINTER=""
[ "$DELAY" = "0" ] && DELAY="1" #assure baseline delay so user has time to move cursor from ROI
[ "$CURSOR" = "$(gettext 'Enable')" -a "$DELAY" = "0" ] && DELAY="1"

if [ "$QUALITY" != "true" ]; then #Quality checkbox not enabled, so use recommended values for JPG and WEBP quality
	if [ "$FILETYPE" = "jpg" ]; then
		QUALITY_NUM="85"
	elif [ "$FILETYPE" = "webp" ]; then
		QUALITY_NUM="75"
	fi
fi

if [ "$SCALE" = "true" ]; then #enable scaled screen capture
	THUMBNAIL="true"
else
	THUMBNAIL="false"
	SCALE_PCT=""
fi

if [ "$DATE" = "true" ]; then #enable dated filename, else use default nomenclature with sequential enumeration
	FILENAME="$(gettext 'Screenshot')_$DATE_STAMP-(1)"
	num=1
	while [ -f "$SAVEFOLDER$FILENAME.$FILETYPE" ]
	do
	FILENAME="$(echo $(gettext 'Screenshot')_$DATE_STAMP-"($num)")"
	let num=num+1
	done
else
	FILENAME=`cat $PREFDIR/filename`
	FILENAME=$(echo "$FILENAME" | sed -e 's% %_%g' -e 's%[/\\"*|<>:?]%_%g')
	[ ! "$FILENAME" ] && FILENAME="$(gettext 'Screenshot')"
	TEMPNAME=$(echo "$FILENAME" | rev | cut -f2- -d '-' | rev)
	[ "$TEMPNAME" = "$(gettext 'Screenshot')" ] && FILENAME="$TEMPNAME-1" || FILENAME="$TEMPNAME"
	num=1
	while [ -f "$SAVEFOLDER$FILENAME.$FILETYPE" ]
	do
	FILENAME="$(echo "$TEMPNAME-$num")"
	let num=num+1
	done
fi
echo "$FILENAME" > $PREFDIR/filename

if [ "$ACTION" = "$(gettext 'Viewer')" ]; then #call image viewer
	VIEW="true" EDIT="false"
elif [ "$ACTION" = "$(gettext 'Editor')" ]; then #call image editor
	VIEW="false" EDIT="true"
else
	VIEW="false" EDIT="false"
fi

if [ "$VIEW" = "true" ]; then #define auto-close of image viewer
	DEFAULT_VIEWER=`cat /usr/local/bin/defaultimageviewer | grep -a exec | cut -d " " -f2`
	if [ "`which $DEFAULT_VIEWER 2>/dev/null`" ]; then
		killall $DEFAULT_VIEWER 2>/dev/null &
	else
		killall $IMAGEVIEWER 2>/dev/null &
	fi
fi

[ "$BEEP" = "true" ] && BEEP="$APPDIR/beep" || BEEP=""

[ "$HOST" = "true" ] && echo "$SAVEFOLDER$FILENAME.$FILETYPE" > $APPDIR/imgur-file

cd /tmp/

case "$1" in

-screen_capture)
if	[ "$FULL" = "true" ] && [ "$VIEW" = "true" ]; then #full-screen capture (call imageviewer)
	[ "$THUMBNAIL" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEVIEWER "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEVIEWER "$SAVEFOLDER$FILENAME.$FILETYPE"
elif
	[ "$FULL" = "true" ] && [ "$EDIT" = "true" ]; then #full-screen capture (call imageeditor)
	[ "$THUMBNAIL" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEEDITOR "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEEDITOR "$SAVEFOLDER$FILENAME.$FILETYPE"
elif
	[ "$FULL" = "true" ] && [ "$VIEW" = "false" ] && [ "$EDIT" = "false" ]; then #full-screen capture only
	[ "$THUMBNAIL" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE"
elif
	[ "$REGION" = "true" ] && [ "$VIEW" = "true" ]; then #region capture (call imageviewer)
	[ "$THUMBNAIL" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s -l mode=edge && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEVIEWER "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s -l mode=edge && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEVIEWER "$SAVEFOLDER$FILENAME.$FILETYPE"
elif
	[ "$REGION" = "true" ] && [ "$EDIT" = "true" ]; then #region capture (call imageeditor)
	[ "$THUMBNAIL" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s -l mode=edge && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEEDITOR "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s -l mode=edge && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEEDITOR "$SAVEFOLDER$FILENAME.$FILETYPE"
elif
	[ "$REGION" = "true" ] && [ "$VIEW" = "false" ] && [ "$EDIT" = "false" ]; then #region capture only
	[ "$THUMBNAIL" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s -l mode=edge && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s -l mode=edge && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE"
elif
	[ "$WINDOW" = "true" ] && [ "$VIEW" = "true" ]; then #window capture (call imageviewer)
	[ "$THUMBNAIL" = "true" ] && [ "$BORDER" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s -b && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEVIEWER "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "true" ] && [ "$BORDER" = "false" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEVIEWER "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && [ "$BORDER" = "true" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s -b && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEVIEWER "$SAVEFOLDER$FILENAME.$FILETYPE"
	[ "$THUMBNAIL" = "false" ] && [ "$BORDER" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEVIEWER "$SAVEFOLDER$FILENAME.$FILETYPE"
elif
	[ "$WINDOW" = "true" ] && [ "$EDIT" = "true" ]; then #window capture (call imageeditor)
	[ "$THUMBNAIL" = "true" ] && [ "$BORDER" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s -b && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEEDITOR "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "true" ] && [ "$BORDER" = "false" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEEDITOR "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && [ "$BORDER" = "true" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s -b && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEEDITOR "$SAVEFOLDER$FILENAME.$FILETYPE"
	[ "$THUMBNAIL" = "false" ] && [ "$BORDER" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && sleep 3 && $IMAGEEDITOR "$SAVEFOLDER$FILENAME.$FILETYPE"
elif
	[ "$WINDOW" = "true" ] && [ "$VIEW" = "false" ] && [ "$EDIT" = "false" ]; then #window capture only
	[ "$THUMBNAIL" = "true" ] && [ "$BORDER" = "true" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s -b && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "true" ] && [ "$BORDER" = "false" ] && scrot $POINTER -d $DELAY -t $SCALE_PCT $FILENAME.$FILETYPE -s && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME*-thumb.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE" && rm /tmp/$FILENAME.$FILETYPE
	[ "$THUMBNAIL" = "false" ] && [ "$BORDER" = "true" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s -b && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE"
	[ "$THUMBNAIL" = "false" ] && [ "$BORDER" = "false" ] && scrot $POINTER -d $DELAY -q $QUALITY_NUM $FILENAME.$FILETYPE -s && $BEEP && $APPDIR/PupSnap && mv -f /tmp/$FILENAME.$FILETYPE "$SAVEFOLDER$FILENAME.$FILETYPE"
fi

if [ "$XCLIPBOARD" = "true" ] && [ -f "$SAVEFOLDER$FILENAME.$FILETYPE" ]; then #send captured image to Xclipboard
	TYPE="image/$FILETYPE"
	xclip -selection clipboard -target "$TYPE" -i "$SAVEFOLDER$FILENAME.$FILETYPE"
fi
;;

esac
