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
|
# 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.
|
# 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/
|
# API versions and endpoint patterns:
|
||||||
# Lidarr runs on HOST1 only.
|
# 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 ────────────────────────────────────────────────────────────────────────────────────
|
# ── Lidarr ────────────────────────────────────────────────────────────────────────────────────
|
||||||
HOST1_LIDARR_URL="http://192.168.50.2:8686"
|
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"
|
info "Querying Radarr API: $RADARR_URL"
|
||||||
|
|
||||||
MOVIEFILE_RESPONSE=$(radarr_api "moviefile") || {
|
# Step 1 — get all movies to extract IDs
|
||||||
error "Failed to fetch movie files from Radarr — check URL and API key"
|
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"
|
notify "Radarr cleanup failed on $(hostname) — API unreachable" "Radarr Cleanup" "warning"
|
||||||
exit 1
|
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_$$"
|
TMP_DIR="/tmp/radarr_cleanup_$$"
|
||||||
mkdir -p "$TMP_DIR"
|
mkdir -p "$TMP_DIR"
|
||||||
trap "rm -rf $TMP_DIR" EXIT
|
trap "rm -rf $TMP_DIR" EXIT
|
||||||
|
|
||||||
TRACKED_FILE="$TMP_DIR/tracked_paths.txt"
|
TRACKED_FILE="$TMP_DIR/tracked_paths.txt"
|
||||||
while IFS= read -r api_path; do
|
> "$TRACKED_FILE"
|
||||||
[[ -z "$api_path" ]] && continue
|
|
||||||
translate_path "$api_path" >> "$TRACKED_FILE"
|
# Step 2 — get movie files per movie ID
|
||||||
done < <(echo "$MOVIEFILE_RESPONSE" | jq -r '.[].path' 2>/dev/null)
|
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"
|
sort -u "$TRACKED_FILE" -o "$TRACKED_FILE"
|
||||||
|
|
||||||
TRACKED_COUNT=$(wc -l < "$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"
|
info "Querying Sonarr API: $SONARR_URL"
|
||||||
|
|
||||||
EPISODEFILE_RESPONSE=$(sonarr_api "episodefile") || {
|
# Step 1 — get all series to extract IDs
|
||||||
error "Failed to fetch episode files from Sonarr — check URL and API key"
|
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"
|
notify "Sonarr cleanup failed on $(hostname) — API unreachable" "Sonarr Cleanup" "warning"
|
||||||
exit 1
|
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_$$"
|
TMP_DIR="/tmp/sonarr_cleanup_$$"
|
||||||
mkdir -p "$TMP_DIR"
|
mkdir -p "$TMP_DIR"
|
||||||
trap "rm -rf $TMP_DIR" EXIT
|
trap "rm -rf $TMP_DIR" EXIT
|
||||||
|
|
||||||
TRACKED_FILE="$TMP_DIR/tracked_paths.txt"
|
TRACKED_FILE="$TMP_DIR/tracked_paths.txt"
|
||||||
while IFS= read -r api_path; do
|
> "$TRACKED_FILE"
|
||||||
[[ -z "$api_path" ]] && continue
|
|
||||||
translate_path "$api_path" >> "$TRACKED_FILE"
|
# Step 2 — get episode files per series ID
|
||||||
done < <(echo "$EPISODEFILE_RESPONSE" | jq -r '.[].path' 2>/dev/null)
|
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"
|
sort -u "$TRACKED_FILE" -o "$TRACKED_FILE"
|
||||||
|
|
||||||
TRACKED_COUNT=$(wc -l < "$TRACKED_FILE")
|
TRACKED_COUNT=$(wc -l < "$TRACKED_FILE")
|
||||||
|
|||||||
Reference in New Issue
Block a user