update radar and sonarr enpoints

This commit is contained in:
2026-04-26 01:19:32 -04:00
parent 3df4542351
commit e6a6bfd5e9
3 changed files with 65 additions and 14 deletions
+5 -2
View File
@@ -895,8 +895,11 @@ MEDIA_FILE_PATTERNS=(
# Protected patterns are NEVER deleted — cover art, metadata, subtitles generated by the arr
# are not included in the tracked file API response but must not be deleted.
#
# API versions: Sonarr v4 → /api/v3/ Radarr v6 → /api/v3/ Lidarr v3 → /api/v1/
# Lidarr runs on HOST1 only.
# API versions and endpoint patterns:
# Sonarr v4 → /api/v3/series (get IDs) → /api/v3/episodefile?seriesId=X per series
# Radarr v5 → /api/v3/movie (get IDs) → /api/v3/moviefile?movieId=X per movie
# Lidarr v3 → /api/v1/artist (get IDs) → /api/v1/trackFile?artistId=X per artist
# All require per-ID loops — bulk endpoints removed in newer versions
# ── Lidarr ────────────────────────────────────────────────────────────────────────────────────
HOST1_LIDARR_URL="http://192.168.50.2:8686"
+30 -6
View File
@@ -212,21 +212,45 @@ check_api "$RADARR_URL" "Radarr" || {
info "Querying Radarr API: $RADARR_URL"
MOVIEFILE_RESPONSE=$(radarr_api "moviefile") || {
error "Failed to fetch movie files from Radarr — check URL and API key"
# Step 1 — get all movies to extract IDs
MOVIES_RESPONSE=$(radarr_api "movie") || {
error "Failed to fetch movies from Radarr — check URL and API key"
notify "Radarr cleanup failed on $(hostname) — API unreachable" "Radarr Cleanup" "warning"
exit 1
}
MOVIE_IDS=$(echo "$MOVIES_RESPONSE" | jq -r '.[].id' 2>/dev/null)
MOVIE_COUNT=$(echo "$MOVIE_IDS" | grep -c . 2>/dev/null || echo 0)
info "Movies in Radarr: $MOVIE_COUNT"
if [[ "$MOVIE_COUNT" -eq 0 ]]; then
warn "No movies returned from Radarr — aborting to prevent mass deletion"
notify "Radarr cleanup aborted on $(hostname) — no movies returned from API" "Radarr Cleanup" "warning"
exit 1
fi
TMP_DIR="/tmp/radarr_cleanup_$$"
mkdir -p "$TMP_DIR"
trap "rm -rf $TMP_DIR" EXIT
TRACKED_FILE="$TMP_DIR/tracked_paths.txt"
while IFS= read -r api_path; do
[[ -z "$api_path" ]] && continue
translate_path "$api_path" >> "$TRACKED_FILE"
done < <(echo "$MOVIEFILE_RESPONSE" | jq -r '.[].path' 2>/dev/null)
> "$TRACKED_FILE"
# Step 2 — get movie files per movie ID
MOVIE_INDEX=0
while IFS= read -r movie_id; do
[[ -z "$movie_id" ]] && continue
((MOVIE_INDEX++))
[[ $(( MOVIE_INDEX % 100 )) -eq 0 ]] && info "Fetching files: $MOVIE_INDEX/$MOVIE_COUNT movies..."
MOVIE_FILES=$(radarr_api "moviefile?movieId=${movie_id}" 2>/dev/null)
if [[ -n "$MOVIE_FILES" ]]; then
while IFS= read -r api_path; do
[[ -z "$api_path" ]] && continue
translate_path "$api_path" >> "$TRACKED_FILE"
done < <(echo "$MOVIE_FILES" | jq -r '.[].path // .path' 2>/dev/null)
fi
done <<< "$MOVIE_IDS"
sort -u "$TRACKED_FILE" -o "$TRACKED_FILE"
TRACKED_COUNT=$(wc -l < "$TRACKED_FILE")
+30 -6
View File
@@ -212,21 +212,45 @@ check_api "$SONARR_URL" "Sonarr" || {
info "Querying Sonarr API: $SONARR_URL"
EPISODEFILE_RESPONSE=$(sonarr_api "episodefile") || {
error "Failed to fetch episode files from Sonarr — check URL and API key"
# Step 1 — get all series to extract IDs
SERIES_RESPONSE=$(sonarr_api "series") || {
error "Failed to fetch series from Sonarr — check URL and API key"
notify "Sonarr cleanup failed on $(hostname) — API unreachable" "Sonarr Cleanup" "warning"
exit 1
}
SERIES_IDS=$(echo "$SERIES_RESPONSE" | jq -r '.[].id' 2>/dev/null)
SERIES_COUNT=$(echo "$SERIES_IDS" | grep -c . 2>/dev/null || echo 0)
info "Series in Sonarr: $SERIES_COUNT"
if [[ "$SERIES_COUNT" -eq 0 ]]; then
warn "No series returned from Sonarr — aborting to prevent mass deletion"
notify "Sonarr cleanup aborted on $(hostname) — no series returned from API" "Sonarr Cleanup" "warning"
exit 1
fi
TMP_DIR="/tmp/sonarr_cleanup_$$"
mkdir -p "$TMP_DIR"
trap "rm -rf $TMP_DIR" EXIT
TRACKED_FILE="$TMP_DIR/tracked_paths.txt"
while IFS= read -r api_path; do
[[ -z "$api_path" ]] && continue
translate_path "$api_path" >> "$TRACKED_FILE"
done < <(echo "$EPISODEFILE_RESPONSE" | jq -r '.[].path' 2>/dev/null)
> "$TRACKED_FILE"
# Step 2 — get episode files per series ID
SERIES_INDEX=0
while IFS= read -r series_id; do
[[ -z "$series_id" ]] && continue
((SERIES_INDEX++))
[[ $(( SERIES_INDEX % 50 )) -eq 0 ]] && info "Fetching files: $SERIES_INDEX/$SERIES_COUNT series..."
SERIES_FILES=$(sonarr_api "episodefile?seriesId=${series_id}" 2>/dev/null)
if [[ -n "$SERIES_FILES" ]]; then
while IFS= read -r api_path; do
[[ -z "$api_path" ]] && continue
translate_path "$api_path" >> "$TRACKED_FILE"
done < <(echo "$SERIES_FILES" | jq -r '.[].path' 2>/dev/null)
fi
done <<< "$SERIES_IDS"
sort -u "$TRACKED_FILE" -o "$TRACKED_FILE"
TRACKED_COUNT=$(wc -l < "$TRACKED_FILE")