dotfiles-pub/linux/.local/bin/elixiremanager.sh

163 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
readonly prog_name="elixiremanager"
readonly prog_ver="7.0"
#defaults
readonly apiurl="https://elixi.re/api"
readonly apikey="$ELIXIRE_TOKEN"
mode=area
wayland=false
if [[ "$OSTYPE" == "darwin"* ]]; then
macos=true
else
macos=false
fi
is_admin=""
readonly filename_format="/tmp/elixire-$(date +%Y-%m-%dT%H:%M:%S).png"
readonly upload_connect_timeout="5"
readonly upload_timeout="120"
readonly upload_retries="1"
function usage() {
echo "usage: ${1} [options] [filename]"
echo "options:"
echo " -h, --help print this help and exit"
echo " -v, --version print version number and exit"
echo " --check check dependencies and exit"
echo " -a, --area select an area to upload"
echo " -f, --full upload the full screen"
echo " -k, --keep keep the file after uploading"
echo " -w, --wayland run in Wayland mode"
echo " -x, --xorg run in Xorg mode"
echo " --admin upload as an admin"
echo " --noadmin upload as a user"
}
function version() {
echo "$prog_name $prog_ver"
}
function check_deps() {
for i in date jq curl; do
(which $i &>/dev/null) && echo "OK: found $i" || echo "ERROR: $i not found"
done
if [[ ! $macos == "true" ]]; then
(which notify-send &>/dev/null) && echo "OK: found notify-send " || echo "ERROR: notify-send not found"
fi
if [[ $wayland == "true" ]]; then
for i in grim slurp; do
(which $i &>/dev/null) && echo "OK: found $i" || echo "ERROR: $i not found"
done
(which wl-copy &>/dev/null) && echo "OK: found wl-clipboard" || echo "ERROR: wl-clipboard not found"
elif [[ ! $macos == "true" ]]; then
(which escrotum &>/dev/null) && echo "OK: escrotum found (sidenote: you need it through python2, and you need to install pygtk)" || echo "ERROR: escrotum not found"
(which xclip &>/dev/null) && echo "OK: found xclip" || echo "ERROR: xclip not found"
fi
}
function take_screenshot() {
if [[ $1 == "area" ]]; then
if [[ $wayland == "true" ]]; then
grim -g "$(slurp)" "${2}"
elif [[ $macos == "true" ]]; then
screencapture -i "${2}"
else
escrotum -s "${2}"
fi
else
if [[ $wayland == "true" ]]; then
grim "${2}"
elif [[ $macos == "true" ]]; then
screencapture "${2}"
else
escrotum "${2}"
fi
fi
}
function upload_file_and_notify() {
response=$(curl --compressed --connect-timeout ${upload_connect_timeout} -m ${upload_timeout} --retry ${upload_retries} -H "Authorization: ${apikey}" -F upload=@"${1}" "${apiurl}/upload${is_admin}" | jq .url -r | tr -d '\n')
if [[ -n "${response}" ]]; then
if [[ $wayland == "true" ]]; then
echo -en "${response}" | wl-copy
elif [[ $macos == "true" ]]; then
echo -en "${response}" | pbcopy
else
echo -en "${response}" | xclip -selection clipboard
fi
if [[ $macos == "true" ]]; then
osascript -e "display notification \"${response}\" with title \"Success!\""
else
aplay "$HOME/.local/bin/assets/done.wav" &
notify-send -t 5000 "Success!" "${response}" -i "${1}" --hint=int:transient:1
fi
else
if [[ $macos == "true" ]]; then
osascript -e "display notification \"Error uploading file\" with title \"Error!\""
else
aplay "$HOME/.local/bin/assets/error.wav" &
notify-send -t 5000 "Error!" --hint=int:transient:1
fi
fi
}
while [[ $# != 0 ]]; do
case "${1}" in
--help | -h)
usage "${0}"
exit 0 ;;
--version | -v)
version "${0}"
exit 0 ;;
--check)
check_deps
exit 0 ;;
--area | -a)
mode=area
shift ;;
--full | -f)
mode=full
shift ;;
--keep | -k)
keep=true
shift ;;
--wayland | -w)
wayland=true
shift ;;
--xorg | -x)
wayland=false
shift ;;
--macos | -m)
macos=true
shift ;;
--admin)
is_admin="?admin=true"
shift ;;
--noadmin)
is_admin=""
shift ;;
*)
file_provided=true
file="${1}"
shift ;;
esac
done
if [[ -z $file ]]; then
file="${filename_format}"
fi
if [[ -z $file_provided ]]; then
take_screenshot $mode "${file}"
fi
upload_file_and_notify "${file}"
if [[ -z $file_provided && -z $keep ]]; then
rm -f "${file}"
fi