diff --git a/files_to_inject/preseeds/install_gaming.sh b/files_to_inject/preseeds/install_gaming.sh index 1baa8f8..af79506 100755 --- a/files_to_inject/preseeds/install_gaming.sh +++ b/files_to_inject/preseeds/install_gaming.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Gaming Installer pour Debian +# Debian Gaming Deployment Tool # Copyright (C) 2025 Philippe Favre # # This program is free software: you can redistribute it and/or modify @@ -16,11 +16,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Gaming Debian Installateur - Script d'installation gaming avec interface graphique pour Debian +# Debian Gaming Deployment Tool - Script d'installation gaming avec interface graphique pour Debian # Permet à l'utilisateur de choisir quoi installer via une fenêtre # Configuration des logs d'erreur -LOG_FILE="./gaming_installer_$(date +%Y%m%d_%H%M%S).log" +LOG_FILE="./gaming_installer.log" # Variable globale pour stocker le mot de passe sudo GLOBAL_SUDO_PASSWORD="" @@ -30,6 +30,10 @@ BATCH_INSTALL_MODE=false BATCH_TOTAL_APPS=0 BATCH_CURRENT_APP=0 +# Tableau pour stocker les applications installées avec succès +INSTALLED_APPS=() +INSTALLATION_MESSAGES=() + # Initialiser le fichier de log initialize_log() { # Vérifier les permissions d'écriture sur le répertoire @@ -40,7 +44,7 @@ initialize_log() { # Créer le fichier de log avec du contenu initial { - echo "=== Gaming Debian Installateur Log - Démarré le $(date) ===" + echo "=== Debian Gaming Deployment Tool Log - Démarré le $(date) ===" echo "Fichier de log: $LOG_FILE" echo "Utilisateur: $(whoami)" echo "Répertoire de travail: $(pwd)" @@ -69,38 +73,63 @@ TIMEOUT_APT=180 # 3 minutes pour les commandes apt # Fonction pour afficher les logs en cas d'erreur show_error_logs() { local error_message="$1" - local show_logs="${2:-true}" - # D'abord afficher l'erreur, puis demander si l'utilisateur veut voir les logs - zenity --error --title="Erreur" --text="$error_message" - - if [ "$show_logs" = "true" ] && [ -f "$LOG_FILE" ]; then - if zenity --question --title="Voir les logs" --text="Voulez-vous consulter les logs d'erreur pour plus de détails ?"; then - # Vérifier si le fichier de log existe et contient des données - if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then - # Afficher les logs dans une fenêtre scrollable avec le contenu complet - zenity --text-info \ - --title="Logs d'erreur - $error_message" \ - --filename="$LOG_FILE" \ - --width=800 --height=550 \ - --no-wrap - else - # Informations de débogage pour le fichier de log - local log_info="" - if [ ! -f "$LOG_FILE" ]; then - log_info="Le fichier de log n'existe pas." - elif [ ! -s "$LOG_FILE" ]; then - log_info="Le fichier de log existe mais est vide." - else - log_info="Problème inconnu avec le fichier de log." - fi - - log_info="$log_info\n\nFichier de log : $LOG_FILE" - log_info="$log_info\nTaille du fichier : $(ls -la "$LOG_FILE" 2>/dev/null || echo "N/A")" - - zenity --info --title="Logs vides" --text="$log_info" - fi + # Afficher directement les logs sans demander de confirmation + if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then + # Afficher les logs dans une fenêtre scrollable avec le contenu complet + zenity 2>/dev/null --text-info \ + --title="Journaux - $error_message" \ + --filename="$LOG_FILE" \ + --width=800 --height=550 \ + --no-wrap + else + # Informations de débogage pour le fichier de log + local log_info="" + if [ ! -f "$LOG_FILE" ]; then + log_info="Le fichier de log n'existe pas." + elif [ ! -s "$LOG_FILE" ]; then + log_info="Le fichier de log existe mais est vide." + else + log_info="Problème inconnu avec le fichier de log." fi + + log_info="$log_info\n\nFichier de log : $LOG_FILE" + log_info="$log_info\nTaille du fichier : $(ls -la "$LOG_FILE" 2>/dev/null || echo "N/A")" + + zenity 2>/dev/null --info --title="Journaux vides - $error_message" --text="$log_info" + fi +} + +# Fonction pour afficher le récapitulatif des installations +show_installation_summary() { + if [ ${#INSTALLED_APPS[@]} -eq 0 ]; then + zenity 2>/dev/null --warning --title="Installation incomplète" --text="Aucune application n'a été installée." --extra-button="Voir les logs" + if [ $? -eq 1 ]; then + show_error_logs "Logs d'installation - Aucune installation" + fi + return + fi + + local summary_text="=== RÉCAPITULATIF DES INSTALLATIONS ===\n\n" + summary_text+="✅ ${#INSTALLED_APPS[@]} application(s) installée(s) avec succès :\n\n" + + for i in "${!INSTALLED_APPS[@]}"; do + summary_text+="• ${INSTALLED_APPS[$i]}\n" + done + + + # Ajout des notes importantes si certaines apps sont installées + if [[ " ${INSTALLED_APPS[*]} " =~ " Flatpak + Flathub " ]]; then + summary_text+="\n📝 Note : Redémarrage de session recommandé pour Flatpak\n" + fi + + if [[ " ${INSTALLED_APPS[*]} " =~ " Drivers NVIDIA " ]]; then + summary_text+="\n🔄 Important : Redémarrage système requis pour les drivers NVIDIA\n" + fi + + zenity 2>/dev/null --info --title="Installation achevée" --text="$summary_text" --width=500 --extra-button="Voir les logs" + if [ $? -eq 1 ]; then + show_error_logs "Logs d'installation" fi } @@ -161,7 +190,7 @@ check_sudo_password() { echo "$password" | sudo -S true 2>/dev/null if [ $? -ne 0 ]; then log_error "Mot de passe sudo incorrect" - zenity --error --title="Erreur d'authentification" --text="Mot de passe sudo incorrect." + zenity 2>/dev/null --error --title="Erreur d'authentification" --text="Mot de passe administrateur incorrect." return 1 fi return 0 @@ -179,7 +208,7 @@ get_global_sudo_password() { fi # Demander le mot de passe sudo pour toutes les installations - GLOBAL_SUDO_PASSWORD=$(zenity --password --title="Authentification - Gaming Debian Installateur" --text="Mot de passe sudo requis pour installer :\n$app_list") + GLOBAL_SUDO_PASSWORD=$(zenity 2>/dev/null --password --title="Authentification - Debian Gaming Deployment Tool" --text="Mot de passe administrateur requis pour l'installation :\n$app_list") if [ $? -eq 1 ]; then return 1 @@ -201,7 +230,7 @@ use_global_password_or_ask() { # Si le mot de passe global n'est pas défini, demander un nouveau if [ -z "$GLOBAL_SUDO_PASSWORD" ]; then - password=$(zenity --password --title="Authentification - Installation $app_name" --text="Mot de passe sudo requis pour installer $app_name:") + password=$(zenity 2>/dev/null --password --title="Authentification - Installation de $app_name" --text="Mot de passe administrateur requis pour installer $app_name :") if [ $? -eq 1 ]; then return 1 @@ -231,8 +260,8 @@ start_batch_install() { log_info "Mode installation groupée activé pour $app_count applications" # Afficher une notification de début au lieu d'une barre de progression complexe - zenity --info --timeout=3 \ - --title="Gaming Debian Installateur" \ + zenity 2>/dev/null --info --timeout=3 \ + --title="Debian Gaming Deployment Tool" \ --text="Installation de $app_count applications en cours...\n\nApplications sélectionnées:$app_list" & } @@ -265,6 +294,43 @@ end_batch_install() { fi } +# Fonction pour confirmer avant de continuer +confirm_continue() { + local message="$1" + local title="${2:-Confirmation}" + + if ! zenity 2>/dev/null --question --title="$title" --text="$message\n\nVoulez-vous continuer ?"; then + exit 0 + fi +} + +# Fonction pour afficher un message et attendre validation +show_message_and_wait() { + local message="$1" + local title="${2:-Information}" + + zenity 2>/dev/null --info --title="$title" --text="$message\n\nCliquez sur OK pour continuer." +} + +# Fonction pour désinstaller sans confirmation supplémentaire +uninstall_with_progress() { + local component="$1" + local password="$2" + local app_name="$3" + local uninstall_function="$4" + + log_info "Début de la désinstallation de $app_name via $uninstall_function" + + # Exécuter la désinstallation + if $uninstall_function "$password"; then + log_info "Désinstallation de $app_name terminée avec succès" + return 0 + else + log_error "Échec de la désinstallation de $app_name" + return 1 + fi +} + # Fonction pour gérer l'affichage de progression (individuelle ou groupée) show_progress() { local app_name="$1" @@ -281,17 +347,17 @@ show_progress() { fi } -# Fonction wrapper pour zenity progress en mode individuel +# Fonction wrapper pour zenity 2>/dev/null progress en mode individuel run_individual_progress() { local app_name="$1" local commands="$2" if [ "$BATCH_INSTALL_MODE" = "true" ]; then - # En mode groupé, exécuter directement les commandes sans zenity progress + # En mode groupé, exécuter directement les commandes sans zenity 2>/dev/null progress eval "$commands" else - # En mode individuel, utiliser zenity progress - eval "$commands" | zenity --progress \ + # En mode individuel, utiliser zenity 2>/dev/null progress + eval "$commands" | zenity 2>/dev/null --progress \ --title="Installation de $app_name" \ --text="Initialisation..." \ --percentage=0 \ @@ -300,10 +366,10 @@ run_individual_progress() { fi } -# Vérifier si zenity est installé, sinon l'installer +# Vérifier si zenity 2>/dev/null est installé, sinon l'installer check_zenity() { - if ! command -v zenity &> /dev/null; then - echo "Installation de zenity pour l'interface graphique..." + if ! command -v zenity 2>/dev/null &> /dev/null; then + echo "Installation de zenity 2>/dev/null pour l'interface graphique..." apt-get update apt-get install -y zenity fi @@ -340,55 +406,34 @@ ensure_flathub_sources() { # Fonction pour afficher la fenêtre de sélection d'installation -show_install_selection() { - zenity --list --checklist \ - --title="Gaming Debian Installateur" \ - --text="Sélectionnez les composants à installer :" \ - --column="Installer" --column="Composant" --column="Description" \ - --width=600 --height=450 \ +show_unified_selection() { + zenity 2>/dev/null --list --checklist \ + --title="Debian Gaming Deployment Tool" \ + --text="Sélectionnez les applications puis choisissez l'action :" \ + --column="Sélection" --column="Application" --column="Type" --column="Description" \ + --width=1000 --height=600 \ --ok-label="Installer" \ --extra-button="Désinstaller" \ - FALSE "steam" "🎮 Steam - Plateforme gaming Valve" \ - FALSE "heroic" "🎮 Heroic - Epic Games & GOG" \ - FALSE "lutris" "🎮 Lutris - Gestionnaire de jeux" \ - FALSE "utils" "⚡ Utilitaires Gaming - Performance & monitoring" \ - FALSE "wine" "🍷 Wine + Winetricks - Compatibilité Windows" \ - FALSE "bottles" "🍷 Bottles - Gestionnaire Wine moderne (Flatpak)" \ - FALSE "retroarch" "🕹️ RetroArch - Multi-émulateur (Flatpak)" \ - FALSE "discord" "💬 Discord - Chat vocal & texte (Flatpak)" \ - FALSE "vesktop" "💬 Vesktop - Client Discord alternatif (Flatpak)" \ - FALSE "teamspeak" "💬 TeamSpeak - Communication vocale (Flatpak)" \ - FALSE "mumble" "💬 Mumble - Communication vocale libre" \ - FALSE "flatpak" "📦 Flatpak + Flathub - Magasin d'applications" \ - FALSE "flatseal" "📦 Flatseal - Gestionnaire permissions Flatpak" \ - FALSE "gearlever" "📦 Gear Lever - Gestionnaire AppImage (Flatpak)" \ - FALSE "nvidia" "💻 NVIDIA + CUDA - Pilotes graphiques" + --cancel-label="Annuler" \ + --separator="|" \ + FALSE "nvidia" "💻 APT" "NVIDIA + CUDA - Pilotes graphiques professionnels" \ + FALSE "flatpak" "📦 APT" "Flatpak + Flathub - Gestionnaire d'applications universelles" \ + FALSE "steam" "🎮 APT" "Steam - Plateforme de jeux numériques Valve" \ + FALSE "heroic" "🎮 GitHub" "Heroic Game Launcher - Client Epic Games et GOG" \ + FALSE "lutris" "🎮 APT" "Lutris - Gestionnaire de bibliothèque de jeux" \ + FALSE "retroarch" "🕹️ Flatpak" "RetroArch - Plateforme d'émulation multi-systèmes" \ + FALSE "utils" "⚡ APT" "Utilitaires gaming - Monitoring des performances (FPS, CPU, GPU)" \ + FALSE "protonup" "🔄 Flatpak" "ProtonUp-Qt - Gestionnaire de versions Proton" \ + FALSE "wine" "🍷 APT" "Wine + Winetricks - Couche de compatibilité Windows" \ + FALSE "bottles" "🍷 Flatpak" "Bottles - Gestionnaire Wine moderne" \ + FALSE "discord" "💬 Flatpak" "Discord - Plateforme de communication gaming" \ + FALSE "vesktop" "💬 Flatpak" "Vesktop - Client Discord alternatif" \ + FALSE "teamspeak" "💬 Flatpak" "TeamSpeak - Communication vocale" \ + FALSE "mumble" "💬 APT" "Mumble - Communication vocale libre" \ + FALSE "flatseal" "🔧 Flatpak" "Flatseal - Gestionnaire permissions Flatpak" \ + FALSE "gearlever" "📦 Flatpak" "Gear Lever - Gestionnaire AppImage" } -# Fonction pour afficher la fenêtre de sélection de désinstallation -show_uninstall_selection() { - zenity --list --checklist \ - --title="Gaming Debian Installateur - Désinstallation" \ - --text="Sélectionnez les composants à désinstaller :" \ - --column="Désinstaller" --column="Composant" --column="Description" \ - --width=850 --height=550 \ - --ok-label="Désinstaller" \ - FALSE "steam" "🎮 Steam - Plateforme gaming Valve" \ - FALSE "heroic" "🎮 Heroic - Epic Games & GOG" \ - FALSE "lutris" "🎮 Lutris - Gestionnaire de jeux" \ - FALSE "utils" "⚡ Utilitaires Gaming - Performance & monitoring" \ - FALSE "wine" "🍷 Wine + Winetricks - Compatibilité Windows" \ - FALSE "bottles" "🍷 Bottles - Gestionnaire Wine moderne (Flatpak)" \ - FALSE "retroarch" "🕹️ RetroArch - Multi-émulateur (Flatpak)" \ - FALSE "discord" "💬 Discord - Chat vocal & texte (Flatpak)" \ - FALSE "vesktop" "💬 Vesktop - Client Discord alternatif (Flatpak)" \ - FALSE "teamspeak" "💬 TeamSpeak - Communication vocale (Flatpak)" \ - FALSE "mumble" "💬 Mumble - Communication vocale libre" \ - FALSE "flatpak" "📦 Flatpak + Flathub - Magasin d'applications" \ - FALSE "flatseal" "📦 Flatseal - Gestionnaire permissions Flatpak" \ - FALSE "gearlever" "📦 Gear Lever - Gestionnaire AppImage (Flatpak)" \ - FALSE "nvidia" "💻 NVIDIA + CUDA - Pilotes graphiques" -} # Fonction d'installation Steam install_steam() { @@ -398,7 +443,7 @@ install_steam() { if dpkg -l | grep -q "^ii.*steam-installer"; then log_info "steam-installer déjà installé" if [ "$BATCH_INSTALL_MODE" != "true" ]; then - zenity --info --title="Déjà installé" --text="steam-installer est déjà installé sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="steam-installer est déjà installé sur le système." fi return fi @@ -456,14 +501,14 @@ install_steam() { return 1 fi else - # Mode individuel: avec zenity progress + # Mode individuel: avec zenity 2>/dev/null progress ( install_steam_steps if [ $? -ne 0 ]; then echo "# Erreur lors de l'installation" exit 1 fi - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de steam-installer" \ --text="Initialisation..." \ --percentage=0 \ @@ -479,9 +524,8 @@ install_steam() { # Vérifier si l'installation a réussi if dpkg -l | grep -q "^ii.*steam-installer"; then log_info "Installation steam-installer réussie" - if [ "$BATCH_INSTALL_MODE" != "true" ]; then - zenity --info --title="Succès" --text="steam-installer a été installé avec succès !" - fi + INSTALLED_APPS+=("Steam") + INSTALLATION_MESSAGES+=("Steam a été installé avec succès") else log_error "steam-installer non trouvé après installation" if [ "$BATCH_INSTALL_MODE" != "true" ]; then @@ -491,6 +535,62 @@ install_steam() { fi } +# Fonction d'installation ProtonUp-Qt +install_protonup() { + log_info "Début de l'installation de ProtonUp-Qt" + + # Vérifier si ProtonUp-Qt est déjà installé + if flatpak list | grep -q "net.davidotek.pupgui2"; then + log_info "ProtonUp-Qt déjà installé" + zenity 2>/dev/null --info --title="Composant déjà présent" --text="ProtonUp-Qt est déjà installé sur le système." + return + fi + + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "ProtonUp-Qt"; then + return + fi + + ( + echo "40" ; echo "# Vérification des sources Flathub..." + if ! ensure_flathub_sources; then + echo "# Erreur lors de la configuration de Flathub" + exit 1 + fi + + echo "70" ; echo "# Installation de ProtonUp-Qt via Flatpak..." + echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub net.davidotek.pupgui2 >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de l'installation de ProtonUp-Qt" + echo "# Erreur lors de l'installation de ProtonUp-Qt" + exit 1 + fi + + echo "100" ; echo "# Vérification de l'installation..." + ) | zenity 2>/dev/null --progress \ + --title="Installation de ProtonUp-Qt" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + # Vérifier le code de sortie du processus + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de l'installation de ProtonUp-Qt" + return + fi + + # Vérifier si l'installation a réussi + if flatpak list | grep -q "net.davidotek.pupgui2"; then + log_info "Installation ProtonUp-Qt réussie" + INSTALLED_APPS+=("ProtonUp-Qt") + INSTALLATION_MESSAGES+=("ProtonUp-Qt a été installé avec succès via Flatpak") + else + log_error "ProtonUp-Qt non trouvé après installation" + show_error_logs "ProtonUp-Qt non trouvé après installation" + fi +} + # Fonction d'installation Lutris install_lutris() { log_info "Début de l'installation de Lutris" @@ -498,7 +598,7 @@ install_lutris() { # Vérifier si Lutris est déjà installé if dpkg -l | grep -q "^ii.*lutris" || command -v lutris &> /dev/null; then log_info "Lutris déjà installé" - zenity --info --title="Déjà installé" --text="Lutris est déjà installé sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="Lutris est déjà installé sur le système." return fi @@ -544,7 +644,7 @@ install_lutris() { fi echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Lutris" \ --text="Initialisation..." \ --percentage=0 \ @@ -560,7 +660,8 @@ install_lutris() { # Vérifier si l'installation a réussi if dpkg -l | grep -q "^ii.*lutris" || command -v lutris &> /dev/null; then log_info "Installation Lutris réussie" - zenity --info --title="Succès" --text="Lutris a été installé avec succès !" + INSTALLED_APPS+=("Lutris") + INSTALLATION_MESSAGES+=("Lutris a été installé avec succès") else log_error "Lutris non trouvé après installation" show_error_logs "Lutris non trouvé après installation" @@ -574,7 +675,7 @@ install_bottles() { # Vérifier si Bottles est déjà installé if command -v bottles &> /dev/null || flatpak list | grep -q "com.usebottles.bottles"; then log_info "Bottles déjà installé" - zenity --info --title="Déjà installé" --text="Bottles est déjà installé sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="Bottles est déjà installé sur le système." return fi @@ -599,7 +700,7 @@ install_bottles() { fi echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Bottles" \ --text="Initialisation..." \ --percentage=0 \ @@ -615,7 +716,8 @@ install_bottles() { # Vérifier si l'installation a réussi if flatpak list | grep -q "com.usebottles.bottles"; then log_info "Installation Bottles réussie" - zenity --info --title="Succès" --text="Bottles a été installé avec succès via Flatpak !" + INSTALLED_APPS+=("Bottles") + INSTALLATION_MESSAGES+=("Bottles a été installé avec succès via Flatpak") else log_error "Bottles non trouvé après installation" show_error_logs "Bottles non trouvé après installation" @@ -632,7 +734,7 @@ install_wine() { if [ "$wine_installed" = "oui" ] && [ "$winetricks_installed" = "oui" ]; then log_info "Wine et Winetricks déjà installés" - zenity --info --title="Déjà installés" --text="Wine et Winetricks sont déjà installés sur le système." + zenity 2>/dev/null --info --title="Composants déjà présents" --text="Wine et Winetricks sont déjà installés sur le système." return fi @@ -712,7 +814,7 @@ install_wine() { rm -f /tmp/winehq-archive.key echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Wine + Winetricks" \ --text="Initialisation..." \ --percentage=0 \ @@ -731,11 +833,12 @@ install_wine() { if [ "$wine_ok" = "✓" ] && [ "$winetricks_ok" = "✓" ]; then log_info "Installation Wine + Winetricks réussie" - zenity --info --title="Succès" --text="Wine + Winetricks ont été installés avec succès !" + INSTALLED_APPS+=("Wine + Winetricks") + INSTALLATION_MESSAGES+=("Wine + Winetricks ont été installés avec succès") else log_info "Installation partielle de Wine + Winetricks" message="Résultats de l'installation :\n\nWine: $wine_ok\nWinetricks: $winetricks_ok" - zenity --info --title="Installation partielle" --text="$message" + zenity 2>/dev/null --info --title="Installation partielle" --text="$message" if [ "$wine_ok" = "✗" ] || [ "$winetricks_ok" = "✗" ]; then show_error_logs "Installation partielle de Wine + Winetricks" fi @@ -749,7 +852,7 @@ install_retroarch() { # Vérifier si RetroArch est déjà installé if dpkg -l | grep -q "^ii.*retroarch" || command -v retroarch &> /dev/null || flatpak list | grep -q "org.libretro.RetroArch"; then log_info "RetroArch déjà installé" - zenity --info --title="Déjà installé" --text="RetroArch est déjà installé sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="RetroArch est déjà installé sur le système." return fi @@ -774,7 +877,7 @@ install_retroarch() { fi echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de RetroArch" \ --text="Initialisation..." \ --percentage=0 \ @@ -790,7 +893,8 @@ install_retroarch() { # Vérifier si l'installation a réussi if flatpak list | grep -q "org.libretro.RetroArch"; then log_info "Installation RetroArch réussie" - zenity --info --title="Succès" --text="RetroArch a été installé avec succès via Flatpak !" + INSTALLED_APPS+=("RetroArch") + INSTALLATION_MESSAGES+=("RetroArch a été installé avec succès via Flatpak") else log_error "RetroArch non trouvé après installation" show_error_logs "RetroArch non trouvé après installation" @@ -807,7 +911,7 @@ install_flatpak() { if [ "$flatpak_installed" = "oui" ] && [ "$flathub_configured" = "oui" ]; then log_info "Flatpak et Flathub déjà configurés" - zenity --info --title="Déjà configurés" --text="Flatpak et Flathub sont déjà installés et configurés sur le système." + zenity 2>/dev/null --info --title="Composants déjà configurés" --text="Flatpak et Flathub sont déjà installés et configurés sur le système." return fi @@ -840,7 +944,7 @@ install_flatpak() { fi echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Flatpak + Flathub" \ --text="Initialisation..." \ --percentage=0 \ @@ -859,11 +963,12 @@ install_flatpak() { if [ "$flatpak_ok" = "✓" ] && [ "$flathub_ok" = "✓" ]; then log_info "Installation Flatpak + Flathub réussie" - zenity --info --title="Succès" --text="Flatpak + Flathub ont été installés avec succès !\n\nRedémarrage de session recommandé pour l'intégration complète." + INSTALLED_APPS+=("Flatpak + Flathub") + INSTALLATION_MESSAGES+=("Flatpak + Flathub ont été installés avec succès (redémarrage de session recommandé)") else log_info "Installation partielle de Flatpak + Flathub" message="Résultats de l'installation :\n\nFlatpak: $flatpak_ok\nFlathub: $flathub_ok" - zenity --info --title="Installation partielle" --text="$message" + zenity 2>/dev/null --info --title="Installation partielle" --text="$message" if [ "$flatpak_ok" = "✗" ] || [ "$flathub_ok" = "✗" ]; then show_error_logs "Installation partielle de Flatpak + Flathub" fi @@ -878,7 +983,7 @@ install_flatseal() { if flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then log_info "Flatseal déjà installé via Flatpak" if [ "$BATCH_INSTALL_MODE" != "true" ]; then - zenity --info --title="Déjà installé" --text="Flatseal est déjà installé via Flatpak sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="Flatseal est déjà installé via Flatpak sur le système." fi return fi @@ -918,14 +1023,14 @@ install_flatseal() { return 1 fi else - # Mode individuel: avec zenity progress + # Mode individuel: avec zenity 2>/dev/null progress ( install_flatseal_steps if [ $? -ne 0 ]; then echo "# Erreur lors de l'installation" exit 1 fi - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Flatseal" \ --text="Initialisation..." \ --percentage=0 \ @@ -942,7 +1047,8 @@ install_flatseal() { if flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then log_info "Installation Flatseal réussie" if [ "$BATCH_INSTALL_MODE" != "true" ]; then - zenity --info --title="Succès" --text="Flatseal a été installé avec succès via Flatpak !\n\nUtilisez-le pour gérer les permissions de vos applications Flatpak." + INSTALLED_APPS+=("Flatseal") + INSTALLATION_MESSAGES+=("Flatseal a été installé avec succès via Flatpak") fi else log_error "Flatseal non trouvé après installation" @@ -960,7 +1066,7 @@ install_gearlever() { # Vérifier si Gear Lever est déjà installé if command -v gear-lever &> /dev/null || flatpak list | grep -q "it.mijorus.gearlever"; then log_info "Gear Lever déjà installé" - zenity --info --title="Déjà installé" --text="Gear Lever est déjà installé sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="Gear Lever est déjà installé sur le système." return fi @@ -985,7 +1091,7 @@ install_gearlever() { fi echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Gear Lever" \ --text="Initialisation..." \ --percentage=0 \ @@ -1001,7 +1107,8 @@ install_gearlever() { # Vérifier si l'installation a réussi if flatpak list | grep -q "it.mijorus.gearlever"; then log_info "Installation Gear Lever réussie" - zenity --info --title="Succès" --text="Gear Lever a été installé avec succès via Flatpak !\n\nUtilisez-le pour gérer facilement vos AppImages." + INSTALLED_APPS+=("Gear Lever") + INSTALLATION_MESSAGES+=("Gear Lever a été installé avec succès via Flatpak") else log_error "Gear Lever non trouvé après installation" show_error_logs "Gear Lever non trouvé après installation" @@ -1015,7 +1122,7 @@ install_discord() { # Vérifier si Discord est déjà installé if command -v discord &> /dev/null || flatpak list | grep -q "com.discordapp.Discord"; then log_info "Discord déjà installé" - zenity --info --title="Déjà installé" --text="Discord est déjà installé sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="Discord est déjà installé sur le système." return fi @@ -1040,7 +1147,7 @@ install_discord() { fi echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Discord" \ --text="Initialisation..." \ --percentage=0 \ @@ -1056,7 +1163,8 @@ install_discord() { # Vérifier si l'installation a réussi if flatpak list | grep -q "com.discordapp.Discord"; then log_info "Installation Discord réussie" - zenity --info --title="Succès" --text="Discord a été installé avec succès via Flatpak !" + INSTALLED_APPS+=("Discord") + INSTALLATION_MESSAGES+=("Discord a été installé avec succès via Flatpak") else log_error "Discord non trouvé après installation" show_error_logs "Discord non trouvé après installation" @@ -1070,7 +1178,7 @@ install_vesktop() { # Vérifier si Vesktop est déjà installé via Flatpak if flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then log_info "Vesktop déjà installé via Flatpak" - zenity --info --title="Déjà installé" --text="Vesktop est déjà installé via Flatpak sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="Vesktop est déjà installé via Flatpak sur le système." return fi @@ -1095,7 +1203,7 @@ install_vesktop() { fi echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Vesktop" \ --text="Initialisation..." \ --percentage=0 \ @@ -1111,7 +1219,8 @@ install_vesktop() { # Vérifier si l'installation a réussi if flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then log_info "Installation Vesktop réussie" - zenity --info --title="Succès" --text="Vesktop a été installé avec succès via Flatpak !\n\nLancez-le depuis le menu des applications ou avec :\nflatpak run dev.vencord.Vesktop" + INSTALLED_APPS+=("Vesktop") + INSTALLATION_MESSAGES+=("Vesktop a été installé avec succès via Flatpak") else log_error "Vesktop non trouvé après installation" show_error_logs "Vesktop non trouvé après installation" @@ -1125,7 +1234,7 @@ install_teamspeak() { # Vérifier si TeamSpeak est déjà installé via Flatpak if flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then log_info "TeamSpeak déjà installé via Flatpak" - zenity --info --title="Déjà installé" --text="TeamSpeak est déjà installé via Flatpak sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="TeamSpeak est déjà installé via Flatpak sur le système." return fi @@ -1150,7 +1259,7 @@ install_teamspeak() { fi echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de TeamSpeak" \ --text="Initialisation..." \ --percentage=0 \ @@ -1166,7 +1275,8 @@ install_teamspeak() { # Vérifier si l'installation a réussi if flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then log_info "Installation TeamSpeak réussie" - zenity --info --title="Succès" --text="TeamSpeak a été installé avec succès via Flatpak !\n\nLancez-le depuis le menu des applications ou avec :\nflatpak run com.teamspeak.TeamSpeak3" + INSTALLED_APPS+=("TeamSpeak") + INSTALLATION_MESSAGES+=("TeamSpeak a été installé avec succès via Flatpak") else log_error "TeamSpeak non trouvé après installation" show_error_logs "TeamSpeak non trouvé après installation" @@ -1181,7 +1291,7 @@ install_mumble() { if dpkg -l | grep -q "^ii.*mumble" || command -v mumble &> /dev/null; then log_info "Mumble déjà installé" if [ "$BATCH_INSTALL_MODE" != "true" ]; then - zenity --info --title="Déjà installé" --text="Mumble est déjà installé sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="Mumble est déjà installé sur le système." fi return fi @@ -1225,14 +1335,14 @@ install_mumble() { return 1 fi else - # Mode individuel: avec zenity progress + # Mode individuel: avec zenity 2>/dev/null progress ( install_mumble_steps if [ $? -ne 0 ]; then echo "# Erreur lors de l'installation" exit 1 fi - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Mumble" \ --text="Initialisation..." \ --percentage=0 \ @@ -1249,7 +1359,8 @@ install_mumble() { if dpkg -l | grep -q "^ii.*mumble" || command -v mumble &> /dev/null; then log_info "Installation Mumble réussie" if [ "$BATCH_INSTALL_MODE" != "true" ]; then - zenity --info --title="Succès" --text="Mumble a été installé avec succès !\n\nLancez-le depuis le menu des applications." + INSTALLED_APPS+=("Mumble") + INSTALLATION_MESSAGES+=("Mumble a été installé avec succès") fi else log_error "Mumble non trouvé après installation" @@ -1267,7 +1378,7 @@ install_heroic() { # Vérifier si Heroic Game Launcher est déjà installé if dpkg -l | grep -q "^ii.*heroic" || command -v heroic &> /dev/null; then log_info "Heroic Game Launcher déjà installé" - zenity --info --title="Déjà installé" --text="Heroic Game Launcher est déjà installé sur le système." + zenity 2>/dev/null --info --title="Composant déjà présent" --text="Heroic Game Launcher est déjà installé sur le système." return fi @@ -1319,7 +1430,7 @@ install_heroic() { rm -f /tmp/heroic.deb echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation de Heroic Game Launcher" \ --text="Initialisation..." \ --percentage=0 \ @@ -1335,7 +1446,8 @@ install_heroic() { # Vérifier si l'installation a réussi if dpkg -l | grep -q "^ii.*heroic" || command -v heroic &> /dev/null; then log_info "Installation Heroic Game Launcher réussie" - zenity --info --title="Succès" --text="Heroic Game Launcher a été installé avec succès !" + INSTALLED_APPS+=("Heroic Game Launcher") + INSTALLATION_MESSAGES+=("Heroic Game Launcher a été installé avec succès") else log_error "Heroic Game Launcher non trouvé après installation" show_error_logs "Heroic Game Launcher non trouvé après installation" @@ -1349,7 +1461,7 @@ install_nvidia() { # Vérifier si les drivers NVIDIA sont déjà installés if dpkg -l | grep -q "^ii.*nvidia-open" || dpkg -l | grep -q "^ii.*cuda-toolkit"; then log_info "Drivers NVIDIA déjà installés" - zenity --info --title="Déjà installé" --text="Les drivers NVIDIA ou CUDA sont déjà installés sur le système." + zenity 2>/dev/null --info --title="Composants déjà présents" --text="Les drivers NVIDIA ou CUDA sont déjà installés sur le système." return fi @@ -1414,7 +1526,7 @@ install_nvidia() { rm -f /tmp/cuda-keyring_1.1-1_all.deb echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation des drivers NVIDIA" \ --text="Initialisation..." \ --percentage=0 \ @@ -1430,7 +1542,8 @@ install_nvidia() { # Vérifier si l'installation a réussi if dpkg -l | grep -q "^ii.*nvidia-open" && dpkg -l | grep -q "^ii.*cuda-toolkit"; then log_info "Installation drivers NVIDIA réussie" - zenity --info --title="Succès" --text="Les drivers NVIDIA ont été installés avec succès !\nUn REDÉMARRAGE est requis pour les activer." + INSTALLED_APPS+=("Drivers NVIDIA") + INSTALLATION_MESSAGES+=("Les drivers NVIDIA ont été installés avec succès (redémarrage requis)") else log_error "Drivers NVIDIA non trouvés après installation" show_error_logs "Drivers NVIDIA non trouvés après installation" @@ -1448,7 +1561,7 @@ install_utils() { if [ "$gamemode_installed" = "oui" ] && [ "$mangohud_installed" = "oui" ] && [ "$goverlay_installed" = "oui" ]; then log_info "Tous les utilitaires gaming déjà installés" - zenity --info --title="Déjà installés" --text="Tous les utilitaires gaming sont déjà installés sur le système." + zenity 2>/dev/null --info --title="Composants déjà présents" --text="Tous les utilitaires gaming sont déjà installés sur le système." return fi @@ -1483,7 +1596,7 @@ install_utils() { check_apt_success $goverlay_success "goverlay" "installation" echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Installation des utilitaires gaming" \ --text="Initialisation..." \ --percentage=0 \ @@ -1497,18 +1610,18 @@ install_utils() { if [ "$gamemode_ok" = "✓" ] && [ "$mangohud_ok" = "✓" ] && [ "$goverlay_ok" = "✓" ]; then log_info "Installation complète des utilitaires gaming réussie" - zenity --info --title="Succès" --text="Tous les utilitaires gaming ont été installés avec succès !" + # Le récapitulatif sera affiché à la fin else log_info "Installation partielle des utilitaires gaming" message="Résultats de l'installation :\n\nGamemode: $gamemode_ok\nMangoHUD: $mangohud_ok\nGOverlay: $goverlay_ok" if [ "$gamemode_ok" = "✗" ] || [ "$mangohud_ok" = "✗" ] || [ "$goverlay_ok" = "✗" ]; then # Afficher d'abord le message puis proposer les logs - zenity --info --title="Installation partielle" --text="$message" - if zenity --question --title="Voir les logs" --text="Certains utilitaires ont échoué.\nVoulez-vous consulter les logs d'erreur ?"; then + zenity 2>/dev/null --info --title="Installation partielle" --text="$message" + if zenity 2>/dev/null --question --title="Consultation des journaux" --text="Certains utilitaires ont échoué.\nSouhaitez-vous consulter les journaux d'erreur ?"; then show_error_logs "Installation partielle des utilitaires gaming" fi else - zenity --info --title="Installation partielle" --text="$message" + zenity 2>/dev/null --info --title="Installation partielle" --text="$message" fi fi } @@ -1520,17 +1633,17 @@ uninstall_steam() { # Vérifier si steam-installer est installé if ! dpkg -l | grep -q "^ii.*steam-installer"; then log_info "steam-installer non installé" - zenity --info --title="Non installé" --text="steam-installer n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Composant non présent" --text="steam-installer n'est pas installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller steam-installer ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller steam-installer ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation steam-installer" --text="Mot de passe sudo requis pour désinstaller steam-installer:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation steam-installer" --text="Mot de passe sudo requis pour désinstaller steam-installer:") if [ $? -eq 1 ]; then return @@ -1556,7 +1669,7 @@ uninstall_steam() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de steam-installer" \ --text="Initialisation..." \ --percentage=0 \ @@ -1572,13 +1685,140 @@ uninstall_steam() { # Vérifier si la désinstallation a réussi if ! dpkg -l | grep -q "^ii.*steam-installer"; then log_info "Désinstallation steam-installer réussie" - zenity --info --title="Succès" --text="steam-installer a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="steam-installer a été désinstallé avec succès !" else log_error "Échec de la désinstallation de steam-installer" show_error_logs "Échec de la désinstallation de steam-installer" fi } +# Version silencieuse pour désinstallation multiple +uninstall_steam_silent() { + local password="$1" + log_info "Début de la désinstallation de steam-installer (mode silencieux)" + + # Vérifier si steam-installer est installé + log_info "Vérification de l'installation de steam-installer..." + if ! dpkg -l | grep -q "^ii.*steam-installer"; then + log_info "steam-installer n'est pas installé" + return 0 + fi + log_info "steam-installer est installé, procédure de désinstallation" + + # Désinstaller sans confirmation ni interface graphique + log_info "Exécution de la commande de désinstallation..." + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y steam-installer >> "$LOG_FILE" 2>&1 + local apt_result=$? + log_info "Code de retour de apt-get purge: $apt_result" + + if ! check_apt_success $apt_result "steam-installer" "désinstallation"; then + log_error "Échec de la désinstallation de steam-installer (code: $apt_result)" + return 1 + fi + + # Nettoyage des paquets orphelins + log_info "Nettoyage des paquets orphelins..." + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + + # Vérifier si la désinstallation a réussi + log_info "Vérification finale de la désinstallation..." + if ! dpkg -l | grep -q "^ii.*steam-installer"; then + log_info "steam-installer désinstallé avec succès" + return 0 + else + log_error "steam-installer toujours présent après désinstallation" + return 1 + fi +} + +# Fonction de désinstallation ProtonUp-Qt +uninstall_protonup() { + log_info "Début de la désinstallation de ProtonUp-Qt" + + # Vérifier si ProtonUp-Qt est installé + if ! flatpak list | grep -q "net.davidotek.pupgui2"; then + log_info "ProtonUp-Qt non installé" + zenity 2>/dev/null --info --title="Non installé" --text="ProtonUp-Qt n'est pas installé sur le système." + return + fi + + # Demander confirmation + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller ProtonUp-Qt ?"; then + return + fi + + # Demander le mot de passe sudo + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation ProtonUp-Qt" --text="Mot de passe sudo requis pour désinstaller ProtonUp-Qt:") + + if [ $? -eq 1 ]; then + return + fi + + # Vérifier le mot de passe sudo + if ! check_sudo_password "$password"; then + return + fi + + ( + echo "50" ; echo "# Désinstallation de ProtonUp-Qt..." + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y net.davidotek.pupgui2 >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de ProtonUp-Qt" + echo "# Erreur lors de la désinstallation de ProtonUp-Qt" + exit 1 + fi + + echo "100" ; echo "# Vérification de la désinstallation..." + ) | zenity 2>/dev/null --progress \ + --title="Désinstallation de ProtonUp-Qt" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + # Vérifier le code de sortie du processus + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de la désinstallation de ProtonUp-Qt" + return + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "net.davidotek.pupgui2"; then + log_info "Désinstallation ProtonUp-Qt réussie" + zenity 2>/dev/null --info --title="Succès" --text="ProtonUp-Qt a été désinstallé avec succès !" + else + log_error "Échec de la désinstallation de ProtonUp-Qt" + show_error_logs "Échec de la désinstallation de ProtonUp-Qt" + fi +} + +uninstall_protonup_silent() { + local password="$1" + log_info "Début de la désinstallation de ProtonUp-Qt (mode silencieux)" + + # Vérifier si ProtonUp-Qt est installé + if ! flatpak list | grep -q "net.davidotek.pupgui2"; then + log_info "ProtonUp-Qt non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y net.davidotek.pupgui2 >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de ProtonUp-Qt" + return 1 + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "net.davidotek.pupgui2"; then + log_info "ProtonUp-Qt désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de ProtonUp-Qt" + return 1 + fi +} + # Fonction de désinstallation Bottles uninstall_bottles() { log_info "Début de la désinstallation de Bottles" @@ -1586,17 +1826,17 @@ uninstall_bottles() { # Vérifier si Bottles est installé if ! flatpak list | grep -q "com.usebottles.bottles"; then log_info "Bottles non installé" - zenity --info --title="Non installé" --text="Bottles n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Bottles n'est pas installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Bottles ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Bottles ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Bottles" --text="Mot de passe sudo requis pour désinstaller Bottles:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Bottles" --text="Mot de passe sudo requis pour désinstaller Bottles:") if [ $? -eq 1 ]; then return @@ -1617,7 +1857,7 @@ uninstall_bottles() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Bottles" \ --text="Initialisation..." \ --percentage=0 \ @@ -1633,13 +1873,40 @@ uninstall_bottles() { # Vérifier si la désinstallation a réussi if ! flatpak list | grep -q "com.usebottles.bottles"; then log_info "Désinstallation Bottles réussie" - zenity --info --title="Succès" --text="Bottles a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Bottles a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Bottles" show_error_logs "Échec de la désinstallation de Bottles" fi } +uninstall_bottles_silent() { + local password="$1" + log_info "Début de la désinstallation de Bottles (mode silencieux)" + + # Vérifier si Bottles est installé + if ! flatpak list | grep -q "com.usebottles.bottles"; then + log_info "Bottles non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.usebottles.bottles >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de Bottles" + return 1 + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "com.usebottles.bottles"; then + log_info "Bottles désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Bottles" + return 1 + fi +} + # Fonction de désinstallation Wine + Winetricks uninstall_wine() { log_info "Début de la désinstallation de Wine + Winetricks" @@ -1650,17 +1917,17 @@ uninstall_wine() { if [ "$wine_installed" = "non" ] && [ "$winetricks_installed" = "non" ]; then log_info "Wine et Winetricks non installés" - zenity --info --title="Non installés" --text="Wine et Winetricks ne sont pas installés sur le système." + zenity 2>/dev/null --info --title="Non installés" --text="Wine et Winetricks ne sont pas installés sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Wine + Winetricks ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Wine + Winetricks ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Wine" --text="Mot de passe sudo requis pour désinstaller Wine + Winetricks:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Wine" --text="Mot de passe sudo requis pour désinstaller Wine + Winetricks:") if [ $? -eq 1 ]; then return @@ -1688,7 +1955,7 @@ uninstall_wine() { echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Wine + Winetricks" \ --text="Initialisation..." \ --percentage=0 \ @@ -1701,11 +1968,52 @@ uninstall_wine() { if [ "$wine_ok" = "✓" ] && [ "$winetricks_ok" = "✓" ]; then log_info "Désinstallation Wine + Winetricks réussie" - zenity --info --title="Succès" --text="Wine + Winetricks ont été désinstallés avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Wine + Winetricks ont été désinstallés avec succès !" else log_info "Désinstallation partielle de Wine + Winetricks" message="Résultats de la désinstallation :\n\nWine: $wine_ok\nWinetricks: $winetricks_ok" - zenity --info --title="Désinstallation partielle" --text="$message" + zenity 2>/dev/null --info --title="Désinstallation partielle" --text="$message" + fi +} + +uninstall_wine_silent() { + local password="$1" + log_info "Début de la désinstallation de Wine + Winetricks (mode silencieux)" + + # Vérifier si Wine et Winetricks sont installés + wine_installed=$(dpkg -l | grep -q "^ii.*winehq-stable\|^ii.*wine\b" && echo "oui" || echo "non") + winetricks_installed=$(command -v winetricks &> /dev/null && echo "oui" || echo "non") + + if [ "$wine_installed" = "non" ] && [ "$winetricks_installed" = "non" ]; then + log_info "Wine et Winetricks non installés" + return 0 + fi + + # Désinstaller Wine + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y winehq-stable wine* >> "$LOG_FILE" 2>&1 + wine_remove_result=$? + + # Désinstaller Winetricks + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y winetricks >> "$LOG_FILE" 2>&1 + winetricks_remove_result=$? + + # Logger les résultats individuels + check_apt_success $wine_remove_result "wine" "désinstallation" + check_apt_success $winetricks_remove_result "winetricks" "désinstallation" + + # Nettoyage des paquets orphelins + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + + # Vérifier si la désinstallation a réussi + wine_ok=$(dpkg -l | grep -q "^ii.*winehq-stable\|^ii.*wine\b" && echo "non" || echo "oui") + winetricks_ok=$(command -v winetricks &> /dev/null && echo "non" || echo "oui") + + if [ "$wine_ok" = "oui" ] && [ "$winetricks_ok" = "oui" ]; then + log_info "Désinstallation Wine + Winetricks réussie" + return 0 + else + log_info "Désinstallation partielle de Wine + Winetricks" + return 1 fi } @@ -1716,17 +2024,17 @@ uninstall_retroarch() { # Vérifier si RetroArch est installé if ! flatpak list | grep -q "org.libretro.RetroArch" && ! dpkg -l | grep -q "^ii.*retroarch"; then log_info "RetroArch non installé" - zenity --info --title="Non installé" --text="RetroArch n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="RetroArch n'est pas installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller RetroArch ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller RetroArch ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation RetroArch" --text="Mot de passe sudo requis pour désinstaller RetroArch:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation RetroArch" --text="Mot de passe sudo requis pour désinstaller RetroArch:") if [ $? -eq 1 ]; then return @@ -1747,7 +2055,7 @@ uninstall_retroarch() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de RetroArch" \ --text="Initialisation..." \ --percentage=0 \ @@ -1763,13 +2071,40 @@ uninstall_retroarch() { # Vérifier si la désinstallation a réussi if ! flatpak list | grep -q "org.libretro.RetroArch"; then log_info "Désinstallation RetroArch réussie" - zenity --info --title="Succès" --text="RetroArch a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="RetroArch a été désinstallé avec succès !" else log_error "Échec de la désinstallation de RetroArch" show_error_logs "Échec de la désinstallation de RetroArch" fi } +uninstall_retroarch_silent() { + local password="$1" + log_info "Début de la désinstallation de RetroArch (mode silencieux)" + + # Vérifier si RetroArch est installé + if ! flatpak list | grep -q "org.libretro.RetroArch" && ! dpkg -l | grep -q "^ii.*retroarch"; then + log_info "RetroArch non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y org.libretro.RetroArch >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de RetroArch" + return 1 + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "org.libretro.RetroArch"; then + log_info "RetroArch désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de RetroArch" + return 1 + fi +} + # Fonction de désinstallation Flatpak uninstall_flatpak() { log_info "Début de la désinstallation de Flatpak" @@ -1777,17 +2112,17 @@ uninstall_flatpak() { # Vérifier si Flatpak est installé if ! command -v flatpak &> /dev/null; then log_info "Flatpak non installé" - zenity --info --title="Non installé" --text="Flatpak n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Flatpak n'est pas installé sur le système." return fi # Demander confirmation avec avertissement - if ! zenity --question --title="Confirmation - ATTENTION" --text="ATTENTION: La désinstallation de Flatpak supprimera TOUTES les applications Flatpak installées.\n\nÊtes-vous sûr de vouloir continuer ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation - ATTENTION" --text="ATTENTION: La désinstallation de Flatpak supprimera TOUTES les applications Flatpak installées.\n\nÊtes-vous sûr de vouloir continuer ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Flatpak" --text="Mot de passe sudo requis pour désinstaller Flatpak:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Flatpak" --text="Mot de passe sudo requis pour désinstaller Flatpak:") if [ $? -eq 1 ]; then return @@ -1810,7 +2145,7 @@ uninstall_flatpak() { echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Flatpak" \ --text="Initialisation..." \ --percentage=0 \ @@ -1826,13 +2161,43 @@ uninstall_flatpak() { # Vérifier si la désinstallation a réussi if ! command -v flatpak &> /dev/null; then log_info "Désinstallation Flatpak réussie" - zenity --info --title="Succès" --text="Flatpak a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Flatpak a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Flatpak" show_error_logs "Échec de la désinstallation de Flatpak" fi } +uninstall_flatpak_silent() { + local password="$1" + log_info "Début de la désinstallation de Flatpak (mode silencieux)" + + # Vérifier si Flatpak est installé + if ! command -v flatpak &> /dev/null; then + log_info "Flatpak non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y flatpak >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "flatpak" "désinstallation"; then + log_error "Échec de la désinstallation de Flatpak" + return 1 + fi + + # Nettoyage des paquets orphelins + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + + # Vérifier si la désinstallation a réussi + if ! command -v flatpak &> /dev/null; then + log_info "Flatpak désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Flatpak" + return 1 + fi +} + # Fonction de désinstallation Gear Lever uninstall_gearlever() { log_info "Début de la désinstallation de Gear Lever" @@ -1840,17 +2205,17 @@ uninstall_gearlever() { # Vérifier si Gear Lever est installé if ! flatpak list | grep -q "it.mijorus.gearlever"; then log_info "Gear Lever non installé" - zenity --info --title="Non installé" --text="Gear Lever n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Gear Lever n'est pas installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Gear Lever ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Gear Lever ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Gear Lever" --text="Mot de passe sudo requis pour désinstaller Gear Lever:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Gear Lever" --text="Mot de passe sudo requis pour désinstaller Gear Lever:") if [ $? -eq 1 ]; then return @@ -1871,7 +2236,7 @@ uninstall_gearlever() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Gear Lever" \ --text="Initialisation..." \ --percentage=0 \ @@ -1887,13 +2252,40 @@ uninstall_gearlever() { # Vérifier si la désinstallation a réussi if ! flatpak list | grep -q "it.mijorus.gearlever"; then log_info "Désinstallation Gear Lever réussie" - zenity --info --title="Succès" --text="Gear Lever a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Gear Lever a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Gear Lever" show_error_logs "Échec de la désinstallation de Gear Lever" fi } +uninstall_gearlever_silent() { + local password="$1" + log_info "Début de la désinstallation de Gear Lever (mode silencieux)" + + # Vérifier si Gear Lever est installé + if ! flatpak list | grep -q "it.mijorus.gearlever"; then + log_info "Gear Lever non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y it.mijorus.gearlever >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de Gear Lever" + return 1 + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "it.mijorus.gearlever"; then + log_info "Gear Lever désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Gear Lever" + return 1 + fi +} + # Fonction de désinstallation Discord uninstall_discord() { log_info "Début de la désinstallation de Discord" @@ -1901,17 +2293,17 @@ uninstall_discord() { # Vérifier si Discord est installé if ! flatpak list | grep -q "com.discordapp.Discord" && ! command -v discord &> /dev/null; then log_info "Discord non installé" - zenity --info --title="Non installé" --text="Discord n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Discord n'est pas installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Discord ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Discord ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Discord" --text="Mot de passe sudo requis pour désinstaller Discord:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Discord" --text="Mot de passe sudo requis pour désinstaller Discord:") if [ $? -eq 1 ]; then return @@ -1932,7 +2324,7 @@ uninstall_discord() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Discord" \ --text="Initialisation..." \ --percentage=0 \ @@ -1948,13 +2340,40 @@ uninstall_discord() { # Vérifier si la désinstallation a réussi if ! flatpak list | grep -q "com.discordapp.Discord"; then log_info "Désinstallation Discord réussie" - zenity --info --title="Succès" --text="Discord a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Discord a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Discord" show_error_logs "Échec de la désinstallation de Discord" fi } +uninstall_discord_silent() { + local password="$1" + log_info "Début de la désinstallation de Discord (mode silencieux)" + + # Vérifier si Discord est installé + if ! flatpak list | grep -q "com.discordapp.Discord" && ! command -v discord &> /dev/null; then + log_info "Discord non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.discordapp.Discord >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de Discord" + return 1 + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "com.discordapp.Discord"; then + log_info "Discord désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Discord" + return 1 + fi +} + # Fonction de désinstallation Vesktop uninstall_vesktop() { log_info "Début de la désinstallation de Vesktop via Flatpak" @@ -1962,17 +2381,17 @@ uninstall_vesktop() { # Vérifier si Vesktop est installé via Flatpak if ! flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then log_info "Vesktop non installé via Flatpak" - zenity --info --title="Non installé" --text="Vesktop n'est pas installé via Flatpak sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Vesktop n'est pas installé via Flatpak sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Vesktop ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Vesktop ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Vesktop" --text="Mot de passe sudo requis pour désinstaller Vesktop:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Vesktop" --text="Mot de passe sudo requis pour désinstaller Vesktop:") if [ $? -eq 1 ]; then return @@ -1993,7 +2412,7 @@ uninstall_vesktop() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Vesktop" \ --text="Initialisation..." \ --percentage=0 \ @@ -2009,13 +2428,40 @@ uninstall_vesktop() { # Vérifier si la désinstallation a réussi if ! flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then log_info "Désinstallation Vesktop réussie" - zenity --info --title="Succès" --text="Vesktop a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Vesktop a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Vesktop" show_error_logs "Échec de la désinstallation de Vesktop" fi } +uninstall_vesktop_silent() { + local password="$1" + log_info "Début de la désinstallation de Vesktop (mode silencieux)" + + # Vérifier si Vesktop est installé via Flatpak + if ! flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then + log_info "Vesktop non installé via Flatpak" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y dev.vencord.Vesktop >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de Vesktop" + return 1 + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then + log_info "Vesktop désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Vesktop" + return 1 + fi +} + # Fonction de désinstallation TeamSpeak uninstall_teamspeak() { log_info "Début de la désinstallation de TeamSpeak via Flatpak" @@ -2023,17 +2469,17 @@ uninstall_teamspeak() { # Vérifier si TeamSpeak est installé via Flatpak if ! flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then log_info "TeamSpeak non installé via Flatpak" - zenity --info --title="Non installé" --text="TeamSpeak n'est pas installé via Flatpak sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="TeamSpeak n'est pas installé via Flatpak sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller TeamSpeak ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller TeamSpeak ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation TeamSpeak" --text="Mot de passe sudo requis pour désinstaller TeamSpeak:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation TeamSpeak" --text="Mot de passe sudo requis pour désinstaller TeamSpeak:") if [ $? -eq 1 ]; then return @@ -2054,7 +2500,7 @@ uninstall_teamspeak() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de TeamSpeak" \ --text="Initialisation..." \ --percentage=0 \ @@ -2070,13 +2516,40 @@ uninstall_teamspeak() { # Vérifier si la désinstallation a réussi if ! flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then log_info "Désinstallation TeamSpeak réussie" - zenity --info --title="Succès" --text="TeamSpeak a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="TeamSpeak a été désinstallé avec succès !" else log_error "Échec de la désinstallation de TeamSpeak" show_error_logs "Échec de la désinstallation de TeamSpeak" fi } +uninstall_teamspeak_silent() { + local password="$1" + log_info "Début de la désinstallation de TeamSpeak (mode silencieux)" + + # Vérifier si TeamSpeak est installé via Flatpak + if ! flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then + log_info "TeamSpeak non installé via Flatpak" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.teamspeak.TeamSpeak3 >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de TeamSpeak" + return 1 + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then + log_info "TeamSpeak désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de TeamSpeak" + return 1 + fi +} + # Fonction de désinstallation Mumble uninstall_mumble() { log_info "Début de la désinstallation de Mumble" @@ -2084,17 +2557,17 @@ uninstall_mumble() { # Vérifier si Mumble est installé if ! dpkg -l | grep -q "^ii.*mumble" && ! command -v mumble &> /dev/null; then log_info "Mumble non installé" - zenity --info --title="Non installé" --text="Mumble n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Mumble n'est pas installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Mumble ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Mumble ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Mumble" --text="Mot de passe sudo requis pour désinstaller Mumble:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Mumble" --text="Mot de passe sudo requis pour désinstaller Mumble:") if [ $? -eq 1 ]; then return @@ -2117,7 +2590,7 @@ uninstall_mumble() { echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Mumble" \ --text="Initialisation..." \ --percentage=0 \ @@ -2133,13 +2606,43 @@ uninstall_mumble() { # Vérifier si la désinstallation a réussi if ! dpkg -l | grep -q "^ii.*mumble" && ! command -v mumble &> /dev/null; then log_info "Désinstallation Mumble réussie" - zenity --info --title="Succès" --text="Mumble a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Mumble a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Mumble" show_error_logs "Échec de la désinstallation de Mumble" fi } +uninstall_mumble_silent() { + local password="$1" + log_info "Début de la désinstallation de Mumble (mode silencieux)" + + # Vérifier si Mumble est installé + if ! dpkg -l | grep -q "^ii.*mumble" && ! command -v mumble &> /dev/null; then + log_info "Mumble non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y mumble >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "mumble" "désinstallation"; then + log_error "Échec de la désinstallation de Mumble" + return 1 + fi + + # Nettoyage des paquets orphelins + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + + # Vérifier si la désinstallation a réussi + if ! dpkg -l | grep -q "^ii.*mumble" && ! command -v mumble &> /dev/null; then + log_info "Mumble désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Mumble" + return 1 + fi +} + # Fonction de désinstallation Flatseal uninstall_flatseal() { log_info "Début de la désinstallation de Flatseal via Flatpak" @@ -2147,17 +2650,17 @@ uninstall_flatseal() { # Vérifier si Flatseal est installé via Flatpak if ! flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then log_info "Flatseal non installé via Flatpak" - zenity --info --title="Non installé" --text="Flatseal n'est pas installé via Flatpak sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Flatseal n'est pas installé via Flatpak sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Flatseal ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Flatseal ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Flatseal" --text="Mot de passe sudo requis pour désinstaller Flatseal:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Flatseal" --text="Mot de passe sudo requis pour désinstaller Flatseal:") if [ $? -eq 1 ]; then return @@ -2178,7 +2681,7 @@ uninstall_flatseal() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Flatseal" \ --text="Initialisation..." \ --percentage=0 \ @@ -2194,13 +2697,40 @@ uninstall_flatseal() { # Vérifier si la désinstallation a réussi if ! flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then log_info "Désinstallation Flatseal réussie" - zenity --info --title="Succès" --text="Flatseal a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Flatseal a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Flatseal" show_error_logs "Échec de la désinstallation de Flatseal" fi } +uninstall_flatseal_silent() { + local password="$1" + log_info "Début de la désinstallation de Flatseal (mode silencieux)" + + # Vérifier si Flatseal est installé via Flatpak + if ! flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then + log_info "Flatseal non installé via Flatpak" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.github.tchx84.Flatseal >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de Flatseal" + return 1 + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then + log_info "Flatseal désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Flatseal" + return 1 + fi +} + # Fonction de désinstallation Lutris uninstall_lutris() { log_info "Début de la désinstallation de Lutris" @@ -2208,17 +2738,17 @@ uninstall_lutris() { # Vérifier si Lutris est installé if ! dpkg -l | grep -q "^ii.*lutris" && ! command -v lutris &> /dev/null; then log_info "Lutris non installé" - zenity --info --title="Non installé" --text="Lutris n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Lutris n'est pas installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Lutris ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Lutris ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Lutris" --text="Mot de passe sudo requis pour désinstaller Lutris:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Lutris" --text="Mot de passe sudo requis pour désinstaller Lutris:") if [ $? -eq 1 ]; then return @@ -2244,7 +2774,7 @@ uninstall_lutris() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Lutris" \ --text="Initialisation..." \ --percentage=0 \ @@ -2260,13 +2790,46 @@ uninstall_lutris() { # Vérifier si la désinstallation a réussi if ! dpkg -l | grep -q "^ii.*lutris" && ! command -v lutris &> /dev/null; then log_info "Désinstallation Lutris réussie" - zenity --info --title="Succès" --text="Lutris a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Lutris a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Lutris" show_error_logs "Échec de la désinstallation de Lutris" fi } +uninstall_lutris_silent() { + local password="$1" + log_info "Début de la désinstallation de Lutris (mode silencieux)" + + # Vérifier si Lutris est installé + if ! dpkg -l | grep -q "^ii.*lutris" && ! command -v lutris &> /dev/null; then + log_info "Lutris non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y lutris >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "lutris" "désinstallation"; then + log_error "Échec de la désinstallation de Lutris" + return 1 + fi + + # Nettoyage des paquets orphelins + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "paquets orphelins" "nettoyage"; then + log_info "Avertissement: Erreur lors du nettoyage des paquets orphelins" + fi + + # Vérifier si la désinstallation a réussi + if ! dpkg -l | grep -q "^ii.*lutris" && ! command -v lutris &> /dev/null; then + log_info "Lutris désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Lutris" + return 1 + fi +} + # Fonction de désinstallation Heroic Game Launcher uninstall_heroic() { log_info "Début de la désinstallation de Heroic Game Launcher" @@ -2274,17 +2837,17 @@ uninstall_heroic() { # Vérifier si Heroic est installé if ! dpkg -l | grep -q "^ii.*heroic" && ! command -v heroic &> /dev/null; then log_info "Heroic Game Launcher non installé" - zenity --info --title="Non installé" --text="Heroic Game Launcher n'est pas installé sur le système." + zenity 2>/dev/null --info --title="Non installé" --text="Heroic Game Launcher n'est pas installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Heroic Game Launcher ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Heroic Game Launcher ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation Heroic" --text="Mot de passe sudo requis pour désinstaller Heroic Game Launcher:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation Heroic" --text="Mot de passe sudo requis pour désinstaller Heroic Game Launcher:") if [ $? -eq 1 ]; then return @@ -2310,7 +2873,7 @@ uninstall_heroic() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation de Heroic Game Launcher" \ --text="Initialisation..." \ --percentage=0 \ @@ -2326,13 +2889,46 @@ uninstall_heroic() { # Vérifier si la désinstallation a réussi if ! dpkg -l | grep -q "^ii.*heroic" && ! command -v heroic &> /dev/null; then log_info "Désinstallation Heroic Game Launcher réussie" - zenity --info --title="Succès" --text="Heroic Game Launcher a été désinstallé avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Heroic Game Launcher a été désinstallé avec succès !" else log_error "Échec de la désinstallation de Heroic Game Launcher" show_error_logs "Échec de la désinstallation de Heroic Game Launcher" fi } +uninstall_heroic_silent() { + local password="$1" + log_info "Début de la désinstallation de Heroic Game Launcher (mode silencieux)" + + # Vérifier si Heroic est installé + if ! dpkg -l | grep -q "^ii.*heroic" && ! command -v heroic &> /dev/null; then + log_info "Heroic Game Launcher non installé" + return 0 + fi + + # Désinstaller sans confirmation ni interface graphique + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y heroic >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "heroic" "désinstallation"; then + log_error "Échec de la désinstallation de Heroic Game Launcher" + return 1 + fi + + # Nettoyage des paquets orphelins + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "paquets orphelins" "nettoyage"; then + log_info "Avertissement: Erreur lors du nettoyage des paquets orphelins" + fi + + # Vérifier si la désinstallation a réussi + if ! dpkg -l | grep -q "^ii.*heroic" && ! command -v heroic &> /dev/null; then + log_info "Heroic Game Launcher désinstallé avec succès" + return 0 + else + log_error "Échec de la désinstallation de Heroic Game Launcher" + return 1 + fi +} + # Fonction de désinstallation drivers NVIDIA uninstall_nvidia() { log_info "Début de la désinstallation des drivers NVIDIA" @@ -2340,17 +2936,17 @@ uninstall_nvidia() { # Vérifier si les drivers NVIDIA sont installés if ! dpkg -l | grep -q "^ii.*nvidia-open" && ! dpkg -l | grep -q "^ii.*cuda-toolkit"; then log_info "Drivers NVIDIA non installés" - zenity --info --title="Non installés" --text="Les drivers NVIDIA ne sont pas installés sur le système." + zenity 2>/dev/null --info --title="Non installés" --text="Les drivers NVIDIA ne sont pas installés sur le système." return fi # Demander confirmation avec avertissement - if ! zenity --question --title="Confirmation - ATTENTION" --text="ATTENTION: La désinstallation des drivers NVIDIA peut affecter votre affichage.\n\nÊtes-vous sûr de vouloir continuer ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation - ATTENTION" --text="ATTENTION: La désinstallation des drivers NVIDIA peut affecter votre affichage.\n\nÊtes-vous sûr de vouloir continuer ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation NVIDIA" --text="Mot de passe sudo requis pour désinstaller les drivers NVIDIA:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation NVIDIA" --text="Mot de passe sudo requis pour désinstaller les drivers NVIDIA:") if [ $? -eq 1 ]; then return @@ -2387,7 +2983,7 @@ uninstall_nvidia() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation des drivers NVIDIA" \ --text="Initialisation..." \ --percentage=0 \ @@ -2403,13 +2999,57 @@ uninstall_nvidia() { # Vérifier si la désinstallation a réussi if ! dpkg -l | grep -q "^ii.*nvidia-open" && ! dpkg -l | grep -q "^ii.*cuda-toolkit"; then log_info "Désinstallation drivers NVIDIA réussie" - zenity --info --title="Succès" --text="Les drivers NVIDIA ont été désinstallés avec succès !\nUn REDÉMARRAGE est recommandé." + zenity 2>/dev/null --info --title="Succès" --text="Les drivers NVIDIA ont été désinstallés avec succès !\nUn REDÉMARRAGE est recommandé." else log_error "Échec de la désinstallation des drivers NVIDIA" show_error_logs "Échec de la désinstallation des drivers NVIDIA" fi } +uninstall_nvidia_silent() { + local password="$1" + log_info "Début de la désinstallation des drivers NVIDIA (mode silencieux)" + + # Vérifier si les drivers NVIDIA sont installés + if ! dpkg -l | grep -q "^ii.*nvidia-open" && ! dpkg -l | grep -q "^ii.*cuda-toolkit"; then + log_info "Drivers NVIDIA non installés" + return 0 + fi + + # Désinstaller CUDA Toolkit + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y cuda-toolkit-12-9 >> "$LOG_FILE" 2>&1 + cuda_remove_result=$? + + # Désinstaller les drivers NVIDIA + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y nvidia-open >> "$LOG_FILE" 2>&1 + nvidia_remove_result=$? + + # Logger les résultats individuels + check_apt_success $cuda_remove_result "cuda-toolkit-12-9" "désinstallation" + check_apt_success $nvidia_remove_result "nvidia-open" "désinstallation" + + # Vérifier si au moins une désinstallation a échoué + if [ $cuda_remove_result -ne 0 ] || [ $nvidia_remove_result -ne 0 ]; then + log_error "Erreur lors de la désinstallation des composants NVIDIA" + return 1 + fi + + # Nettoyage des paquets orphelins + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + + # Vérifier si la désinstallation a réussi + cuda_ok=$(dpkg -l | grep -q "^ii.*cuda-toolkit" && echo "non" || echo "oui") + nvidia_ok=$(dpkg -l | grep -q "^ii.*nvidia-open" && echo "non" || echo "oui") + + if [ "$cuda_ok" = "oui" ] && [ "$nvidia_ok" = "oui" ]; then + log_info "Désinstallation des drivers NVIDIA réussie" + return 0 + else + log_info "Désinstallation partielle des drivers NVIDIA" + return 1 + fi +} + # Fonction de désinstallation des utilitaires gaming uninstall_utils() { log_info "Début de la désinstallation des utilitaires gaming" @@ -2421,17 +3061,17 @@ uninstall_utils() { if [ "$gamemode_installed" = "non" ] && [ "$mangohud_installed" = "non" ] && [ "$goverlay_installed" = "non" ]; then log_info "Aucun utilitaire gaming installé" - zenity --info --title="Non installés" --text="Aucun utilitaire gaming n'est installé sur le système." + zenity 2>/dev/null --info --title="Non installés" --text="Aucun utilitaire gaming n'est installé sur le système." return fi # Demander confirmation - if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller les utilitaires gaming ?"; then + if ! zenity 2>/dev/null --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller les utilitaires gaming ?"; then return fi # Demander le mot de passe sudo - password=$(zenity --password --title="Authentification - Désinstallation utilitaires" --text="Mot de passe sudo requis pour désinstaller les utilitaires gaming:") + password=$(zenity 2>/dev/null --password --title="Authentification - Désinstallation utilitaires" --text="Mot de passe sudo requis pour désinstaller les utilitaires gaming:") if [ $? -eq 1 ]; then @@ -2468,7 +3108,7 @@ uninstall_utils() { fi echo "100" ; echo "# Vérification de la désinstallation..." - ) | zenity --progress \ + ) | zenity 2>/dev/null --progress \ --title="Désinstallation des utilitaires gaming" \ --text="Initialisation..." \ --percentage=0 \ @@ -2482,21 +3122,72 @@ uninstall_utils() { if [ "$gamemode_ok" = "✓" ] && [ "$mangohud_ok" = "✓" ] && [ "$goverlay_ok" = "✓" ]; then log_info "Désinstallation complète des utilitaires gaming réussie" - zenity --info --title="Succès" --text="Tous les utilitaires gaming ont été désinstallés avec succès !" + zenity 2>/dev/null --info --title="Succès" --text="Tous les utilitaires gaming ont été désinstallés avec succès !" elif [ "$gamemode_ok" = "✗" ] || [ "$mangohud_ok" = "✗" ] || [ "$goverlay_ok" = "✗" ]; then log_info "Échec de désinstallation de certains utilitaires gaming" show_error_logs "Échec de désinstallation de certains utilitaires gaming" fi } -# Vérifier et installer zenity si nécessaire (sans sudo) +uninstall_utils_silent() { + local password="$1" + log_info "Début de la désinstallation des utilitaires gaming (mode silencieux)" + + # Vérifier si les utilitaires sont installés + gamemode_installed=$(dpkg -l | grep -q "^ii.*gamemode" && echo "oui" || echo "non") + mangohud_installed=$(dpkg -l | grep -q "^ii.*mangohud" && echo "oui" || echo "non") + goverlay_installed=$(dpkg -l | grep -q "^ii.*goverlay" && echo "oui" || echo "non") + + if [ "$gamemode_installed" = "non" ] && [ "$mangohud_installed" = "non" ] && [ "$goverlay_installed" = "non" ]; then + log_info "Aucun utilitaire gaming installé" + return 0 + fi + + # Désinstaller gamemode + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y gamemode >> "$LOG_FILE" 2>&1 + gamemode_remove_result=$? + + # Désinstaller mangohud + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y mangohud >> "$LOG_FILE" 2>&1 + mangohud_remove_result=$? + + # Désinstaller goverlay + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y goverlay >> "$LOG_FILE" 2>&1 + goverlay_remove_result=$? + + # Logger les résultats individuels + check_apt_success $gamemode_remove_result "gamemode" "désinstallation" + check_apt_success $mangohud_remove_result "mangohud" "désinstallation" + check_apt_success $goverlay_remove_result "goverlay" "désinstallation" + + # Nettoyage des paquets orphelins + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "paquets orphelins" "nettoyage"; then + log_info "Avertissement: Erreur lors du nettoyage des paquets orphelins" + fi + + # Vérifier si la désinstallation a réussi + gamemode_ok=$(dpkg -l | grep -q "^ii.*gamemode" && echo "non" || echo "oui") + mangohud_ok=$(dpkg -l | grep -q "^ii.*mangohud" && echo "non" || echo "oui") + goverlay_ok=$(dpkg -l | grep -q "^ii.*goverlay" && echo "non" || echo "oui") + + if [ "$gamemode_ok" = "oui" ] && [ "$mangohud_ok" = "oui" ] && [ "$goverlay_ok" = "oui" ]; then + log_info "Désinstallation complète des utilitaires gaming réussie" + return 0 + else + log_info "Échec de désinstallation de certains utilitaires gaming" + return 1 + fi +} + +# Vérifier et installer zenity 2>/dev/null si nécessaire (sans sudo) check_zenity_user() { - if ! command -v zenity &> /dev/null; then + if ! command -v zenity 2>/dev/null &> /dev/null; then echo "Zenity n'est pas installé. Installation requise pour l'interface graphique..." echo "Veuillez entrer votre mot de passe sudo pour installer zenity:" sudo apt-get update > /dev/null 2>&1 sudo apt-get install -y zenity - if ! command -v zenity &> /dev/null; then + if ! command -v zenity 2>/dev/null &> /dev/null; then echo "Erreur: Impossible d'installer zenity. Interface graphique non disponible." exit 1 fi @@ -2504,7 +3195,7 @@ check_zenity_user() { fi } -# Vérifier et installer zenity si nécessaire +# Vérifier et installer zenity 2>/dev/null si nécessaire check_zenity_user # Initialiser le fichier de log @@ -2518,123 +3209,276 @@ log_info "Fichier de log créé dans: $(pwd)/$(basename "$LOG_FILE")" # Afficher le chemin du log à l'utilisateur en cas de debug echo "Fichier de log: $(pwd)/$(basename "$LOG_FILE")" >&2 -# Afficher le menu d'installation avec bouton désinstaller -selection=$(show_install_selection) +# Afficher le menu principal unifié +selection=$(show_unified_selection) exit_code=$? -# Vérifier si l'utilisateur a cliqué sur "Désinstaller" -if [ $exit_code -eq 1 ] && [ "$selection" = "Désinstaller" ]; then - # Mode désinstallation - selection=$(show_uninstall_selection) - - # Vérifier si l'utilisateur a annulé - if [ $? -eq 1 ]; then - exit 0 - fi - - # Vérifier si aucune sélection - if [ -z "$selection" ]; then - zenity --info --title="Aucune sélection" --text="Aucun composant sélectionné pour la désinstallation." - exit 0 - fi - - # Traiter les sélections de désinstallation - IFS='|' read -ra SELECTED <<< "$selection" +# Déterminer l'action selon le code de retour +# 0 = Installer (bouton OK) +# 1 = Désinstaller (bouton extra) +# autres = Annuler + +if [ $exit_code -ne 0 ] && [ $exit_code -ne 1 ]; then + # L'utilisateur a annulé (codes 252, 143, etc.) + exit 0 +fi + +# Vérifier si aucune sélection +if [ -z "$selection" ]; then + show_message_and_wait "Aucun composant sélectionné. Le script va se terminer." "Aucune sélection" + exit 0 +fi + +# Traiter la sélection selon le bouton cliqué +IFS='|' read -ra SELECTED <<< "$selection" + + +if [ $exit_code -eq 1 ]; then + # Mode désinstallation (bouton extra) + # Créer la liste des composants pour confirmation + uninstall_display="" for component in "${SELECTED[@]}"; do + case $component in + "steam") uninstall_display="$uninstall_display\n• Steam" ;; + "protonup") uninstall_display="$uninstall_display\n• ProtonUp-Qt" ;; + "heroic") uninstall_display="$uninstall_display\n• Heroic Game Launcher" ;; + "lutris") uninstall_display="$uninstall_display\n• Lutris" ;; + "bottles") uninstall_display="$uninstall_display\n• Bottles" ;; + "wine") uninstall_display="$uninstall_display\n• Wine + Winetricks" ;; + "retroarch") uninstall_display="$uninstall_display\n• RetroArch" ;; + "flatpak") uninstall_display="$uninstall_display\n• Flatpak (ATTENTION: supprimera TOUTES les applications Flatpak)" ;; + "gearlever") uninstall_display="$uninstall_display\n• Gear Lever" ;; + "discord") uninstall_display="$uninstall_display\n• Discord" ;; + "vesktop") uninstall_display="$uninstall_display\n• Vesktop" ;; + "teamspeak") uninstall_display="$uninstall_display\n• TeamSpeak" ;; + "mumble") uninstall_display="$uninstall_display\n• Mumble" ;; + "flatseal") uninstall_display="$uninstall_display\n• Flatseal" ;; + "nvidia") uninstall_display="$uninstall_display\n• Drivers NVIDIA (ATTENTION: peut affecter l'affichage)" ;; + "utils") uninstall_display="$uninstall_display\n• Utilitaires gaming (GameMode, MangoHUD, GOverlay)" ;; + esac + done + + # Demander confirmation globale une seule fois + if ! zenity 2>/dev/null --question --title="Confirmation de désinstallation" --text="Êtes-vous sûr de vouloir désinstaller les composants suivants ?$uninstall_display"; then + exit 0 + fi + + # Demander le mot de passe sudo une seule fois + password=$(zenity 2>/dev/null --password --title="Authentification" --text="Mot de passe sudo requis pour la désinstallation:") + if [ $? -eq 1 ] || [ -z "$password" ]; then + log_error "Mot de passe non fourni ou dialogue annulé" + exit 0 + fi + + # Vérifier le mot de passe sudo + log_info "Vérification du mot de passe sudo..." + if ! echo "$password" | sudo -S true 2>/dev/null; then + log_error "Mot de passe sudo incorrect" + zenity 2>/dev/null --error --title="Erreur d'authentification" --text="Mot de passe administrateur incorrect." + exit 1 + fi + log_info "Mot de passe sudo validé avec succès" + + # Variables pour suivre les résultats + success_count=0 + failed_components="" + total_components=${#SELECTED[@]} + + log_info "Début du processus de désinstallation pour ${total_components} composant(s)" + log_info "Composants sélectionnés: ${SELECTED[*]}" + + # Traiter les sélections de désinstallation + for component in "${SELECTED[@]}"; do + log_info "Traitement du composant: $component" case $component in "steam") - uninstall_steam + if uninstall_with_progress "$component" "$password" "Steam" "uninstall_steam_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Steam" + fi + ;; + "protonup") + if uninstall_with_progress "$component" "$password" "ProtonUp-Qt" "uninstall_protonup_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• ProtonUp-Qt" + fi ;; "heroic") - uninstall_heroic + if uninstall_with_progress "$component" "$password" "Heroic Game Launcher" "uninstall_heroic_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Heroic Game Launcher" + fi ;; "lutris") - uninstall_lutris + if uninstall_with_progress "$component" "$password" "Lutris" "uninstall_lutris_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Lutris" + fi ;; "bottles") - uninstall_bottles + if uninstall_with_progress "$component" "$password" "Bottles" "uninstall_bottles_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Bottles" + fi ;; "wine") - uninstall_wine + if uninstall_with_progress "$component" "$password" "Wine + Winetricks" "uninstall_wine_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Wine + Winetricks" + fi ;; "retroarch") - uninstall_retroarch + if uninstall_with_progress "$component" "$password" "RetroArch" "uninstall_retroarch_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• RetroArch" + fi ;; "flatpak") - uninstall_flatpak + if uninstall_with_progress "$component" "$password" "Flatpak" "uninstall_flatpak_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Flatpak" + fi ;; "gearlever") - uninstall_gearlever + if uninstall_with_progress "$component" "$password" "Gear Lever" "uninstall_gearlever_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Gear Lever" + fi ;; "discord") - uninstall_discord + if uninstall_with_progress "$component" "$password" "Discord" "uninstall_discord_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Discord" + fi ;; "vesktop") - uninstall_vesktop + if uninstall_with_progress "$component" "$password" "Vesktop" "uninstall_vesktop_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Vesktop" + fi ;; "teamspeak") - uninstall_teamspeak + if uninstall_with_progress "$component" "$password" "TeamSpeak" "uninstall_teamspeak_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• TeamSpeak" + fi ;; "mumble") - uninstall_mumble + if uninstall_with_progress "$component" "$password" "Mumble" "uninstall_mumble_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Mumble" + fi ;; "flatseal") - uninstall_flatseal + if uninstall_with_progress "$component" "$password" "Flatseal" "uninstall_flatseal_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Flatseal" + fi ;; "nvidia") - uninstall_nvidia + if uninstall_with_progress "$component" "$password" "Drivers NVIDIA" "uninstall_nvidia_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Drivers NVIDIA" + fi ;; "utils") - uninstall_utils + if uninstall_with_progress "$component" "$password" "Utilitaires gaming" "uninstall_utils_silent"; then + ((success_count++)) + else + failed_components="$failed_components\n• Utilitaires gaming" + fi ;; esac done -elif [ $exit_code -eq 1 ]; then - # L'utilisateur a annulé - exit 0 -else - # Mode installation - # Vérifier si aucune sélection - if [ -z "$selection" ]; then - zenity --info --title="Aucune sélection" --text="Aucun composant sélectionné pour l'installation." - exit 0 + + log_info "Fin du processus de désinstallation - Succès: $success_count/$total_components" + if [ -n "$failed_components" ]; then + log_error "Composants en échec: $failed_components" fi - - # Créer la liste des applications sélectionnées pour l'affichage - IFS='|' read -ra SELECTED <<< "$selection" - app_list="" + + # Afficher le résultat final + if [ $success_count -eq $total_components ]; then + zenity 2>/dev/null --info --title="Désinstallation terminée" --text="Tous les composants ont été désinstallés avec succès ! ($success_count/$total_components)" --extra-button="Voir les logs" + if [ $? -eq 1 ]; then + show_error_logs "Logs de désinstallation" + fi + elif [ $success_count -gt 0 ]; then + if [ -n "$failed_components" ]; then + zenity 2>/dev/null --warning --title="Désinstallation partiellement réussie" --text="$success_count composant(s) sur $total_components désinstallé(s) avec succès.\n\nÉchecs :$failed_components" --extra-button="Voir les logs" + if [ $? -eq 1 ]; then + show_error_logs "Logs de désinstallation - Échecs détaillés" + fi + else + zenity 2>/dev/null --info --title="Désinstallation terminée" --text="$success_count composant(s) sur $total_components désinstallé(s) avec succès." --extra-button="Voir les logs" + if [ $? -eq 1 ]; then + show_error_logs "Logs de désinstallation" + fi + fi + else + if [ -n "$failed_components" ]; then + zenity 2>/dev/null --error --title="Échec de la désinstallation" --text="Aucun composant n'a pu être désinstallé.\n\nÉchecs :$failed_components" --extra-button="Voir les logs" + if [ $? -eq 1 ]; then + show_error_logs "Logs de désinstallation - Tous les échecs" + fi + else + zenity 2>/dev/null --error --title="Échec de la désinstallation" --text="Aucun composant n'a pu être désinstallé." --extra-button="Voir les logs" + if [ $? -eq 1 ]; then + show_error_logs "Logs de désinstallation" + fi + fi + fi +else + # Mode installation (bouton OK, exit_code = 0) + # Créer la liste des applications pour confirmation + install_display="" for component in "${SELECTED[@]}"; do case $component in - "steam") app_list="$app_list\n• Steam" ;; - "heroic") app_list="$app_list\n• Heroic Game Launcher" ;; - "lutris") app_list="$app_list\n• Lutris" ;; - "bottles") app_list="$app_list\n• Bottles" ;; - "wine") app_list="$app_list\n• Wine + Winetricks" ;; - "retroarch") app_list="$app_list\n• RetroArch" ;; - "flatpak") app_list="$app_list\n• Flatpak + Flathub" ;; - "gearlever") app_list="$app_list\n• Gear Lever" ;; - "discord") app_list="$app_list\n• Discord" ;; - "vesktop") app_list="$app_list\n• Vesktop" ;; - "teamspeak") app_list="$app_list\n• TeamSpeak" ;; - "mumble") app_list="$app_list\n• Mumble" ;; - "flatseal") app_list="$app_list\n• Flatseal" ;; - "nvidia") app_list="$app_list\n• NVIDIA + CUDA" ;; - "utils") app_list="$app_list\n• Utilitaires Gaming" ;; + "steam") install_display="$install_display\n• Steam" ;; + "protonup") install_display="$install_display\n• ProtonUp-Qt" ;; + "heroic") install_display="$install_display\n• Heroic Game Launcher" ;; + "lutris") install_display="$install_display\n• Lutris" ;; + "bottles") install_display="$install_display\n• Bottles" ;; + "wine") install_display="$install_display\n• Wine + Winetricks" ;; + "retroarch") install_display="$install_display\n• RetroArch" ;; + "flatpak") install_display="$install_display\n• Flatpak + Flathub" ;; + "gearlever") install_display="$install_display\n• Gear Lever" ;; + "discord") install_display="$install_display\n• Discord" ;; + "vesktop") install_display="$install_display\n• Vesktop" ;; + "teamspeak") install_display="$install_display\n• TeamSpeak" ;; + "mumble") install_display="$install_display\n• Mumble" ;; + "flatseal") install_display="$install_display\n• Flatseal" ;; + "nvidia") install_display="$install_display\n• NVIDIA + CUDA" ;; + "utils") install_display="$install_display\n• Goverlay (FPS, CPU, GPU, température)" ;; esac done # Demander le mot de passe sudo une seule fois pour toutes les installations - if ! get_global_sudo_password "$app_list"; then + if ! get_global_sudo_password "$install_display"; then exit 0 fi # Activer le mode installation groupée si plusieurs applications sont sélectionnées if [ ${#SELECTED[@]} -gt 1 ]; then - start_batch_install ${#SELECTED[@]} "$app_list" + start_batch_install ${#SELECTED[@]} "$install_display" # Afficher une notification au début - zenity --info --timeout=5 \ - --title="Gaming Debian Installateur - Installation Multiple" \ + zenity 2>/dev/null --info --timeout=5 \ + --title="Debian Gaming Deployment Tool - Installation Multiple" \ --text="Installation de ${#SELECTED[@]} applications en cours...\n\nCeci peut prendre plusieurs minutes.\nVeuillez patienter..." & fi @@ -2644,6 +3488,9 @@ else "steam") install_steam ;; + "protonup") + install_protonup + ;; "heroic") install_heroic ;; @@ -2692,6 +3539,7 @@ else if [ "$BATCH_INSTALL_MODE" = "true" ]; then case $component in "steam") next_batch_app "Steam" ;; + "protonup") next_batch_app "ProtonUp-Qt" ;; "heroic") next_batch_app "Heroic Game Launcher" ;; "lutris") next_batch_app "Lutris" ;; "bottles") next_batch_app "Bottles" ;; @@ -2705,20 +3553,18 @@ else "mumble") next_batch_app "Mumble" ;; "flatseal") next_batch_app "Flatseal" ;; "nvidia") next_batch_app "NVIDIA + CUDA" ;; - "utils") next_batch_app "Utilitaires Gaming" ;; + "utils") next_batch_app "Goverlay (performances)" ;; esac fi done - # Terminer le mode installation groupée + # Terminer le mode installation groupée et afficher le récapitulatif if [ "$BATCH_INSTALL_MODE" = "true" ]; then end_batch_install - - # Afficher un récapitulatif final - zenity --info --title="Gaming Debian Installateur - Installation terminée" \ - --text="Toutes les applications sélectionnées ont été installées avec succès !\n\n$app_list" \ - --width=400 fi + + # Afficher le récapitulatif final des installations + show_installation_summary fi exit 0 \ No newline at end of file