#!/bin/bash

Info () {
local app
title="Info"
author="Peter Starfinger"
mail="E-Mail: info@die-starfingers.de"
year="2026"
app="$(basename $0)"
msgid="The Starbuntu application
<i>\$app</i>
was written by"
info="$(gettext "$msgid" | (export PATH `envsubst --variables "$msgid"`; envsubst "$msgid"))"

yad --center --fixed --title="$title" --window-icon="info" --image="info" --borders=20 --text="$info"$'\n'$'\n'"$author"$'\n'"$mail"$'\n'$'\n'"$year"$'\n' --text-align=center --selectable-labels --button="OK" &
wunwa "$title" > /dev/null; xdotool key Home key Down
}

param="$@" # existing regular file or *.extension
[ "$1" = "info" ] && Info && exit 0

IFS=$'\n'
[ -z "$param" ] && exit 1
if [ -e "$param" ]; then
    type="$(xdg-mime query filetype "$param")"
    [ "${param::5}" = "/dev/" ] && type="inode/blockdevice"
else
    param="*.${param##*.}"
    type="$(grep -r "$param[^\.]" /usr/share/mime/* | grep -v 'freedesktop.org' | head -1 | cut -d: -f1 | sed -E 's|/usr/share/mime/(.*)\.xml|\1|')"
fi

dsk=()
for m in $HOME/.config/mimeapps.list $HOME/.local/share/applications/mimeapps.list $HOME/.local/share/applications/mimeinfo.cache /usr/share/applications/defaults.list /usr/share/applications/mimeinfo.cache; do
    entry="$(grep $type= $m | cut -d= -f2)"
    entry="${entry//;/$'\n'}"
    dsk=(${dsk[@]} $entry)
done

for ((k=0; k<${#dsk[@]}; k++)); do
    d="${dsk[$k]}"
    [ -z "$(which ${dsk[$k]})" ] && dsk[$k]=""
    [ -n "${dsk[$k]}" ] && [ -z "$(grep "Categories=" "$(which ${dsk[$k]})")" ] && dsk[$k]=""
    [ -n "${dsk[$k]}" ] && [ -n "$(grep "NoDisplay=true" "$(which ${dsk[$k]})")" ] && dsk[$k]=""
    for ((l=k+1; l<${#dsk[@]}; l++)); do
	[ "${dsk[$l]}" = "$d" ] && dsk[$l]=""
    done
done
dsk=(${dsk[@]})

[ $LANGUAGE = "en" ] && search="Name=" || search="Name\[$LANGUAGE\]="

name=()
for ((k=0; k<${#dsk[@]}; k++)); do
    name[$k]="$(grep "^$search" "$(which ${dsk[$k]})" | head -1 | cut -d= -f2 | sed -E 's/\& /\&amp; /g')"
    [ -z "${name[$k]}" ] &&  name[$k]="$(grep "^Name=" "$(which ${dsk[$k]})" | head -1 | cut -d= -f2 | sed -E 's/\& /\&amp; /g')"
done

applist=(); l=0
for ((k=0; k<${#dsk[@]}; k++)); do applist[$k]="$(echo "${name[$k]} ("${dsk[$k]/.desktop}")")"; [ ${#applist[$k]} -gt $l ] && l=${#applist[$k]}; done
applist=(${applist[@]} $"Other Application")
 
title=$"App list to $type"
dsk=$(yad --center --title="$title" --height=$((${#applist[@]}*22+110)) --width=$((l*8+70)) --borders=20 --list --no-headers --window-icon=$HOME/.icons/list.png --column=Applist ${applist[@]} --button=$"Cancel":1 --button=$"Help":"yelp /usr/share/help/"$"C""/Starbuntu/starbuntu-apps-details.page#applist" --button="Info":"$0 info" --button="OK":0)
[ $? -gt 0 ] && exit 1

[ "$dsk" != $"Other Application""|" ] && dsk="$(echo "${dsk::-1}" | sed -E 's/.*(\([^\)]*\))$/\1/g' | cut -d'(' -f2 | cut -d')' -f1)".desktop || dsk="$(echo "${dsk::-1}")"

echo "$dsk"
