#!/bin/sh

usage()
{
  echo "Utilisation :
  $0 [-u] [[/dev/]device | [/dev/disk/by-uuid/]uuid | [/dev/mapper/]uuid]

Monte un système de fichier dans un sous-répertoire de /media via udisks ou
udisks2.
Si aucun périphérique n'est donné, fmount tente de deviner le dernier périphérique inséré.

Option de l'application :
  -u Démonte le système de fichier
  -h Affiche ce message d'aide"
}

finddev()
{
  DEV=$1

  if (echo $DEV | grep -q '^/dev/') && [ -e $DEV ]
  then
    echo $DEV
  fi

  if [ -e "/dev/disk/by-uuid/$DEV" ]
  then
    echo "/dev/disk/by-uuid/"$(echo $DEV | sed 's/.*/\L&/')
  fi

  if [ -e "/dev/$DEV" ]
  then
    echo "/dev/$DEV"
  fi

  if [ -e "/dev/mapper/$DEV" ]
  then
    echo "/dev/mapper/$DEV"
  fi
}

wrapper()
{
  ACTION=$1
  DEVICE=$2

  case $ACTION in
    "mount")
      if [ -e /usr/bin/udisksctl ]
      then
        udisksctl mount -b $DEVICE
      else
        udisks --mount $DEVICE
      fi
      return $?
      ;;
    "umount")
      if [ -e /usr/bin/udisksctl ]
      then
        udisksctl unmount -b $DEVICE
      else
        udisks --unmount $DEVICE
      fi
      return $?
      ;;
    *)
      echo "Action invalide"
      return 1
      ;;
  esac
}

guesslast()
{
  LOG=$(dmesg| tail -n 50 | grep 'Attached scsi generic' -A 11 | tail -n 12)
  PARTS=$(echo $LOG | grep "sd.: sd.")
  if [ "$PARTS" = "" ]
  then
    DEV=$(echo $LOG | sed '/\[sd/s/.*\[\(sd[^\]]*\)\].*/\1/')
  else
    DEV=$(echo $PARTS | sed '/sd.:/s/.*sd.: \(sd[^ ]*\).*/\1/')
  fi
  echo $DEV
}

ACTION="mount"

if [ $# -ne 0 ] && [ $1 = "-u" ]
then
  ACTION="umount"
  shift
fi

if [ $# -ne 0 ] && [ $1 = "-h" ]
then
  usage
  exit 0
fi

if [ $# -ne 1 ]
then
  DEV=$(guesslast)
else
  DEV=$1
fi

DEV=$(finddev $DEV)

if [ -z "$DEV" ]
then
  echo "Impossible de trouver le périphérique $DEV."
  exit 1
fi

wrapper $ACTION $DEV
exit $?