#!/bin/bash

function single_stacktrace()
{
  find $1 -maxdepth $2 -name 'core*' -exec \
      echo "=====>  Core file: {}" 2> /dev/null >> $FILE \; -exec \
      echo "        ========================================= " 2> /dev/null >> $FILE \; -exec \
      gdb /usr/share/xbmc/xbmc.bin --core={} --batch -ex "thread apply all bt" 2> /dev/null >> $FILE \; -exec \
      rm -f {} \;
}

function print_crash_report()
{
  FILE="xbmc_crashlog-`date +%Y%m%d_%H%M%S`.log"
  echo "############## XBMC CRASH LOG ###############" >> $FILE
  echo >> $FILE
  echo "################ SYSTEM INFO ################" >> $FILE
  echo -n " Date: " >> $FILE
  date >> $FILE
  echo " XBMC Options: $*" >> $FILE
  echo -n " Arch: " >> $FILE
  uname -m >> $FILE
  echo -n " Kernel: " >> $FILE
  uname -rvs >> $FILE
  echo -n " Release: " >> $FILE
  if which lsb_release &> /dev/null; then
    echo >> $FILE
    lsb_release -a 2> /dev/null | sed -e 's/^/    /' >> $FILE
  else
    echo "lsb_release not available" >> $FILE
  fi
  echo "############## END SYSTEM INFO ##############" >> $FILE
  echo >> $FILE
  echo "############### STACK TRACE #################" >> $FILE
  single_stacktrace $PWD 1
  # Find in plugins directories
  if [ $XBMC_HOME ]; then
    BASEDIR=$XBMC_HOME
  else
    BASEDIR=/usr/share/xbmc/
  fi
  single_stacktrace $BASEDIR 5
  # find in user xbmc dir
  single_stacktrace $HOME/.xbmc/ 5
  echo "############# END STACK TRACE ###############" >> $FILE
  echo >> $FILE
  echo "################# LOG FILE ##################" >> $FILE
  echo >> $FILE
  if [[ -f ~/.xbmc/temp/xbmc.log ]]
  then
    cat ~/.xbmc/temp/xbmc.log >> $FILE
    echo >> $FILE
  else
    echo "Logfile not found in the usual place." >> $FILE
    echo "Please attach it seperately." >> $FILE
    echo "Use pastebin.com or similar for forums or IRC." >> $FILE
  fi
  echo >> $FILE
  echo "############### END LOG FILE ################" >> $FILE
  echo >> $FILE
  echo "############ END XBMC CRASH LOG #############" >> $FILE
  echo "Crash report available at $PWD/$FILE"
}

# Set XBMC_HOME if xbmc.bin is a symlink
if [ -L /usr/share/xbmc/xbmc.bin ]; then
  export XBMC_HOME="/usr/share/xbmc"
fi

python /usr/share/xbmc/FEH.py "$@"
if [ $? -ne 0 ]; then
  exit
fi
LOOP=1
ulimit -c unlimited
while (( $LOOP ))
do
  LOOP=0
  /usr/share/xbmc/xbmc.bin "$@"
  RET=$?
  if (( $RET == 65 ))
  then
    LOOP=1
  elif (( ($RET >= 131 && $RET <= 136) || $RET == 139 ))
  then
    print_crash_report
  fi
done

