diff --git a/uploader.sh b/uploader.sh index f6f1324..e82a3df 100755 --- a/uploader.sh +++ b/uploader.sh @@ -19,6 +19,7 @@ show_notification() { # ========================================== API_URL="http://localhost:1337/api/v2/upload" API_KEY="" + # ========================================== FILE="$1" @@ -42,6 +43,33 @@ fi MIME_TYPE=$(file --mime-type -b "$FILE") BASENAME=$(basename "$FILE") +# Get file size locally +FILE_SIZE_BYTES=$(stat -c%s "$FILE" 2>/dev/null || echo "0") + +human_readable_size() { + local size=$1 + local units=('B' 'KB' 'MB' 'GB' 'TB') + local unit=0 + while [ $size -ge 1024 ] && [ $unit -lt 4 ]; do + size=$((size / 1024)) + unit=$((unit + 1)) + done + echo "$size ${units[$unit]}" +} +TOTAL_SIZE=$(human_readable_size "$FILE_SIZE_BYTES") + +# Helper to format centered HTML label with a fixed width +format_label() { + local filename="$1" + local detail="$2" + local wrapped_filename + # Wrap the filename to 45 chars max, and join with
+ wrapped_filename=$(echo "$filename" | fold -w 45 | sed ':a;N;$!ba;s/\n/
/g') + echo "
Uploading $wrapped_filename
$detail
" +} + +INIT_LABEL=$(format_label "$BASENAME" "(0 B / $TOTAL_SIZE) @ 0 B/s — --:--:-- remaining") + # ========================================== # Progress bar setup (kdialog + qdbus) # ========================================== @@ -59,7 +87,7 @@ PROGRESS_OBJECT="" if command -v kdialog &>/dev/null && [ -n "$QDBUS_CMD" ]; then DBUS_REF=$(kdialog --title "f0ckm Uploader" \ - --progressbar "Uploading $BASENAME..." 100 2>/dev/null) + --progressbar "$INIT_LABEL" 100 2>/dev/null) PROGRESS_SERVICE=$(echo "$DBUS_REF" | awk '{print $1}') PROGRESS_OBJECT=$(echo "$DBUS_REF" | awk '{print $2}') fi @@ -102,7 +130,7 @@ if [ -n "$PROGRESS_SERVICE" ] && [ -n "$PROGRESS_OBJECT" ]; then PCT="${fields[0]}" fi - TOTAL_SIZE="${fields[1]}" + TOTAL_SIZE_CURL="${fields[1]}" XFERD="${fields[5]}" SPEED="${fields[11]}" TIME_LEFT="${fields[10]}" @@ -112,8 +140,13 @@ if [ -n "$PROGRESS_SERVICE" ] && [ -n "$PROGRESS_OBJECT" ]; then SPEED="${SPEED}/s" fi - LABEL="Uploading $BASENAME -($XFERD / $TOTAL_SIZE) @ $SPEED — $TIME_LEFT remaining" + # Prefer the local size calculation if curl total size is 0/empty/not computed yet + if [ -z "$TOTAL_SIZE_CURL" ] || [ "$TOTAL_SIZE_CURL" = "0" ] || [ "$TOTAL_SIZE_CURL" = "0b" ]; then + TOTAL_SIZE_CURL="$TOTAL_SIZE" + fi + + DETAIL="($XFERD / $TOTAL_SIZE_CURL) @ $SPEED — $TIME_LEFT remaining" + LABEL=$(format_label "$BASENAME" "$DETAIL") $QDBUS_CMD "$PROGRESS_SERVICE" "$PROGRESS_OBJECT" Set "" value "$PCT" 2>/dev/null || true $QDBUS_CMD "$PROGRESS_SERVICE" "$PROGRESS_OBJECT" setLabelText "$LABEL" 2>/dev/null || true