From eec9bfe67d5903f094aa5972d15e2af76c842d31 Mon Sep 17 00:00:00 2001 From: unfr Date: Wed, 13 Aug 2025 08:32:08 +0200 Subject: [PATCH] reecriture uninstall.sh via IA --- uninstall.sh | 185 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 126 insertions(+), 59 deletions(-) diff --git a/uninstall.sh b/uninstall.sh index 5f5d758..9270947 100644 --- a/uninstall.sh +++ b/uninstall.sh @@ -1,81 +1,148 @@ -#!/bin/bash -source "$HOME/autopost/common.sh" +#!/usr/bin/env bash +set -Eeuo pipefail +# ────────── Helpers & couleurs ────────── +if [ -t 1 ]; then + ROUGE='\e[31m'; VERT='\e[32m'; JAUNE='\e[33m'; BLEU='\e[34m'; NORMAL='\e[0m' +else + ROUGE=''; VERT=''; JAUNE=''; BLEU=''; NORMAL='' +fi +log() { printf "${BLEU}%s${NORMAL}\n" "$*"; } +ok() { printf "${VERT}%s${NORMAL}\n" "$*"; } +warn() { printf "${JAUNE}%s${NORMAL}\n" "$*"; } +err() { printf "${ROUGE}%s${NORMAL}\n" "$*"; } + +confirm() { # confirm "message" -> 0 si oui + read -r -p "$1 (y/N) : " _ans + [[ "${_ans:-}" =~ ^[Yy]$ ]] +} + +safe_rm_file(){ # supprime si fichier et sous $HOME + local f="$1" + [[ -n "$f" && -f "$f" && "$f" == "$HOME/"* ]] && rm -f -- "$f" +} + +safe_rm_dir(){ # supprime si dossier et sous $HOME + local d="$1" + [[ -n "$d" && -d "$d" && "$d" == "$HOME/"* ]] && rm -rf -- "$d" +} + +# ────────── Paths ────────── BIN_DIR="$HOME/bin" AUTOPOST_DIR="$HOME/autopost" +BASHRC_FILE="$HOME/.bashrc" +BASH_COMPLETION_DIR="$HOME/.bash_completion.d" +CONF_SH="$AUTOPOST_DIR/conf.sh" -LISTE_APPLIS=( - "$BIN_DIR/mediainfo" - "$BIN_DIR/sqlite3" - "$BIN_DIR/jq" - "$BIN_DIR/nyuu" - "$BIN_DIR/parpar" - "$BIN_DIR/postauto" - "$BIN_DIR/BDInfo" - "$BIN_DIR/BDInfoDataSubstractor" +# ────────── Charger conf.sh (facultatif) pour récupérer DOSSIER_* / DB_FILE ────────── +if [ -f "$CONF_SH" ]; then + # conf.sh ne fait que définir des variables : sourcing OK + # shellcheck source=/dev/null + . "$CONF_SH" +else + warn "conf.sh introuvable, certaines suppressions (DOSSIER_*) pourront être ignorées." +fi + +# ────────── Proposer d’arrêter postauto si présent ────────── +if [ -x "$BIN_DIR/postauto" ]; then + if confirm "Arrêter 'postauto' avant désinstallation ?"; then + "$BIN_DIR/postauto" stop || true + fi +fi + +# ────────── Supprimer binaires installés dans $HOME/bin ────────── +log "Suppression des binaires…" +BIN_LIST=( + "$BIN_DIR/mediainfo" + "$BIN_DIR/sqlite3" + "$BIN_DIR/jq" + "$BIN_DIR/nyuu" + "$BIN_DIR/parpar" + "$BIN_DIR/postauto" + "$BIN_DIR/BDInfo" + "$BIN_DIR/BDInfoDataSubstractor" + "$BIN_DIR/7z" ) - -# Vérifier et supprimer les fichiers existants -for fichier in "${LISTE_APPLIS[@]}"; do - if [ -f "$fichier" ]; then - echo "Suppression de $fichier" - rm -f "$fichier" - fi +for f in "${BIN_LIST[@]}"; do + if [ -f "$f" ]; then + echo " - $f" + safe_rm_file "$f" + fi done -rm -f "$AUTOPOST_DIR/common.sh" -rm -f "$AUTOPOST_DIR/posteur.sh" -rm -f "$AUTOPOST_DIR/analyzer.sh" -rm -rf "${DOSSIER_NFO:-}" +# ────────── Supprimer scripts autopost ────────── +log "Suppression des scripts autopost…" +safe_rm_file "$AUTOPOST_DIR/common.sh" +safe_rm_file "$AUTOPOST_DIR/posteur.sh" +safe_rm_file "$AUTOPOST_DIR/analyzer.sh" -# Demander confirmation pour supprimer le fichier de conf -read -r -p "Voulez-vous vraiment supprimer votre fichier de conf ? (y/n) : " conf -if [[ "$conf" =~ ^[Yy]$ ]]; then - rm -f "$AUTOPOST_DIR/conf.sh" +# Fichiers Node optionnels (server/db/config, node_modules, sessions, logs) +if confirm "Supprimer aussi les fichiers Node (server.js, db.js, config.js), node_modules et sessions ?"; then + safe_rm_file "$AUTOPOST_DIR/server.js" + safe_rm_file "$AUTOPOST_DIR/db.js" + safe_rm_file "$AUTOPOST_DIR/config.js" + safe_rm_dir "$AUTOPOST_DIR/node_modules" + safe_rm_dir "$AUTOPOST_DIR/sessions" fi -# Demander confirmation pour supprimer la base de données -read -r -p "Voulez-vous vraiment supprimer $DB_FILE ? (y/n) : " filedb -if [[ "$filedb" =~ ^[Yy]$ ]]; then - rm -f "$DB_FILE" +# ────────── Dossiers médias (depuis conf.sh si dispo) ────────── +# Dossier NFO +if [ -n "${DOSSIER_NFO:-}" ] && [ -d "${DOSSIER_NFO:-}" ]; then + if confirm "Supprimer le dossier NFO (${DOSSIER_NFO}) ?"; then + safe_rm_dir "${DOSSIER_NFO}" + fi fi -# Demander confirmation pour supprimer les NZB -read -r -p "Voulez-vous supprimer vos NZB ? (y/n) : " nzb -if [[ "$nzb" =~ ^[Yy]$ ]]; then - rm -f "$DB_FILE" - rm -rf "${DOSSIER_NZB_ATTENTE:-}" - rm -rf "${DOSSIER_NZB_FINAL:-}" +# Supprimer la conf ? +if [ -f "$CONF_SH" ] && confirm "Supprimer votre fichier de conf (${CONF_SH}) ?"; then + safe_rm_file "$CONF_SH" fi -# Vérifier si le dossier existe et est vide +# Supprimer la base de données SQLite ? +if [ -n "${DB_FILE:-}" ] && [ -f "${DB_FILE:-}" ] && confirm "Supprimer la base SQLite (${DB_FILE}) ?"; then + safe_rm_file "$DB_FILE" +fi + +# Supprimer les NZB ? +if confirm "Supprimer vos NZB (ATTENTE & FINIS) ?"; then + safe_rm_dir "${DOSSIER_NZB_ATTENTE:-}" + safe_rm_dir "${DOSSIER_NZB_FINAL:-}" +fi + +# Si dossier autopost devenu vide → supprimer if [ -d "$AUTOPOST_DIR" ] && [ -z "$(ls -A "$AUTOPOST_DIR" 2>/dev/null)" ]; then - echo "Suppression du dossier $AUTOPOST_DIR car il est vide." - rmdir "$AUTOPOST_DIR" + echo "Suppression du dossier $AUTOPOST_DIR (vide)." + rmdir -- "$AUTOPOST_DIR" || true fi -# Chemin vers le fichier bashrc -BASHRC_FILE="$HOME/.bashrc" - -# Définir les marqueurs qui encadrent le bloc à supprimer +# ────────── Nettoyage complétion bash ────────── DEBUT_MARKER="# DEBUT COMPLETION POSTAUTO" FIN_MARKER="# FIN COMPLETION POSTAUTO" -# Vérifier si le bloc est présent dans le fichier -if grep -q "$DEBUT_MARKER" "$BASHRC_FILE"; then - echo "Suppression de la configuration de complétion dans $BASHRC_FILE..." - - # Faire une sauvegarde de sécurité du fichier .bashrc - cp "$BASHRC_FILE" "${BASHRC_FILE}.bak" - echo "Sauvegarde réalisée dans ${BASHRC_FILE}.bak" - - # Supprimer le bloc de code entre les marqueurs (inclusifs) - sed -i "/$DEBUT_MARKER/,/$FIN_MARKER/d" "$BASHRC_FILE" - - echo "Bloc de configuration supprimé." -else - echo "Aucun bloc de configuration de complétion trouvé dans $BASHRC_FILE." +# 1) Supprimer l'ancien bloc directement dans ~/.bashrc +if [ -f "$BASHRC_FILE" ] && grep -q "$DEBUT_MARKER" "$BASHRC_FILE"; then + echo "Suppression de l'ancien bloc de complétion dans $BASHRC_FILE…" + cp "$BASHRC_FILE" "${BASHRC_FILE}.bak" + sed -i "/$DEBUT_MARKER/,/$FIN_MARKER/d" "$BASHRC_FILE" + ok "Bloc de complétion supprimé (backup: ${BASHRC_FILE}.bak)." fi -echo "Suppression du script après exécution..." -rm -- "$0" \ No newline at end of file +# 2) Supprimer le fichier de complétion moderne et sa ligne 'source' éventuelle +COMP_FILE="$BASH_COMPLETION_DIR/postauto" +if [ -f "$COMP_FILE" ]; then + echo "Suppression $COMP_FILE" + rm -f -- "$COMP_FILE" +fi +if [ -f "$BASHRC_FILE" ]; then + # enlève la ligne de sourcing si présente + if grep -q '\.bash_completion.d/postauto' "$BASHRC_FILE"; then + cp "$BASHRC_FILE" "${BASHRC_FILE}.bak2" + sed -i '\|\.bash_completion\.d/postauto|d' "$BASHRC_FILE" + ok "Ligne de sourcing supprimée (backup: ${BASHRC_FILE}.bak2)." + fi +fi + +echo "Suppression du script après exécution…" +rm -- "$0" 2>/dev/null || true + +ok "Désinstallation terminée."