#!/bin/bash

# Main AppImage script to wrap XDG_* variable properly for Qt5.
#
# Copyright (c) 2015-2020 by Gilles Caulier  <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#

preload_shared_library ()
{
    FILE=$1
    echo -e "$FILE "

    if [[ "$(arch)" = "x86_64" ]] ; then
        # 64 bits system

        if   [ -f "$DIR/usr/lib64/$FILE" ] ; then
            export LD_PRELOAD=$LD_PRELOAD:$DIR/usr/lib64/$FILE
        elif [ -f "/usr/lib64/$FILE" ] ; then
            export LD_PRELOAD=$LD_PRELOAD:/usr/lib64/$FILE
        elif [ -f "/usr/lib/x86_64-linux-gnu/$FILE" ] ; then
            export LD_PRELOAD=$LD_PRELOAD:/usr/lib/x86_64-linux-gnu/$FILE
        elif [ -f "/lib/x86_64-linux-gnu/$FILE" ] ; then
            export LD_PRELOAD=$LD_PRELOAD:/lib/x86_64-linux-gnu/$FILE
        fi

    else
        # 32 bits system

        if   [ -f "$DIR/usr/lib/$FILE" ] ; then
            export LD_PRELOAD=$LD_PRELOAD:$DIR/usr/lib/$FILE
        elif [ -f "/usr/lib/$FILE" ] ; then
            export LD_PRELOAD=$LD_PRELOAD:/usr/lib/$FILE
        elif [ -f "/usr/lib/i386-linux-gnu/$FILE" ] ; then
            export LD_PRELOAD=$LD_PRELOAD:/usr/lib/i386-linux-gnu/$FILE
        elif [ -f "/lib/i386-linux-gnu/$FILE" ] ; then
            export LD_PRELOAD=$LD_PRELOAD:/lib/i386-linux-gnu/$FILE
        fi

    fi
}


echo "-- digiKam Linux AppImage Bundle"
echo "-- Use 'help' as CLI argument to know all available options for digiKam application."
echo "-- Notes: to integrate this bundle to your desktop, use AppImageLauncher."
echo "--        to enable all debug messages on the console, use 'export QT_LOGGING_RULES=\"digikam*=true\"'."

# See bugs #414016, #414028, #415882, Qt fill log files with unwanted debug trace about locale rules.
export QT_LOGGING_RULES="default*=false;"$QT_LOGGING_RULES

DIR="`dirname \"$0\"`"
DIR="`( cd \"$DIR\" && pwd )`"
export APPDIR=$DIR

export APPIMAGE_ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export APPIMAGE_ORIGINAL_QT_PLUGIN_PATH=$QT_PLUGIN_PATH
export APPIMAGE_ORIGINAL_XDG_DATA_DIRS=$XDG_DATA_DIRS
export APPIMAGE_ORIGINAL_PATH=$PATH

export LD_LIBRARY_PATH=$DIR/usr/lib/:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$DIR/usr/plugins/
export XDG_DATA_DIRS=$DIR/usr/share/:$XDG_DATA_DIRS
export PATH=$DIR/usr/bin:$DIR/usr/lib:$DIR/usr/lib/libexec/kf5:$DIR/usr/share/digikam/utils:$PATH
export KDE_FORK_SLAVES=1
export CAMLIBS=$DIR/usr/lib/libgphoto2
export IOLIBS=$DIR/usr/lib/libgphoto2_port

# QtWebEngine crash with some video card drivers
# https://github.com/qutebrowser/qutebrowser/issues/2368
export QT_XCB_FORCE_SOFTWARE_OPENGL=1

# code to disable Plasma desktopk detection with QDesktopService
export APPIMAGE_ORIGINAL_KDE_FULL_SESSION=$KDE_FULL_SESSION
export APPIMAGE_ORIGINAL_DESKTOP_SESSION=$DESKTOP_SESSION
export APPIMAGE_ORIGINAL_XDG_CURRENT_DESKTOP=$XDG_CURRENT_DESKTOP
export APPIMAGE_ORIGINAL_XDG_SESSION_DESKTOP=$XDG_SESSION_DESKTOP
#unset KDE_FULL_SESSION
#unset DESKTOP_SESSION
#unset XDG_CURRENT_DESKTOP
#unset XDG_SESSION_DESKTOP

# if no customized Qt debug loggin variable is set, turn on one for a better readability

if [ -z "$QT_MESSAGE_PATTERN" ]; then
    export QT_MESSAGE_PATTERN="`echo -e "\033[34m%{function}\033[0m: %{message}"`"
fi

export APPIMAGE_STARTUP_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export APPIMAGE_STARTUP_QT_PLUGIN_PATH=$QT_PLUGIN_PATH
export APPIMAGE_STARTUP_XDG_DATA_DIRS=$XDG_DATA_DIRS
export APPIMAGE_STARTUP_PATH=$PATH

# See bug #401377: tested on Fedora 29 and Mageia 7 for transitional migration from openssl 1.0 to openssl 1.1
if [ -f /etc/pki/openssl10.cnf ]; then
    export OPENSSL_CONF=/etc/pki/openssl10.cnf
fi

preload_shared_library libudev.so.0
#preload_shared_library libfontconfig.so.1
#preload_shared_library libfreetype.so.6
#preload_shared_library libssl.so.10
#preload_shared_library libcrypto.so.10

echo "-- Preloading shared libs: $LD_PRELOAD"

# Parse CLI options.

if [[ $1 == "showfoto" ]] ; then

    # Run Showfoto as well.
    showfoto ${@:2}

elif [[ $1 == "debug" ]] ; then

    if [[ $2 == "showfoto" ]] ; then

        # Showfoto in debug mode.

        echo "Starting Showfoto into GDB..."
        echo "Use 'bt' command on debugger prompt to get a crash backtrace."
        echo "Use 'q' command to quit debugger session."
        gdb -ex=r --args showfoto ${@:3}

    else

        # digiKam in debug mode.

        echo "Starting digiKam into GDB..."
        echo "Use 'bt' command on debugger prompt to get a crash backtrace."
        echo "Use 'q' command to quit debugger session."
        gdb -ex=r --args digikam ${@:2}

    fi

elif [[ $1 == "help" ]] ; then

    # digiKam/Showfoto CLI help.

    echo "digiKam AppImage bundle CLI options:"
    echo " without option       : run digiKam."
    echo " <showfoto>           : run Showfoto instead digiKam."
    echo " <debug>              : run digiKam into GDB."
    echo " <debug> <showfoto>   : run Showfoto into GDB."
    echo " <help>               : show these information."

else

    # Run digiKam as well.

    digikam $@

fi
