• 1 Post
  • 6 Comments
Joined 8 months ago
cake
Cake day: July 28th, 2024

help-circle



  • It’s fixed now! At first I researched a little more and found about the desktop-file-validate cli utility from the desktop-file-utils package, and it did tell me a lot about the syntax errors I was making with the exec command.

    But as you wisely suggested, dealing with those escaping rules was a bit too bothersome for my use case, so I ended going the bash script route which worked flawlessly at last! So thank you for pointing that out!

    Here’s the final .desktop file for anyone interested:

    [Desktop Entry]
    Type=Service
    MimeType=image/png;image/jpg;image/jpeg;image/ico;image/heic;image/svg+xml;image/webp;
    Actions=topng;tojpg;toico;towebp
    X-KDE-Submenu=Convert Image Format
    Icon=viewimage
    
    [Desktop Action topng]
    Name=To Png
    Exec=/home/myuser/.local/share/kio/servicemenus/scripts/convert-image.sh %f png
    Icon=viewimage
    
    [Desktop Action tojpg]
    Name=To Jpg
    Exec=/home/myuser/.local/share/kio/servicemenus/scripts/convert-image.sh %f jpg
    Icon=viewimage
    
    [Desktop Action toico]
    Name=To Ico
    Exec=/home/myuser/.local/share/kio/servicemenus/scripts/convert-image.sh %f ico
    Icon=viewimage
    
    [Desktop Action towebp]
    Name=To Webp
    Exec=/home/myuser/.local/share/kio/servicemenus/scripts/convert-image.sh %f webp
    Icon=viewimage
    
    

    and the bash script coupled with it:

    #!/bin/bash
    
    FILE="${1}"
    FORMAT="${2}"
    
    # Check if magick is installed
    if ! command -v magick &> /dev/null; then
        echo "Error: magick command not found. Please install ImageMagick."
        exit 1
    fi
    
    # Check if FILE exists
    if [[ ! -f "$FILE" ]]; then
        echo "File not found: $FILE"
        exit 1
    fi
    
    DIRECTORY=$(dirname "$FILE")
    # Get the file name by looking for the longest match starting from the beginning of the string up to the last dot.
    FILENAME=$(basename "$FILE" .${FILE##*.})
    
    # Convert the file format using magick
    magick "$FILE" -format "$FORMAT" "$DIRECTORY/$FILENAME.$FORMAT"
    
    

  • If I understood correctly, I made the changes as you said like this:

    Exec=sh -c "FILE=\"%f\"; DIRECTORY=\"$(dirname \"$FILE\")\"; FILENAME=\"${FILE%.*}\"; magick \"$FILE\" -format png \"$DIRECTORY/$FILENAME.png\""

    Now when I click on the service menu option this error popup appears:

    Syntax error in command sh -c "FILE=%f; DIRECTORY=$(dirname $FILE); FILENAME=${FILE%.*}; magick $FILE\ -format png $DIRECTORY/$FILENAME.png" coming from

    It seems escaping the double quotes doesn’t actually escape the backlash with it?

    I then tried escaping those new backlashes like this

    Exec=sh -c "FILE=\\"%f\\"; DIRECTORY=\\"$(dirname \\"$FILE\\")\\"; FILENAME=\\"${FILE%.*}\\"; magick \\"$FILE\\" -format png \\"$DIRECTORY/$FILENAME.png\\""

    and now Dolphin doesnt complain about syntax, but the new converted image doesn’t get made :(