#!/usr/bin/env bash # Author: Imbus # License: 0BSD # See: https://github.com/winder/Universal-G-Code-Sender/releases # VERSION="2.1.14" VERSION=$(curl -s https://api.github.com/repos/winder/Universal-G-Code-Sender/releases/latest | jq -r '.tag_name' | sed 's/^v//') if [ -z "$VERSION" ]; then echo "Error: Failed to fetch version tag." exit 1 fi UGS_URL=https://github.com/winder/Universal-G-Code-Sender/releases/download/v${VERSION}/linux-x64-ugs-platform-app-${VERSION}.tar.gz UGS_FILE=$(basename "$UGS_URL") CURL_CMD="curl -# --fail --location --tlsv1.2 --proto =https --max-time 300" CACHE_PATH="$HOME/Downloads" set -e # Download file if missing. # Usage: get "https://example.com/file.txt" # @param string url The URL to download # @param string path [Optional] The target path without trailing slash get() { local url="$1" local filename local cdate filename=$(basename "$url") # If $2 is a valid path, prepend it to the filename # Otherwise, use the basename of the URL if [ -n "$2" ]; then filename="$2/$filename" fi # If url is empty or improperly formatted, bail out. # Yes, this regex is a mouthful, but it's better than nothing. if [[ ! "$url" =~ ^https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/.*)?$ ]]; then echo "Invalid URL: $url" return 1 # Error fi trap 'rm -f "$filename"; exit 1' EXIT SIGINT SIGTERM # Clean up file on exit if [ ! -f "$filename" ]; then echo "Downloading $filename" $CURL_CMD -# -o "$filename" "$url" || exit 1 return 0 else cdate=$(date -r "$filename" +%s) echo "Already downloaded on $(date -I -d "@$cdate"): $filename" return 0 fi } filepath="$CACHE_PATH/$UGS_FILE" # If first argument is clean, remove downloaded files and exit if [ "$1" = "clean" ]; then echo "Cleaning up..." rm -f "$filepath" rm -f ~/.local/share/icons/hicolor/scalable/apps/universal-g-code-sender.svg rm -f ~/.local/share/applications/universal-g-code-sender.desktop rm -rf ~/.local/share/ugsplatform* exit 0 fi get "$UGS_URL" "$CACHE_PATH" tar -C ~/.local/share/ -xf "$filepath" mkdir -p ~/.local/share/icons/hicolor/scalable/apps/ cp ~/.local/share/ugsplatform-linux-x64/bin/icon.svg ~/.local/share/icons/hicolor/scalable/apps/universal-g-code-sender.svg # Define the .desktop file content as a variable desktop_file_content=$( cat <~/.local/share/applications/universal-g-code-sender.desktop # Make the .desktop file executable chmod +x ~/.local/share/applications/universal-g-code-sender.desktop echo "Completed!"