update radar and sonarr enpoints
This commit is contained in:
+5
-2
@@ -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
@@ -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
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user