remake the whole thing. still not finished
This commit is contained in:
parent
12741ce4ba
commit
78c532808e
8 changed files with 611 additions and 160 deletions
344
main.sh
Executable file
344
main.sh
Executable file
|
@ -0,0 +1,344 @@
|
|||
#!/bin/bash
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
source "$SCRIPT_DIR/helpers/variables.sh"
|
||||
source "$SCRIPT_DIR/helpers/installer.sh"
|
||||
source "$SCRIPT_DIR/helpers/config.sh"
|
||||
|
||||
validate_config
|
||||
|
||||
if [[ "$NEEDS_SETUP" -eq 1 ]]; then setup_config; fi
|
||||
if [[ $(get_value "SHOW_CAPTURE_PREVIEW") == "true" ]]; then setup_venv; fi
|
||||
|
||||
arguments=()
|
||||
while [[ $# -gt 0 ]]; do
|
||||
arg="$1"
|
||||
case "$arg" in
|
||||
--help)
|
||||
echo "Usage: $0 [options]"
|
||||
echo "--help Show this help message"
|
||||
echo "--version Show version information"
|
||||
echo "--config Allows you to set up the config file"
|
||||
echo "-c Copies the screenshot to clipboard"
|
||||
echo "-u Uploads the screenshot"
|
||||
echo "-f <file> Uploads the given file instead of taking a screenshot"
|
||||
echo "-d Debug mode"
|
||||
echo "--silent Suppresses Image preview and notifications"
|
||||
echo
|
||||
echo "Domain Specific Options:"
|
||||
for service in "${valid_services[@]}"; do
|
||||
echo "--$service"
|
||||
done
|
||||
exit 0
|
||||
;;
|
||||
--version)
|
||||
echo "Version: $VERSION"
|
||||
exit 0
|
||||
;;
|
||||
--config)
|
||||
setup_config
|
||||
exit 0
|
||||
;;
|
||||
-c)
|
||||
arguments+=("-c")
|
||||
shift
|
||||
;;
|
||||
-u)
|
||||
arguments+=("-u")
|
||||
shift
|
||||
;;
|
||||
-f)
|
||||
shift
|
||||
if [[ -n "$1" && "$1" != -* ]]; then
|
||||
arguments+=("-f" "$1")
|
||||
shift
|
||||
else
|
||||
echo -e "${RED}Error: No valid file specified for -f option.${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
-d)
|
||||
DEBUG=true
|
||||
shift
|
||||
;;
|
||||
--silent)
|
||||
SHOW_NOTIFICATIONS=false
|
||||
SHOW_CAPTURE_PREVIEW=false
|
||||
shift
|
||||
;;
|
||||
--*)
|
||||
service="${arg:2}"
|
||||
if [[ " ${valid_services[*]} " =~ " ${service} " ]]; then
|
||||
SHOULD_UPLOAD=true
|
||||
SHOULD_COPY=false
|
||||
SERVICE="${service}"
|
||||
shift
|
||||
else
|
||||
echo -e "${RED}Error: Invalid service: $service${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}Error: Invalid argument: $arg${RESET}"
|
||||
echo "Use --help for usage information."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
REQUIRED_COMMANDS=("notify-send" "curl" "jq")
|
||||
|
||||
SHOULD_UPLOAD=$(get_value "DEFAULT_OPTION")
|
||||
[[ "$SHOULD_UPLOAD" == "upload" ]] && SHOULD_UPLOAD=true || SHOULD_UPLOAD=false
|
||||
|
||||
SHOW_NOTIFICATIONS=$(get_value "SHOW_NOTIFICATIONS")
|
||||
[[ "$SHOW_NOTIFICATIONS" == "true" ]] && SHOW_NOTIFICATIONS=true || SHOW_NOTIFICATIONS=false
|
||||
|
||||
SHOW_CAPTURE_PREVIEW=$(get_value "SHOW_CAPTURE_PREVIEW")
|
||||
[[ "$SHOW_CAPTURE_PREVIEW" == "true" ]] && SHOW_CAPTURE_PREVIEW=true || SHOW_CAPTURE_PREVIEW=false
|
||||
|
||||
if [[ -n "$WAYLAND_DISPLAY" ]]; then
|
||||
SCREENSHOT_CMD=("grim" "-g")
|
||||
SELECT_REGION="slurp"
|
||||
REQUIRED_COMMANDS+=("wl-copy" "grim" "slurp")
|
||||
elif [[ -n "$DISPLAY" ]]; then
|
||||
SCREENSHOT_CMD=("flameshot" "gui" "-p")
|
||||
REQUIRED_COMMANDS+=("xclip" "flameshot")
|
||||
else
|
||||
echo "Error: Unable to detect display server (Wayland/X11)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MISSING_COMMANDS=()
|
||||
for cmd in "${REQUIRED_COMMANDS[@]}"; do
|
||||
command -v "$cmd" &>/dev/null || MISSING_COMMANDS+=("$cmd")
|
||||
done
|
||||
|
||||
# Check for xdg-utils for xdg-open
|
||||
if ! command -v xdg-open &>/dev/null; then
|
||||
MISSING_COMMANDS+=("xdg-utils")
|
||||
fi
|
||||
|
||||
if [[ ${#MISSING_COMMANDS[@]} -gt 0 ]]; then
|
||||
echo -e "${RED}Error: The following commands are not installed: ${MISSING_COMMANDS[*]}${RESET}"
|
||||
echo -e "${RED}Please install them"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
send_notification() {
|
||||
[[ "$SHOW_NOTIFICATIONS" == "false" ]] && return
|
||||
|
||||
local title="$1"
|
||||
local message="$2"
|
||||
local image="$3"
|
||||
|
||||
if [[ -z "$title" && -z "$message" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
local notify_cmd=("notify-send")
|
||||
|
||||
[[ -n "$image" ]] && notify_cmd+=("-i" "$image")
|
||||
[[ -n "$title" ]] && notify_cmd+=("$title")
|
||||
[[ -n "$message" ]] && notify_cmd+=("$message")
|
||||
|
||||
"${notify_cmd[@]}"
|
||||
}
|
||||
|
||||
SHOULD_UPLOAD=false
|
||||
SHOULD_SAVE="$(get_value "SAVE_IMAGES")"
|
||||
SHOULD_COPY=false
|
||||
|
||||
case "$(get_value "DEFAULT_OPTION")" in
|
||||
upload) SHOULD_UPLOAD=true ;;
|
||||
copy) SHOULD_COPY=true ;;
|
||||
esac
|
||||
|
||||
for arg in "${arguments[@]}"; do
|
||||
case "$arg" in
|
||||
-c)
|
||||
SHOULD_UPLOAD=false
|
||||
SHOULD_COPY=true
|
||||
;;
|
||||
-u|-f)
|
||||
SHOULD_UPLOAD=true
|
||||
SHOULD_COPY=false
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
CURRENT_DATE=$(date +%Y-%m-%d-%H-%M-%S)
|
||||
RANDOM_FILE_NAME="${CURRENT_DATE}_$(date +%s%N | cut -b1-13)"
|
||||
|
||||
if [[ "$SHOULD_COPY" == "true" ]]; then
|
||||
if [[ "$SHOULD_SAVE" == "true" ]]; then
|
||||
SAVE_DIR=$(get_value "SAVE_DIR")
|
||||
if [[ ! -d "$SAVE_DIR" ]]; then
|
||||
mkdir -p "$SAVE_DIR"
|
||||
fi
|
||||
FILE="$SAVE_DIR/$CURRENT_DATE.png"
|
||||
else
|
||||
FILE="/tmp/$RANDOM_FILE_NAME.png"
|
||||
fi
|
||||
|
||||
if [[ -n "$WAYLAND_DISPLAY" ]]; then
|
||||
"${SCREENSHOT_CMD[@]}" "$("$SELECT_REGION")" "$FILE"
|
||||
else
|
||||
"${SCREENSHOT_CMD[@]}" "$FILE"
|
||||
fi
|
||||
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Error: Screenshot capture failed." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$FILE" ]]; then
|
||||
echo "Error: File not found: $FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$WAYLAND_DISPLAY" ]]; then
|
||||
echo "Using wl-copy for clipboard."
|
||||
cat "$FILE" | wl-copy
|
||||
elif [[ -n "$DISPLAY" ]]; then
|
||||
echo "Using xclip for clipboard."
|
||||
xclip -selection clipboard -t image/png -i "$FILE"
|
||||
else
|
||||
echo "Error: Unable to detect display server (Wayland/X11)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$SHOW_CAPTURE_PREVIEW" == "true" ]]; then
|
||||
"$PYTHON_EXEC" "$SCRIPT_DIR/helpers/show_image.py" "$FILE" "Copied to your clipboard"
|
||||
fi
|
||||
|
||||
if [[ "$SHOULD_SAVE" != "true" ]]; then
|
||||
[[ -n "$FILE" ]] && rm -f "$FILE"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ -z "$SERVICE" ]]; then
|
||||
SERVICE=$(get_value "SERVICE")
|
||||
if [[ -z "$SERVICE" ]]; then
|
||||
echo -e "${RED}Error: No service specified and no default service set.${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$SERVICE" == "zipline" ]]; then
|
||||
DOMAIN=$(get_value "DOMAIN")
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
echo -e "${RED}Error: Domain not set for zipline.${RESET}"
|
||||
setup_domain
|
||||
fi
|
||||
else
|
||||
DOMAIN="${UPLOADERS[$SERVICE]}"
|
||||
fi
|
||||
|
||||
AUTH=$(get_value "${SERVICE}_auth")
|
||||
if [[ -z "$AUTH" ]]; then
|
||||
echo -e "${RED}Error: Auth not set for $SERVICE.${RESET}"
|
||||
setup_domain
|
||||
|
||||
AUTH=$(get_value "${SERVICE}_auth")
|
||||
if [[ -z "$AUTH" ]]; then
|
||||
echo -e "${RED}Error: No auth key provided for $SERVICE.${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
USER_FILE=""
|
||||
if [[ "$SHOULD_UPLOAD" == "true" ]]; then
|
||||
for ((i = 0; i < ${#arguments[@]}; i++)); do
|
||||
if [[ "${arguments[i]}" == "-f" ]]; then
|
||||
USER_FILE="${arguments[i+1]}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -z "$USER_FILE" ]]; then
|
||||
if [[ "$SHOULD_SAVE" == "true" ]]; then
|
||||
SAVE_DIR=$(get_value "SAVE_DIR")
|
||||
if [[ ! -d "$SAVE_DIR" ]]; then
|
||||
mkdir -p "$SAVE_DIR"
|
||||
fi
|
||||
FILE="$SAVE_DIR/$CURRENT_DATE.png"
|
||||
else
|
||||
FILE="/tmp/$RANDOM_FILE_NAME.png"
|
||||
fi
|
||||
|
||||
if [[ -n "$WAYLAND_DISPLAY" ]]; then
|
||||
"${SCREENSHOT_CMD[@]}" "$("$SELECT_REGION")" "$FILE"
|
||||
else
|
||||
"${SCREENSHOT_CMD[@]}" "$FILE"
|
||||
fi
|
||||
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Error: Screenshot capture failed." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$FILE" ]]; then
|
||||
echo "Error: File not found: $FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$SHOULD_SAVE" != "true" ]]; then
|
||||
[[ -n "$FILE" ]] && rm -f "$FILE"
|
||||
fi
|
||||
else
|
||||
FILE="$USER_FILE"
|
||||
fi
|
||||
|
||||
if [[ ! -f "$FILE" ]]; then
|
||||
echo "Error: File not found: $FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FILE_URL=""
|
||||
|
||||
REPONSE=$(curl -s -X POST \
|
||||
-F "file=@$FILE" \
|
||||
-H "${UPLOAD_HEADERS[$SERVICE]}: $AUTH" \
|
||||
"$DOMAIN")
|
||||
|
||||
if ! echo "$REPONSE" | jq . &>/dev/null; then
|
||||
echo -e "${RED}Error: Invalid response from server.${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
FILE_URL=$(echo "$REPONSE" | jq -r ".${UPLOAD_JSON_KEYS[$SERVICE]}")
|
||||
|
||||
if [[ "$FILE_URL" == "null" ]]; then
|
||||
echo -e "${RED}Error: File URL not found in response.${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MIME_TYPE=$(file --mime-type -b "$FILE")
|
||||
if [[ "$MIME_TYPE" == image/* ]]; then
|
||||
if [[ "$SHOW_NOTIFICATIONS" == "true" ]]; then
|
||||
send_notification "Uploaded to $SERVICE" "$FILE_URL" "$FILE"
|
||||
fi
|
||||
|
||||
if [[ "$SHOW_CAPTURE_PREVIEW" == "true" ]]; then
|
||||
"$PYTHON_EXEC" "$SCRIPT_DIR/helpers/show_image.py" "$FILE" "Uploaded to $SERVICE"
|
||||
fi
|
||||
else
|
||||
if [[ "$SHOW_NOTIFICATIONS" == "true" ]]; then
|
||||
send_notification "Uploaded to $SERVICE" "$FILE_URL"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "$WAYLAND_DISPLAY" ]]; then
|
||||
echo "Using wl-copy for clipboard."
|
||||
echo "$FILE_URL" | wl-copy
|
||||
elif [[ -n "$DISPLAY" ]]; then
|
||||
echo "Using xclip for clipboard."
|
||||
echo "$FILE_URL" | xclip -selection clipboard
|
||||
else
|
||||
echo "Error: Unable to detect display server (Wayland/X11)."
|
||||
exit 1
|
||||
fi
|
Loading…
Add table
Add a link
Reference in a new issue