#!/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" # ────────── 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" ) for f in "${BIN_LIST[@]}"; do if [ -f "$f" ]; then echo " - $f" safe_rm_file "$f" fi done # ────────── 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" # 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 # ────────── 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 # Supprimer la conf ? if [ -f "$CONF_SH" ] && confirm "Supprimer votre fichier de conf (${CONF_SH}) ?"; then safe_rm_file "$CONF_SH" fi # 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 (vide)." rmdir -- "$AUTOPOST_DIR" || true fi # ────────── Nettoyage complétion bash ────────── DEBUT_MARKER="# DEBUT COMPLETION POSTAUTO" FIN_MARKER="# FIN COMPLETION POSTAUTO" # 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 # 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."