[ID] SCRIPT_NAME: radarr_postprocess_v1.32_fix_append.sh PROJECT: SEED_MOVER [ROLE] - Hook post-traitement Radarr déclenché après l’import ou l’upgrade d’un film. - Enregistre, pour chaque fichier importé, la correspondance entre le fichier original récupéré via le client BitTorrent et le fichier final placé par Radarr dans son arborescence. - Prépare les données pour seed_mover : ajoute une entrée RADARR|SRC|DST dans le mapping partagé et écrit un fichier .state pour que les étapes synomap sachent quel fichier relier ou nettoyer. [CONTEXT] - Exécuté dans le conteneur Radarr, via les hooks On Import / On Upgrade. - Environnement attendu : /bin/sh + utilitaires POSIX (mkdir, chmod, date, basename). Aucun appel réseau. - Accès aux chemins via les montages Radarr : le script suppose que Radarr voit /scripts et /data (conformément au docker-compose habituel). - Lecture automatique des variables d’environnement Radarr : - RADARR_MOVIEFILE_PATH (chemin final du fichier), - RADARR_MOVIEFILE_SOURCEPATH (chemin source, parfois absent selon le download client), - RADARR_DOWNLOAD_CLIENT_CATEGORY, - RADARR_EVENTTYPE. - Reconstruction du SRC si Radarr ne fournit pas RADARR_MOVIEFILE_SOURCEPATH : /data/torrents/completed//. Cette règle fait partie de la convention seed_mover (non optionnelle). - Filesystem utilisé : - MAP (mapping_entries.txt) sous /scripts/synomap/, - STATE_DIR sous /scripts/state/, - LOG sous /scripts/synomap/log/. - Mécanisme de lock : MAP.lockdir est utilisé pour sérialiser l’accès en écriture au mapping et éviter les corruptions. - Aucune interaction avec qBittorrent ou Radarr API : ce script prépare uniquement les données pour les étapes ultérieures. [INPUTS] - Aucun argument CLI : le fonctionnement repose entièrement sur l’environnement du conteneur. - Variables d’environnement : - LOG : fichier log (défaut /scripts/synomap/log/radarr_postprocess.log). - MAP : fichier de mapping partagé (défaut /scripts/synomap/mapping_entries.txt). - STATE_DIR : répertoire des fichiers .state (défaut /scripts/state). - LOCKDIR : répertoire du lock (défaut MAP.lockdir). - MAP_OWNER / MAP_GROUP : propriétaire/groupe à appliquer sur MAP (optionnel). - Variables Radarr : RADARR_EVENTTYPE, RADARR_MOVIEFILE_PATH, RADARR_MOVIEFILE_SOURCEPATH, RADARR_DOWNLOAD_CLIENT_CATEGORY. - Priorité : 1. Variables d’environnement (si définies par wrapper ou compose), 2. Valeurs défaut internes. - Contraintes : - Les chemins fournis par Radarr doivent correspondre aux volumes montés (attention : selon la configuration Docker, certains chemins peuvent être relatifs ou remappés). - Mapping_entries.txt est append-only : aucune vérification de doublon. [OUTPUTS] - Ajout d’une ligne RADARR|| au MAP, sous lockdir. - Création d’un fichier .state dans STATE_DIR contenant SRC, DST, CAT, WHEN (timestamp). - Journalisation append dans LOG (stdout n’est pas utilisé). - Pas d’effet direct sur Radarr ou qBittorrent ; aucun appel API. [FAILURE_MODES] - Variables essentielles manquantes (ex : DST vide) → set -eu → exit ≠ 0, aucune écriture. - Lockdir indisponible après 25 tentatives → écrit WARN dans LOG, exit 0 (skip sécurisé). - Échecs chmod/chown → ignorés via “|| true”, comportement best effort. - Échec mkdir -p (LOG / STATE_DIR / MAP) → exit ≠ 0. - Absence de SRC (Radarr ne fournit rien et reconstruction impossible) → skip silencieux avec trace dans LOG. - Exit codes : - ≠ 0 : erreurs structurelles (env critique manquante, impossible de créer répertoires). - = 0 : skips contrôlés (lockdir indisponible, état incomplet). [HISTORIQUE] - v1.32 - “fix append” : ajout du mécanisme LOCKDIR, durcissement des rules append sur le mapping, introduction généralisée des fichiers .state. - Héritier des hooks Radarr 1.31 utilisés sans synchronisation. - À COMPLÉTER via historique Git pour préciser la date exacte des premières versions.