#!/bin/bash # Script d'installation pour l'intégration bureau MD_to_Print # Usage: ./install-desktop.sh [--uninstall] set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" CAJA_ACTIONS_DIR="$HOME/.local/share/caja/actions" LOCAL_BIN_DIR="$HOME/.local/bin" SYSTEM_BIN_DIR="/usr/local/bin" # Couleurs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Fonction d'aide show_help() { cat << EOF Installation de l'intégration bureau MD_to_Print Usage: $0 [OPTIONS] OPTIONS: --uninstall Désinstaller l'intégration bureau --system Installer dans /usr/local/bin (nécessite sudo) --help Afficher cette aide Par défaut, installe dans ~/.local/bin (pas besoin de sudo) EOF } # Fonction de notification notify() { local level="$1" shift local message="$*" if command -v notify-send &> /dev/null; then case "$level" in info) notify-send -i "dialog-information" "MD_to_Print" "$message" 2>/dev/null || true ;; success) notify-send -i "dialog-information" "MD_to_Print" "$message" 2>/dev/null || true ;; error) notify-send -i "dialog-error" "MD_to_Print" "$message" 2>/dev/null || true ;; esac fi echo -e "${GREEN}$message${NC}" } # Vérification des dépendances check_dependencies() { local missing=() local critical_missing=() # Dépendance critique : caja-actions if ! command -v caja-actions-config-tool &> /dev/null && ! dpkg -l | grep -q "caja-actions"; then critical_missing+=("caja-actions") fi if ! command -v notify-send &> /dev/null; then missing+=("libnotify-bin") fi if ! command -v zenity &> /dev/null && ! command -v yad &> /dev/null; then missing+=("zenity") fi if [ ${#critical_missing[@]} -gt 0 ]; then echo -e "${RED}Dépendance CRITIQUE manquante: ${critical_missing[*]}${NC}" echo -e "${YELLOW}Sans caja-actions, les actions ne pourront pas apparaître dans le menu contextuel.${NC}" echo -e "${BLUE}Installation: sudo apt-get install caja-actions${NC}" echo "" read -p "Installer caja-actions maintenant? (o/N): " -n 1 -r echo if [[ $REPLY =~ ^[Oo]$ ]]; then if sudo apt-get install -y caja-actions; then echo -e "${GREEN}caja-actions installé avec succès${NC}" else echo -e "${RED}Échec de l'installation de caja-actions${NC}" return 1 fi else echo -e "${YELLOW}Installation de caja-actions annulée. Les actions ne fonctionneront pas.${NC}" return 1 fi fi if [ ${#missing[@]} -gt 0 ]; then echo -e "${YELLOW}Dépendances optionnelles manquantes: ${missing[*]}${NC}" echo -e "${BLUE}Installation: sudo apt-get install ${missing[*]}${NC}" return 1 fi return 0 } # Installation install() { local INSTALL_BIN_DIR="$LOCAL_BIN_DIR" local USE_SUDO=false # Vérifier option --system if [ "${1:-}" = "--system" ]; then INSTALL_BIN_DIR="$SYSTEM_BIN_DIR" USE_SUDO=true if [ "$EUID" -ne 0 ] && ! sudo -n true 2>/dev/null; then echo -e "${RED}Erreur: --system nécessite les privilèges sudo${NC}" exit 1 fi fi echo -e "${BLUE}=== Installation de l'intégration bureau MD_to_Print ===${NC}" # Vérifier les dépendances if ! check_dependencies; then if ! command -v caja-actions-config-tool &> /dev/null && ! dpkg -l | grep -q "caja-actions"; then echo -e "${RED}Installation annulée: caja-actions est requis${NC}" exit 1 fi echo -e "${YELLOW}Certaines dépendances optionnelles sont manquantes, mais l'installation continue...${NC}" fi # Créer les répertoires nécessaires mkdir -p "$CAJA_ACTIONS_DIR" mkdir -p "$INSTALL_BIN_DIR" # Copier les fichiers .desktop echo -e "${BLUE}Installation des actions Caja...${NC}" cp "$SCRIPT_DIR"/*.desktop "$CAJA_ACTIONS_DIR/" 2>/dev/null || { echo -e "${RED}Erreur: Impossible de copier les fichiers .desktop${NC}" exit 1 } # Installer les scripts echo -e "${BLUE}Installation des scripts...${NC}" if [ "$USE_SUDO" = true ]; then sudo cp "$PROJECT_DIR/scripts/md_to_print_gui.sh" "$INSTALL_BIN_DIR/" sudo cp "$PROJECT_DIR/scripts/md_to_print_notify.sh" "$INSTALL_BIN_DIR/" sudo chmod +x "$INSTALL_BIN_DIR/md_to_print_gui.sh" sudo chmod +x "$INSTALL_BIN_DIR/md_to_print_notify.sh" else cp "$PROJECT_DIR/scripts/md_to_print_gui.sh" "$INSTALL_BIN_DIR/" cp "$PROJECT_DIR/scripts/md_to_print_notify.sh" "$INSTALL_BIN_DIR/" chmod +x "$INSTALL_BIN_DIR/md_to_print_gui.sh" chmod +x "$INSTALL_BIN_DIR/md_to_print_notify.sh" fi # Vérifier que les scripts sont dans le PATH if [[ ":$PATH:" != *":$INSTALL_BIN_DIR:"* ]] && [ "$INSTALL_BIN_DIR" = "$LOCAL_BIN_DIR" ]; then echo -e "${YELLOW}Attention: $INSTALL_BIN_DIR n'est pas dans votre PATH${NC}" echo -e "${BLUE}Ajoutez cette ligne à votre ~/.bashrc ou ~/.profile:${NC}" echo -e "${GREEN}export PATH=\"\$HOME/.local/bin:\$PATH\"${NC}" fi # Vérifier que md_to_print.sh est accessible if ! command -v md_to_print.sh &> /dev/null && [ ! -f "$PROJECT_DIR/md_to_print.sh" ]; then echo -e "${YELLOW}Attention: md_to_print.sh non trouvé${NC}" echo -e "${BLUE}Assurez-vous que md_to_print.sh est installé ou que Docker est configuré${NC}" fi notify success "Installation terminée avec succès!" echo -e "${GREEN}=== Installation terminée ===${NC}" echo "" echo -e "${BLUE}IMPORTANT: Configuration Caja Actions${NC}" echo -e "${YELLOW}1. Ouvrez l'outil de configuration:${NC}" echo -e "${GREEN} caja-actions-config-tool${NC}" echo "" echo -e "${YELLOW}2. Dans les préférences (Édition > Préférences), désactivez:${NC}" echo -e "${GREEN} 'Créer un menu racine Caja-Actions'${NC}" echo -e "${YELLOW} (pour que les actions apparaissent directement dans le menu)${NC}" echo "" echo -e "${BLUE}3. Redémarrez Caja:${NC}" echo -e "${GREEN} caja -q${NC}" echo "" echo -e "${BLUE}Les actions suivantes sont maintenant disponibles:${NC}" echo -e " - Imprimer avec MD_to_Print" echo -e " - Convertir en PDF (MD_to_Print)" echo -e " - Prévisualiser avant impression" } # Désinstallation uninstall() { echo -e "${BLUE}=== Désinstallation de l'intégration bureau MD_to_Print ===${NC}" # Supprimer les fichiers .desktop if [ -d "$CAJA_ACTIONS_DIR" ]; then echo -e "${BLUE}Suppression des actions Caja...${NC}" rm -f "$CAJA_ACTIONS_DIR"/md-to-print-*.desktop fi # Supprimer les scripts echo -e "${BLUE}Suppression des scripts...${NC}" if [ -f "$LOCAL_BIN_DIR/md_to_print_gui.sh" ]; then rm -f "$LOCAL_BIN_DIR/md_to_print_gui.sh" fi if [ -f "$LOCAL_BIN_DIR/md_to_print_notify.sh" ]; then rm -f "$LOCAL_BIN_DIR/md_to_print_notify.sh" fi if [ -f "$SYSTEM_BIN_DIR/md_to_print_gui.sh" ]; then if [ "$EUID" -eq 0 ] || sudo -n true 2>/dev/null; then sudo rm -f "$SYSTEM_BIN_DIR/md_to_print_gui.sh" sudo rm -f "$SYSTEM_BIN_DIR/md_to_print_notify.sh" else echo -e "${YELLOW}Les scripts système nécessitent sudo pour être supprimés${NC}" fi fi notify success "Désinstallation terminée" echo -e "${GREEN}=== Désinstallation terminée ===${NC}" echo -e "${BLUE}Redémarrez Caja: caja -q${NC}" } # Parsing des arguments if [ "${1:-}" = "--uninstall" ]; then uninstall elif [ "${1:-}" = "--help" ] || [ "${1:-}" = "-h" ]; then show_help else install "$@" fi