#!/bin/bash

# This file is sourced by /etc/X11/fly-dm/Xsession, not executed.

#force kiosk env

echo fly check kiosk  `date '+%F %T.%3N'`

if [[ "$LANG" == *"en"* ]]; then
   RC_PREFIX="global.en"
else
   RC_PREFIX=global.$LANG
fi

. /usr/bin/fly-kiosk-config-dir.sh

if [ ! -z "$FLY_KIOSK_CONFIG_DIR" ]; then
    #echo cdir="$FLY_KIOSK_CONFIG_DIR"

    export BASH=/bin/rbash
    export SHELL=${BASH}

    session="fly-wm"
    if [ "$DESKTOP_SESSION" = "fly-tablet" ]; then
      export DESKTOP_SESSION="fly-tablet-kiosk"
    else
      export DESKTOP_SESSION="fly-kiosk"
    fi

    grep -qi "EditableTheme=true" "$FLY_KIOSK_CONFIG_DIR/fly-kiosk.conf"
    if [ $? -ne "0" ]; then
      if [ -f "/usr/share/fly-wm/$RC_PREFIX.fly-wmrc.$DESKTOP_SESSION" ]; then
        export FLY_RC_FILE="/usr/share/fly-wm/$RC_PREFIX.fly-wmrc.$DESKTOP_SESSION"
      elif [ -f "/usr/share/fly-wm/fly-wmrc.$DESKTOP_SESSION" ]; then
        export FLY_RC_FILE="/usr/share/fly-wm/fly-wmrc.$DESKTOP_SESSION"
      fi
    fi
    grep -qi "EditableDesktop=true" "$FLY_KIOSK_CONFIG_DIR/fly-kiosk.conf"
    if [ $? -ne "0" ]; then
      if [ -d "$FLY_KIOSK_CONFIG_DIR/single" ] && [ ! -z `find "$FLY_KIOSK_CONFIG_DIR/single/" -name *.desktop` ]; then
        export FLY_KIOSK_DESKTOP_DIR="$FLY_KIOSK_CONFIG_DIR/single"
      elif [ -d "$FLY_KIOSK_CONFIG_DIR/desktop" ]; then
        export FLY_KIOSK_DESKTOP_DIR="$FLY_KIOSK_CONFIG_DIR/desktop"
      fi
      if [ -d "$FLY_KIOSK_CONFIG_DIR/toolbar" ]; then
        export FLY_KIOSK_TOOLBAR_DIR="$FLY_KIOSK_CONFIG_DIR/toolbar"
      fi
    fi


    if [ ! -z "$FLY_KIOSK_DESKTOP_DIR" ]; then

      #echo desktop readonly kiosk mode due to FLY_KIOSK_DESKTOP_DIR=$FLY_KIOSK_DESKTOP_DIR RC=$FLY_RC_FILE

      #how to save/restore breezerc, Trolltech.conf?
      #if [ -f $HOME/.fly/paletterc ]; then mv -f $HOME/.fly/paletterc $HOME/.fly/paletterc.saved-by-kiosk; fi
      if [ -f "$HOME/.config/breezerc" ]; then mv -f "$HOME/.config/breezerc" "$HOME/.config/breezerc.saved-by-kiosk"; fi
      if [ -f "$HOME/.config/Trolltech.conf" ]; then mv -f "$HOME/.config/Trolltech.conf" "$HOME/.config/Trolltech.conf.saved-by-kiosk"; fi

    else

      #echo desktop writable kiosk mode due to FLY_KIOSK_DESKTOP_DIR undefined

      #how to save/restore breezerc, Trolltech.conf?
      #if [ -f $HOME/.fly/paletterc.saved-by-kiosk ]; then mv -f $HOME/.fly/paletterc.saved-by-kiosk $HOME/.fly/paletterc; fi
      if [ -f "$HOME/.config/breezerc.saved-by-kiosk" ]; then mv -f "$HOME/.config/breezerc.saved-by-kiosk" "$HOME/.config/breezerc"; fi
      if [ -f "$HOME/.config/Trolltech.conf.saved-by-kiosk" ]; then mv -f "$HOME/.config/Trolltech.conf.saved-by-kiosk" "$HOME/.config/Trolltech.conf"; fi

      #check and create desktop and toolbar dirs
      DESKTOP_DIR=`xdg-user-dir DESKTOP`
      if [ ! -d "$DESKTOP_DIR" ]; then
        if [ -x /usr/bin/xdg-user-dirs-update ]; then /usr/bin/xdg-user-dirs-update; fi
        DESKTOP_DIR=`/usr/bin/xdg-user-dir DESKTOP`
        if [ ! -d "$DESKTOP_DIR" ]; then mkdir -p "$DESKTOP_DIR"; fi
      fi
      TOOLBAR_DIR="$HOME/.fly/toolbar"
      if [ ! -d "$TOOLBAR_DIR" ]; then mkdir -p "$TOOLBAR_DIR"; fi

      cd "$DESKTOP_DIR"
      find . -name \*\-kiosk.desktop -print0 -exec rm {} \;
      cd "$TOOLBAR_DIR"
      find . -name \*\-kiosk.desktop -print0 -exec rm {} \;
      cd "$HOME"

      #copy desktop and toolbar entries to home and dont forget to set OnlyShowIn=fly-kiosk;fly-tablet-kiosk in copied entries
      SINGLE_APP=""
      if [ -d "$FLY_KIOSK_CONFIG_DIR/single" ]; then
      for FILE_PATH in `find "$FLY_KIOSK_CONFIG_DIR/single/" -name *.desktop`; do
        SINGLE_APP=1
        FILE_NAME=$(basename "$FILE_PATH")
        grep -q "\-kiosk" "$FILE_PATH"
        if [ $? -eq "0" ]; then
          cp "$FILE_PATH" "$DESKTOP_DIR"
        else
          grep -q "OnlyShowIn" "$FILE_PATH"
          if [ $? -eq "0" ]; then
            grep -q "OnlyShowIn=fly-tablet" "$FILE_PATH"
            if [ $? -eq "0" ]; then
              cat "$FILE_PATH" | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-tablet-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
            else
              cat "$FILE_PATH" | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
            fi
          else
              cat "$FILE_PATH" | sed 's/\[Desktop Entry\]/\[Desktop Entry\]\nOnlyShowIn=fly-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
          fi
        fi
      done
      fi

      if [ -d "$FLY_KIOSK_CONFIG_DIR/desktop" ] && [ -z "$SINGLE_APP" ]; then
      for FILE_PATH in `find "$FLY_KIOSK_CONFIG_DIR/desktop/" -name *.desktop`; do
        FILE_NAME=$(basename "$FILE_PATH")
        grep -q "\-kiosk" "$FILE_PATH"
        if [ $? -eq "0" ]; then
          cp "$FILE_PATH" "$DESKTOP_DIR"
        else
          grep -q "OnlyShowIn" "$FILE_PATH"
          if [ $? -eq "0" ]; then
            grep -q "OnlyShowIn=fly-tablet" "$FILE_PATH"
            if [ $? -eq "0" ]; then
              cat "$FILE_PATH" | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-tablet-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
            else
              cat "$FILE_PATH" | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
            fi
          else
              cat "$FILE_PATH" | sed 's/\[Desktop Entry\]/\[Desktop Entry\]\nOnlyShowIn=fly-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
          fi
        fi
      done
      fi

      if [ -d "$FLY_KIOSK_CONFIG_DIR/toolbar" ]; then
      for FILE_PATH in `find "$FLY_KIOSK_CONFIG_DIR/toolbar/" -name *.desktop`; do
        FILE_NAME=$(basename "$FILE_PATH")
        grep -q "\-kiosk" "$FILE_PATH"
        if [ $? -eq "0" ]; then
          cp "$FILE_PATH" "$TOOLBAR_DIR"
        else
          grep -q "OnlyShowIn" "$FILE_PATH"
          if [ $? -eq "0" ]; then
            grep -q "OnlyShowIn=fly-tablet" "$FILE_PATH"
            if [ $? -eq "0" ]; then
              cat "$FILE_PATH" | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-tablet-kiosk/'  > "$TOOLBAR_DIR/${FILE_NAME%.*}-kiosk.desktop"
            else
              cat "$FILE_PATH" | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-kiosk/'  > "$TOOLBAR_DIR/${FILE_NAME%.*}-kiosk.desktop"
            fi
          else
              cat "$FILE_PATH" | sed 's/\[Desktop Entry\]/\[Desktop Entry\]\nOnlyShowIn=fly-kiosk/'  > "$TOOLBAR_DIR/${FILE_NAME%.*}-kiosk.desktop"
          fi
        fi
      done
      fi

    fi

    #if desktop entry on desktop is one only set FLY_EXEC_ONLY_PROG to inform fly-wm about only one exec
    #FLY_EXEC_PROG may be set to autostart some prog
    FLY_EXEC_ONLY_PROG="`find \"$FLY_KIOSK_CONFIG_DIR/single/\" -name *.desktop`"

    if [ ! -z "$FLY_EXEC_ONLY_PROG" ]; then
        export FLY_EXEC_ONLY_PROG
        export FLY_KIOSK_FULLSCREEN_MODE=1
    fi

    #additional kiosk settings are there
    if test -x /usr/bin/fly-kiosk-postprepare.sh; then
     /usr/bin/fly-kiosk-postprepare.sh
    fi

    if [ "$DESKTOP_SESSION" = "fly-kiosk" ] || [ "$DESKTOP_SESSION" = "fly-tablet-kiosk" ]; then
      fly-dmctl blockVT > /dev/null
      if [ "$1" != "fly-wm" ] || [ "$session" != "fly-wm" ]; then
        #force fly type session
        session="fly-wm"
        #to get rid of non-fly $1
        shift
      fi
    fi

    if [ ! -d "$XDG_RUNTIME_DIR/dbus-1/services" ]; then mkdir -p "$XDG_RUNTIME_DIR/dbus-1/services"; fi
    if [ ! -f "$XDG_RUNTIME_DIR/dbus-1/services/org.kde.kglobalaccel.service" ]; then
      if [ -f /usr/share/dbus-1/services/org.kde.kglobalaccel.service ]; then
           cp /usr/share/dbus-1/services/org.kde.kglobalaccel.service "$XDG_RUNTIME_DIR/dbus-1/services/"
           sed -i 's/Exec[ \t]*[\=]*.*$/Exec=true/' "$XDG_RUNTIME_DIR/dbus-1/services/org.kde.kglobalaccel.service"
      fi
    fi

else

    #how to save/restore breezerc, Trolltech.conf?
    #if [ -f $HOME/.fly/paletterc.saved-by-kiosk ]; then mv -f $HOME/.fly/paletterc.saved-by-kiosk $HOME/.fly/paletterc; fi
    if [ -f "$HOME/.config/breezerc.saved-by-kiosk" ]; then mv -f "$HOME/.config/breezerc.saved-by-kiosk" "$HOME/.config/breezerc"; fi
    if [ -f "$HOME/.config/Trolltech.conf.saved-by-kiosk" ]; then mv -f "$HOME/.config/Trolltech.conf.saved-by-kiosk" "$HOME/.config/Trolltech.conf"; fi

    if [ -f "$XDG_RUNTIME_DIR/dbus-1/services/org.kde.kglobalaccel.service" ]; then
         rm "$XDG_RUNTIME_DIR/dbus-1/services/org.kde.kglobalaccel.service"
    fi
fi

