#!/usr/bin/env bash set -euo pipefail REMOTE_HOST="aynish@talos.feralhosting.com" REMOTE_PATH="private/transmission/data/tv-sonarr/" LOCAL_PATH="/tank/media/tv" TRACKING_FILE="/tank/media/tv/.downloaded_shows" LOG_FILE="/tank/media/tv/download-log" # Create local directory and tracking file if they don't exist mkdir -p "$LOCAL_PATH" touch "$TRACKING_FILE" # Get list of shows on remote server echo "$(date): Checking for new TV shows on seedbox..." >>"$LOG_FILE" REMOTE_SHOWS=$(rsync --dry-run --list-only "$REMOTE_HOST:$REMOTE_PATH" | grep '^d' | awk '{$1=$2=$3=$4=""; sub(/^ +/, ""); print}' | grep -v '^\.') || true if [ -z "$REMOTE_SHOWS" ]; then echo "$(date): No shows found on remote server" >>"$LOG_FILE" exit 0 fi # Check each show against tracking file NEW_SHOWS="" while IFS= read -r show; do if [ -n "$show" ] && ! grep -qF "$show" "$TRACKING_FILE"; then NEW_SHOWS="$NEW_SHOWS$show\n" echo "$(date): Found new show: $show" >>"$LOG_FILE" fi done <<<"$REMOTE_SHOWS" if [ -z "$NEW_SHOWS" ]; then echo "$(date): No new shows to download" >>"$LOG_FILE" exit 0 fi # Download new shows only echo "$(date): Starting download of new shows..." >>"$LOG_FILE" while IFS= read -r show; do if [ -n "$show" ]; then echo "$(date): Downloading $show" >>"$LOG_FILE" # Set umask to allow group read/write access for Jellyfin umask 002 if rsync -r --log-file="$LOG_FILE" "$REMOTE_HOST:$REMOTE_PATH$show/" "$LOCAL_PATH/$show/"; then echo "$show" >>"$TRACKING_FILE" echo "$(date): Successfully downloaded $show" >>"$LOG_FILE" else echo "$(date): Failed to download $show" >>"$LOG_FILE" fi fi done <<<"$(echo -e "$NEW_SHOWS")" # Trigger Jellyfin library scan echo "$(date): Triggering Jellyfin library refresh..." >>"$LOG_FILE" if curl -s -X POST "http://localhost:8096/Library/Refresh" \ -H "X-Emby-Token: aef1b1e0cd5445dc97b755ef8c6224e5"; then echo "$(date): Jellyfin library refresh triggered" >>"$LOG_FILE" else echo "$(date): Failed to trigger Jellyfin library refresh" >>"$LOG_FILE" fi echo "$(date): TV sync completed" >>"$LOG_FILE"