#!/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 = "ru_RU.UTF-8" ]; then
RC_PREFIX="global.ru_RU.UTF-8"
else
RC_PREFIX="global.en"
fi

RUSER=$USER
if [ -x /usr/bin/fly-dm-domains.sh ]; then
  SAMBA_SEP=`fly-dm-domains.sh -s`
else
  SAMBA_SEP=@
fi
if [ -z "$SAMBA_SEP" ]; then SAMBA_SEP=@; fi

USER_WITH_SEP=no
case "$USER" in
  *"$SAMBA_SEP"*)
    USER_WITH_SEP=yes
    ;;
esac
if [ "$USER_WITH_SEP" = "yes" ]; then
  RUSER=`echo $USER | cut -d ${SAMBA_SEP} -f2`
  SAMBA_DOM=`echo $USER | cut -d ${SAMBA_SEP} -f1`
fi

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

if [ -d "/etc/fly-kiosk/$RUSER" ]; then
  export FLY_KIOSK_CONFIG_DIR="/etc/fly-kiosk/$RUSER"
else
  groups=$(id --groups --name $USER)

  save_IFS="$IFS"

  if [ ! -z "$SAMBA_DOM" ]; then
    groups=`echo $groups | sed 's/'$SAMBA_DOM'\'$SAMBA_SEP'/;/g' | sed 's/BUILTIN\'$SAMBA_SEP'/;/g'`
    IFS=';'
  fi

  for group in $groups; do

    if [ ! -z "$SAMBA_DOM" ]; then group=`echo $group | sed 's/ *$//g'`; fi
    if [ ! -z $group ]; then
      #echo gr=$group

      if [ -d /etc/fly-kiosk/$group ]; then
        grep -qi "IsGroup=true" "/etc/fly-kiosk/$group/fly-kiosk.conf"
        if [ $? -eq "0" ]; then
          export FLY_KIOSK_CONFIG_DIR=/etc/fly-kiosk/$group
          break
        fi
      fi
    fi
  done

  IFS="$save_IFS"
fi


if [ ! -z $FLY_KIOSK_CONFIG_DIR ]; then

    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
      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

fi
