#! /bin/bash
which zenity
if [ "$?" != "0" ]; then
echo "Zenity n'est pas installé.";exit
exit
fi
which borg
if [ "$?" != "0" ]; then
echo "borgbackup n'est pas installé.";exit
exit
fi
# META VARIABLES
#################################################################################
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
dossierprofil="$HOME/.config/borg/"
# FONCTIONS
#################################################################################
TestBorgRepo () {
if [ ! -f "config" ]; then
TestBorgErr=1
infoerr=$(echo "Impossible de trouver le fichier de configuration borg.")
zenity --width=600 --error --text="$infoerr"
exit
fi
if [ ! -d "data" ]; then
TestBorgErr=1
infoerr=$(echo "Impossible de trouver le fichier de configuration borg.")
zenity --width=600 --error --text="$infoerr"
exit
fi
if [ -d "lock.exclusive" ]; then
TestBorgErr=1
infoerr=$(echo "Le dépôt est bloqué, une opération est peut-être en cours")
zenity --width=600 --error --text="$infoerr"
exit
fi
}
bobainfoa () {
TestBorgRepo
borg info ./::$borg_repo
}
DossierPresent () {
if [ ! -d "$1" ]; then
inforerror=$(echo "Erreur, le dossier $1 est absent.")
zenity --width=600 --error --text="$inforerror"
VarDossierPresent="false"
fi
}
# Profils et tests
#################################################################################
# si $1 n'est pas vide fichier de profil = $1
# sinon afficher les profils disponibles
if [ ! $1 = "" ]; then
fichierprofil="$1"
. "$1"
else
cd $dossierprofil
fichierprofil=$(ls -1 *.txt | zenity --height=500 --width=600 --window-icon=$HOME/.icons/borg.svg --list --title "Liste des profils" --hide-header --column "profil") && . $fichierprofil
fi
if [ "$fichierprofil" = "" ]; then
infoerr=$(echo "Aucun profil choisi.")
zenity --width=600 --error --text="$infoerr"
exit
elif [ "$nomsauvegarde" = "" ]; then
infoerr=$(echo "Nom de sauvegarde non défini.")
zenity --width=600 --error --text="$infoerr"
exit
elif [ "$borg_repo" = "" ]; then
infoerr=$(echo "Variable \$borg_repo absente")
zenity --width=600 --error --text="$infoerr"
exit
fi
cd $borg_repo
TestBorgRepo
#################################################################################
# MENU PRINCIPAL
#################################################################################
#################################################################################
# Gestion des options du menu
#################################################################################
while [ ! "$choixmenu" = "qu" ]
do
choixmenu=$(echo -e "\
cs\nCréer une archive\n\
ms\nMonter une archive\n\
dm\nDemonter une archive\n\
ss\nSupprimmer une archive\n\
is\nInformation archive\n\
fi\nFiltre : "$filter"\n\
--\n------------------------------------------\n\
id\nInformation sur le dépôt\n\
ap\nAfficher le profil\n\
--\n------------------------------------------\n\
ed\nEspace disque utilisé : $(df -k --output=pcent $borg_repo | tail -n +2)\n\
qu\nQuitter\
" | zenity --window-icon=$HOME/.icons/borg.svg --list \
--height=400 --width=400 \
--title "BORG GUI : $nomsauvegarde" \
--hide-header --hide-column=1 --column "id" --column "choix")
if [ "$choixmenu" = "cs" ] ;then
# Créer une archive
TestBorgRepo
DossierPresent $borg_repo
DossierPresent $borg_dir
if [ "$VarDossierPresent" != "false" ];then
borg create $borg_excludes $borg_compress $borg_repo::$borg_archive $borg_dir | zenity --width=600 --window-icon=$HOME/.icons/borg.svg --progress --pulsate --auto-close --title="Sauvegarde en cours..."
sync | zenity --width=600 --window-icon=$HOME/.icons/borg.svg --progress --pulsate --auto-close --title="Synchronisation des écritures..."
zenity --notification --text "Sauvegarde $nomsauvegarde terminée"
zenity --width=600 --info --text "Sauvegarde $nomsauvegarde terminée"
fi
elif [ "$choixmenu" = "ms" ];then
# Monter une archive
if [ "$filter" = "" ];then
borg_archive=$(borg list --short $borg_repo | zenity --height=500 --window-icon=$HOME/.icons/borg.svg --list --title "Listes des archives" --column "Archive")
else
borg_archive=$(borg list --short $borg_repo | grep $filter | zenity --height=500 --window-icon=$HOME/.icons/borg.svg --list --title "Listes des archives" --column "Archive")
fi
mkdir $HOME/$borg_archive
borg mount $borg_repo::$borg_archive $HOME/$borg_archive | zenity --width=600 --progress --pulsate --auto-close
zenity --width=600 --info --text="La sauvegarde est disponible dans le dossier\n$HOME/$borg_archive"
elif [ "$choixmenu" = "dm" ];then
# Demonter une archive
ptnmontage=$(mount | grep borgfs | cut -d" " -f3 | zenity --width=500 --height=400 --window-icon=$HOME/.icons/borg.svg --list --title "Liste des points de montages" --column "Archive")
fusermount -u $ptnmontage | zenity --width=600 --progress --pulsate --auto-close
sleep 5 | zenity --width=600 --progress --pulsate --auto-close
rmdir $ptnmontage | zenity --width=600 --progress --pulsate --auto-close
elif [ "$choixmenu" = "ss" ];then
# Supprimmer une archive
if [ "$filter" = "" ];then
borg_archive=$(borg list --short $borg_repo | zenity --height=500 --window-icon=$HOME/.icons/borg.svg --list --title "Listes des archives" --column "Archive")
else
borg_archive=$(borg list --short $borg_repo | grep $filter | zenity --height=500 --window-icon=$HOME/.icons/borg.svg --list --title "Listes des archives" --column "Archive")
fi
if [ "$borg_archive" = "" ];then
zenity --width=600 --info --text "Aucune archive choisie, retour au menu"
else
borg delete $borg_repo::$borg_archive | zenity --width=600 --progress --pulsate --auto-close
zenity --width=600 --info --text="Suppresion de l'archive $borg_archive terminée"
fi
elif [ "$choixmenu" = "is" ];then
# Information archive
if [ "$filter" = "" ];then
borg_archive=$(borg list --short $borg_repo | zenity --height=500 --window-icon=$HOME/.icons/borg.svg --list --title "Listes des archives" --column "Archive")
else
borg_archive=$(borg list --short $borg_repo | grep $filter | zenity --height=500 --window-icon=$HOME/.icons/borg.svg --list --title "Listes des archives" --column "Archive")
fi
if [ "$borg_archive" = "" ];then
zenity --width=600 --info --text "Aucune archive choisie, retour au menu"
else
zenity --width=600 --info --text="$(borg info $borg_repo::$borg_archive)" | zenity --width=600 --progress --pulsate --auto-close
fi
elif [ "$choixmenu" = "fi" ];then
#Filtre
filter=$(zenity --entry)
elif [ "$choixmenu" = "id" ];then
# Information sur le dépôt
zenity --width=600 --info --text="$(borg info $borg_repo)" | zenity --width=600 --progress --pulsate --auto-close --title="Récupération des informations..."
elif [ "$choixmenu" = "ap" ];then
# Afficher le profil
zenity --width=600 --height=400 --info --text="$(cd $dossierprofil && cat $fichierprofil)"
elif [ "$choixmenu" = "" ];then
zenity --width=600 --info --text="Aucun choix, retour au menu."
fi
done