postprocess/postprocess.sh
2025-05-10 07:53:54 +00:00

209 lines
6.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ----------------------------------
# Configuration des chemins et du fichier de log
# ----------------------------------
ORG_PATH="/home/************/downloads/rtorrent"
FINAL_PATH="/home/***********"
LOG_FILE="/home/*************/torrentend_debug.log"
BIN_PATH="/home/************/bin"
# ----------------------------------
# Couleurs pour l'affichage (facultatif)
# ----------------------------------
VERT="\033[0;32m"
BLEU="\033[1;34m"
NORMAL="\033[0;39m"
# ----------------------------------
# Lecture des arguments
# ----------------------------------
file="$1"
#etiq="$2"
# ----------------------------------
# Fonction de log simplifiée
# ----------------------------------
log() {
echo "$1" >> "$LOG_FILE"
}
log "-------------------------------"
log "$(date): Script exécuté"
log "Base filename: $file"
log "DEBUT DE TRAITEMENT"
# ----------------------------------
# N'exécute que pour les torrents étiquetés AUTO
# ----------------------------------
#[[ "$etiq" != "AUTO" ]] && exit 0
# ----------------------------------
# Nettoyage du répertoire : suppression des samples et renommage des espaces
# ----------------------------------
clean_dir() {
# Supprime tous les répertoires ou fichiers avec "sample" (n'importe quelle casse)
find "$file" -maxdepth 1 -iname '*sample*' -exec rm -rf {} +
# Renommage des espaces
rename 's/ /_/g' "$file"/* 2>/dev/null || true
}
# ----------------------------------
# Copie en hardlink
# ----------------------------------
copieorg() {
cp -rl "$1" "$2"
}
# ----------------------------------
# Suppression des accents
# ----------------------------------
remove_accents() {
echo "$1" | iconv -f utf8 -t ascii//TRANSLIT
}
# ----------------------------------
# Nettoyage du nom de fichier :
# - suppression du titre d'épisode
# - suppression de (TOS)
# - gestion des apostrophes + Majuscule suivante
# - conversion espaces/underscores en points
# - conservation uniquement des segments utiles
# - dernier segment préfixé par un tiret
# ----------------------------------
sanitize_name() {
# Extraction du nom de base et de l'extension
local filepath="$1"
local filename="$(basename "$filepath")"
local ext="${filename##*.}"
local name="${filename%.*}"
# On veut vérifier que name ne contient PAS lun des mots suivants
local upper_name="${name^^}"
# Si le nom est entièrement en minuscules
# OU ne contient aucun des mots-clés SUBFRENCH|TRUEFRENCH|FRENCH|MULTI|VOSTFR
if [[ "$name" == "${name,,}" ]] || ! [[ "$upper_name" =~ THEATRICAL|DIRECTOR|EXTENDED|REMASTERED|UNRATED|UNCENSORED|REPACK|PROPER|INTERNAL|FINAL|SUBFRENCH|TRUEFRENCH|FRENCH|MULTI|VFQ|VOSTFR ]]; then
local parent="$(basename "$(dirname "$filepath")")"
name="$(remove_accents "$parent")"
fi
# Translit accents
name="$(remove_accents "$name")"
# Normalisation des séparateurs
name="${name//[ _]/.}"
# Découpage en segments
IFS='.' read -ra parts <<< "$name"
local total=${#parts[@]}
local keep=()
local i j k
local marker_index=-1
local pattern
# --- 1) d'abord, on regarde si on a un SxxEyy quelque part ---
for ((i=0; i<total; i++)); do
if [[ "${parts[i]}" =~ ^[Ss][0-9]{2}[Ee][0-9]{2}$ ]]; then
marker_index=$i
pattern='^[Ss][0-9]{2}[Ee][0-9]{2}$'
break
fi
done
# --- 2) si pas de série, on cherche une année (film) ---
if (( marker_index < 0 )); then
for ((i=0; i<total; i++)); do
if [[ "${parts[i]}" =~ ^(19|20)[0-9]{2}$ ]]; then
marker_index=$i
pattern='^(19|20)[0-9]{2}$'
break
fi
done
fi
# --- 3) si on a trouvé un marqueur, on construit keep[] ---
if (( marker_index >= 0 )); then
# on garde tout jusqu'au marqueur inclus
keep=("${parts[@]:0:marker_index+1}")
# on cherche ensuite le premier tag qualité/langue
for ((j=marker_index+1; j<total; j++)); do
tag="${parts[j]^^}"
if [[ "$tag" =~ ^(REPACK|PROPER|INTERNAL|FINAL|SUBFRENCH|TRUEFRENCH|FRENCH|MULTI|VOSTFR)$ ]] \
|| [[ "$tag" =~ ^[0-9]{3,4}P$ ]]; then
# on ajoute tout à partir de ce tag
keep+=("${parts[@]:j}")
break
fi
done
else
# si pas de marqueur du tout, on garde tout
keep=("${parts[@]}")
fi
# reconstruire la base nettoyée
local out
out=$(IFS='.'; echo "${keep[*]}")
# nettoyage TOS, espaces, caractères interdits
out=$(echo "$out" | sed -e 's/(TOS)//Ig' -e 's/[ _]/./g' -e 's/[^A-Za-z0-9.-]//g')
# apostrophes + majuscule suivante avec perl
out=$(echo "$out" | perl -pe 's/'"'"'([A-Za-z])/.\U\1/g')
# forcer le "i" minuscule dans MULTI, FINAL et INTERNAL
out=${out//.MULTI./.MULTi.}
out=${out//.FINAL./.FiNAL.}
out=${out//.INTERNAL./.iNTERNAL.}
# Préfixe du dernier segment par un tiret uniquement si aucune autre tiret interne
local last="${out##*.}"
if [[ "$last" != *-* ]]; then
out="${out%.*}-$last"
fi
# Ajout de l'extension
printf "%s.%s" "$out" "$ext"
}
# ----------------------------------
# Traitement des .mkv uniquement
# ----------------------------------
process_mkv() {
local src="$1" dst="$2"
local out="$(sanitize_name "$src")"
copieorg "$src" "$dst/$out"
$BIN_PATH/postauto add "$dst/$out"
echo -e "${BLEU}OK:${NORMAL} $out ajouté"
log "$src -> $dst/$out"
}
# ----------------------------------
# Upload des .nfo avec renommage à la volée
# ----------------------------------
upload_nfo() {
local src="$1"
# Génère un nom nettoyé pour le NFO
local fn="$(sanitize_name "$src")"
# Envoie le nfo sous le nom nettoyé sans renommer le fichier sur disque
curl -s -k -L -m 60 \
-F "nfo=@${src};filename=${fn}" \
-F upload=upload "https://unfr.pw/nfos-upload"
log "UPLOAD NFO $src -> $fn"
}
# ----------------------------------
cd "$ORG_PATH" || exit 1
clean_dir "$file"
mapfile -d '' mkv_files < <(find "$file" -maxdepth 3 -type f -iname '*.mkv' -print0 | sort -z)
for mkv in "${mkv_files[@]}"; do
process_mkv "$mkv" "$FINAL_PATH"
done
mapfile -d '' nfo_files < <(find "$file" -maxdepth 3 -type f -iname '*.nfo' -print0)
for nfo in "${nfo_files[@]}"; do
upload_nfo "$nfo"
done
log "FIN DE TRAITEMENT"
log "-------------------------------"
exit 0