#!/bin/bash

# Script usage: get-nautilus-quick-action 1 application/pdf 2

# prefix - the number of quick_action
[[ -z $1 ]] && {
exit 1
}

# mime types of the selection. Example: application/pdf
[[ -z $2 ]] && {
exit 1
}

# the number of selected files
[[ -z $3 ]] && {
exit 1
}

# $1 - script file
# $2 - mime_types
function check_filter() {
    echo "func \$1 = $1" >> $LOG
    echo "func \$2 = $2" >> $LOG
    for mime in `echo $2`
    do
        echo "func mime = $mime" >> $LOG
        cat $1 | grep "#!filter=" | grep "$mime" || return 123
    done
    return 0
}

if [[ $3 == "1" ]]
then selection="single\|any"
else selection="multiple\|any"
fi

LOG="$HOME/.local/share/nautilus/.quick_action.log"
echo >> $LOG
echo "get-nautilus-quick-action" >> $LOG
date >> $LOG
echo "gnqa: $@" >> $LOG

script_dir="/usr/share/nautilus/quick-actions"
user_script_dir="$HOME/.local/share/nautilus/quick-actions/"

prefix=$1

echo "Analyzing mime types" >> $LOG
mime_types=""
for mime in `echo $2`
do
    echo "mime = $mime (mime_types=$mime_types)" >> $LOG
    echo "$mime_types" | grep " $mime " 2>&1 > /dev/null ; code=$?
    if [ $code -eq 0 ]
        then echo "mime $mime already added" >> $LOG
        else if [[ -z $mime_types ]]
            then mime_types=" $mime "
            else mime_types="${mime_types}${mime} "
            fi
    fi
done
echo "mime_types: $mime_types" >> $LOG

echo "Searching in user quick-action dir: $user_script_dir" >> $LOG
for action_file in `grep -rnw "$user_script_dir/" -e "#\!order=$1" | awk -F \: {'print $1'}`
do
    echo "$action_file" >> $LOG
    check_filter "$action_file" "$mime_types" 2>&1 > /dev/null ; codeFilter=$?
    cat $action_file | grep "#!selection=" | grep "$selection" 2>&1 > /dev/null ; codeMulti=$?
    cat $action_file | grep "#!hidden=" | grep "true" 2>&1 > /dev/null ; codeHidden=$?
    if [[ $codeFilter -eq 0 && $codeMulti -eq 0 && $codeHidden -ne 0 ]]
    then script_name=$action_file
        echo "Found script (1)" >> $LOG
        break
    fi
done

[[ -z $script_name ]] && {
    echo "Searching in sys quick action dir: $script_dir" >> $LOG
    for action_file in `grep -rnw "$script_dir/" -e "#\!order=$1" | awk -F \: {'print $1'}`
    do
        echo "$action_file" >> $LOG
        # Check if there is such filename in user_script_dir. If any - ignore system script
        name=`echo $action_file | awk -F \/ {'print $NF'}`
        [[ -f $user_script_dir/$name ]] ; codeOverride=$?
        check_filter "$action_file" "$mime_types" 2>&1 > /dev/null ; codeFilter=$?
        cat $action_file | grep "#!selection=" | grep "$selection" 2>&1 > /dev/null ; codeMulti=$?
        cat $action_file | grep "#!hidden=" | grep "true" 2>&1 > /dev/null ; codeHidden=$?
        if [[ $codeOverride -ne 0 && $codeFilter -eq 0 && $codeMulti -eq 0 && $codeHidden -ne 0 ]]
        then script_name=$action_file
            echo "Found script (2)" >> $LOG
            break
        fi
    done
}

echo "Search end, script_name = $script_name" >> $LOG

if [[ -s "$script_name" ]]
    then echo "$script_name"
    else echo ""
fi
