#!/bin/bash

# Copyright 2004, ..., 2026  Jean-Philippe Guillemin <h1p8r10n@yandex.com>
# All rights reserved.
#
#   Permission to use, copy, modify, and distribute this patch for
#   any purpose with or without fee is hereby granted, provided that
#   the above copyright notice and this permission notice appear in all
#   copies.
#
#   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
#   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
#   IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
#   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
#   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
#   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
#   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
#   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
#   SUCH DAMAGE.

usage(){
  echo "Usage : $0 FILE.AppImage"
}

CWD="$(pwd)"
APPIMAGE="$(basename $1 2>/dev/null)"

[[ ! -f $CWD/$APPIMAGE ]] && usage && exit

chmod 755 $CWD/$APPIMAGE

APPFILE="$(basename -s .AppImage "$APPIMAGE")"

rm -rf $CWD/squashfs-root
$CWD/$APPIMAGE --appimage-extract

DESKTOP=$(ls $CWD/squashfs-root/*.desktop)

ICONNAME="$(sed -n 's/Icon=\(.*\)/\1/p' "$DESKTOP" | head -n1)"
ICON="$(basename $(ls $CWD/squashfs-root/*.png 2>/dev/null || ls $CWD/squashfs-root/*.svg 2>/dev/null))"
NAME="$(sed -n 's/Name=\(.*\)/\1/p' "$DESKTOP" | head -n1)"
CATEGORIES="$(sed -n 's/Categories=\(.*\)/\1/p' "$DESKTOP" | head -n1)"
COMMENT="$(sed -n 's/Comment=\(.*\)/\1/p' "$DESKTOP" | head -n1)"
GENERICNAME="$(sed -n 's/GenericName=\(.*\)/\1/p' "$DESKTOP" | head -n1)"
MIMETYPES="$(sed -n 's/MimeType=\(.*\)/\1/p' "$DESKTOP" | head -n1)"
APPIMAGEVERSION="$(sed -n 's/X-AppImage-Version=\(.*\)/\1/p' "$DESKTOP" | head -n1)"
EXEC="$(sed -n 's/Exec=\([^ ]*\).*$/\1/p' "$DESKTOP" | head -n1)"

SYSTEMICON="$(find /usr/share/icons ~/.local/share/icons -type f -name "*${ICONNAME}*" | head -n1)"
if [[ -f "$SYSTEMICON" ]]; then
  PATHTOICON="$(basename "${SYSTEMICON%.*}")"
else
  mkdir -p $HOME/.local/share/icons/hicolor/scalable/apps
  cp $CWD/squashfs-root/$ICON $HOME/.local/share/icons/hicolor/scalable/apps/$ICON
  PATHTOICON="$HOME/.local/share/icons/hicolor/scalable/apps/$ICON"
fi
mkdir -p $HOME/.local/share/applications
cat << END > $HOME/.local/share/applications/$(basename $EXEC).desktop
[Desktop Entry]
Version=1.0
Name=$NAME
GenericName=$GENERICNAME
Comment=$COMMENT
Exec=$CWD/$APPIMAGE
Terminal=false
Icon=$PATHTOICON
Type=Application
Categories=X-AppImage;$CATEGORIES
MimeType=$MIMETYPES
END

ln -sf $HOME/.local/share/applications/$(basename $EXEC).desktop $HOME/Desktop/$(basename $EXEC).desktop

rm -rf $CWD/squashfs-root
rm -rf $CWD/AppDir

xdg-desktop-menu forceupdate
