diff --git a/File Converter b/File Converter index ae8812e..dd9ce85 100644 --- a/File Converter +++ b/File Converter @@ -1,5 +1,8 @@ #!/usr/bin/env bash +# IMPORTANT: Ensure xournalpp is installed and in your PATH for .xopp conversions. +# For example, on Debian/Ubuntu: sudo apt install xournalpp + FILES=$(echo -e "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS") if [ -z "$FILES" ]; then @@ -11,6 +14,8 @@ first_file=$(echo "$FILES" | head -n1) EXT="${first_file##*.}" EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') +# Determine the primary category of the selected files based on the first file +MIME_CATEGORY="" case "$EXT_LOWER" in jpg|jpeg|png|webp) MIME_CATEGORY="image" @@ -18,6 +23,9 @@ case "$EXT_LOWER" in pdf) MIME_CATEGORY="pdf" ;; + xopp) # NEW: Xournal++ file category + MIME_CATEGORY="xopp" + ;; mp3|ogg|wav|flac) MIME_CATEGORY="audio" ;; @@ -25,16 +33,21 @@ case "$EXT_LOWER" in MIME_CATEGORY="video" ;; *) - zenity --error --text="Unsupported file extension :(" + zenity --error --text="Unsupported file extension for the first selected file: .$EXT" exit 1 ;; esac +# Define conversion options based on the determined MIME_CATEGORY +OPTIONS="" case "$MIME_CATEGORY" in image) OPTIONS="JPEG\tjpg\nPNG\tpng\nWEBP\twebp\nPDF\tpdf" ;; pdf) + OPTIONS="PDF\tpdf" # PDF files can only be output as PDF in this script's current logic + ;; + xopp) # NEW: Options for Xournal++ files OPTIONS="PDF\tpdf" ;; audio) @@ -45,13 +58,14 @@ case "$MIME_CATEGORY" in ;; esac +# Prompt user for output format OUTPUT_EXT=$(zenity --list \ --title="Convert $MIME_CATEGORY files" \ --print-column=2 \ --column="Format" --column="Extension" \ $(echo -e "$OPTIONS")) -if [ -z "$OUTPUT_EXT" ]; then exit 0; fi +if [ -z "$OUTPUT_EXT" ]; then exit 0; fi # User cancelled QUALITY="" case "$OUTPUT_EXT" in @@ -64,6 +78,7 @@ case "$OUTPUT_EXT" in mp4|webm|avi|mkv) QUALITY=$(zenity --scale --title="Select video bitrate (kbps)" --min-value=500 --max-value=5000 --value=2000 --step=100) ;; + # No quality prompt for PDF or XOPP esac total=$(echo "$FILES" | wc -l) @@ -83,6 +98,9 @@ for FILE in $FILES; do EXT="${FILE##*.}" EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') + + # Determine the category of the CURRENT file in the loop + FILE_CATEGORY="unknown" case "$EXT_LOWER" in jpg|jpeg|png|webp) FILE_CATEGORY="image" @@ -90,15 +108,15 @@ for FILE in $FILES; do pdf) FILE_CATEGORY="pdf" ;; - mp3|ogg|wav) + xopp) # NEW: Detect xopp for individual file processing + FILE_CATEGORY="xopp" + ;; + mp3|ogg|wav|flac) # Note: 'flac' input is audio but output options might be limited FILE_CATEGORY="audio" ;; mp4|webm|avi|mkv) FILE_CATEGORY="video" ;; - *) - FILE_CATEGORY="unknown" - ;; esac if [ "$FILE_CATEGORY" = "unknown" ]; then @@ -108,13 +126,21 @@ for FILE in $FILES; do # Run commands with error output visible (not silent) case "$FILE_CATEGORY" in - image|pdf) + image|pdf) # ImageMagick's convert can handle images and PDF inputs if [ -n "$QUALITY" ] && [[ "$OUTPUT_EXT" == jpg || "$OUTPUT_EXT" == jpeg ]]; then convert "$FILE" -quality "$QUALITY" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 else convert "$FILE" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 fi ;; + xopp) # NEW: Handle Xournal++ to PDF conversion + if [ "$OUTPUT_EXT" = "pdf" ]; then + # xournalpp + xournalpp -p "$OUTPUT_PATH" "$FILE" || echo "Failed to convert $FILE" >&2 + else + echo "Skipping $FILE: XOPP files can only be converted to PDF." >&2 + fi + ;; audio) if [ -n "$QUALITY" ]; then ffmpeg -loglevel error -y -i "$FILE" -b:a "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 @@ -124,14 +150,14 @@ for FILE in $FILES; do ;; video) case "$OUTPUT_EXT" in - mp3|ogg|wav) + mp3|ogg|wav|flac) # Convert video to audio if [ -n "$QUALITY" ]; then ffmpeg -loglevel error -y -i "$FILE" -vn -b:a "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 else ffmpeg -loglevel error -y -i "$FILE" -vn "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 fi ;; - *) + *) # Convert video to another video format if [ -n "$QUALITY" ]; then ffmpeg -loglevel error -y -i "$FILE" -b:v "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 else