From d67ade06c802b4bd29890e0805ba1e319886a705 Mon Sep 17 00:00:00 2001 From: Anish Lakhwara Date: Fri, 12 Sep 2025 16:48:03 -0700 Subject: [PATCH] fix: music downloads --- hosts/profiles/sync/music/default.nix | 2 +- hosts/profiles/sync/music/get-music.sh | 55 +++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 7 deletions(-) mode change 100644 => 100755 hosts/profiles/sync/music/get-music.sh diff --git a/hosts/profiles/sync/music/default.nix b/hosts/profiles/sync/music/default.nix index 4c070e43..461e9d6c 100644 --- a/hosts/profiles/sync/music/default.nix +++ b/hosts/profiles/sync/music/default.nix @@ -15,6 +15,6 @@ systemd.timers.get-music-timer = { wantedBy = [ "timers.target" ]; partOf = [ "get-music-sync.service" ]; - timerConfig.OnCalendar = [ "daily" ]; + timerConfig.OnCalendar = [ "hourly" ]; }; } diff --git a/hosts/profiles/sync/music/get-music.sh b/hosts/profiles/sync/music/get-music.sh old mode 100644 new mode 100755 index 2269bb89..242cbe55 --- a/hosts/profiles/sync/music/get-music.sh +++ b/hosts/profiles/sync/music/get-music.sh @@ -1,9 +1,52 @@ #!/usr/bin/env bash -rsync -r --ignore-existing --log-file=/data/incoming/download-log hypercube@talos.feralhosting.com:private/transmission/data/* /data/incoming -# you need to set defaults for beets -# if already imported -> Skip -# Auto accept changes -# also install it lmao -#beet import /data/incoming +set -euo pipefail + +REMOTE_HOST="anish@talos.feralhosting.com" +REMOTE_PATH="private/transmission/data/" +LOCAL_PATH="/data/incoming" +TRACKING_FILE="/data/incoming/.downloaded_albums" +LOG_FILE="/data/incoming/download-log" + +# Create tracking file if it doesn't exist +touch "$TRACKING_FILE" + +# Get list of albums on remote server +echo "$(date): Checking for new albums on seedbox..." >> "$LOG_FILE" +REMOTE_ALBUMS=$(rsync --dry-run --list-only "$REMOTE_HOST:$REMOTE_PATH" | grep '^d' | awk '{print $5}' | grep -v '^\.') || true + +if [ -z "$REMOTE_ALBUMS" ]; then + echo "$(date): No albums found on remote server" >> "$LOG_FILE" + exit 0 +fi + +# Check each album against tracking file +NEW_ALBUMS="" +while IFS= read -r album; do + if [ -n "$album" ] && ! grep -q "^$album$" "$TRACKING_FILE"; then + NEW_ALBUMS="$NEW_ALBUMS$album\n" + echo "$(date): Found new album: $album" >> "$LOG_FILE" + fi +done <<< "$REMOTE_ALBUMS" + +if [ -z "$NEW_ALBUMS" ]; then + echo "$(date): No new albums to download" >> "$LOG_FILE" + exit 0 +fi + +# Download new albums only +echo "$(date): Starting download of new albums..." >> "$LOG_FILE" +while IFS= read -r album; do + if [ -n "$album" ]; then + echo "$(date): Downloading $album" >> "$LOG_FILE" + if rsync -r --log-file="$LOG_FILE" "$REMOTE_HOST:$REMOTE_PATH$album/" "$LOCAL_PATH/"; then + echo "$album" >> "$TRACKING_FILE" + echo "$(date): Successfully downloaded $album" >> "$LOG_FILE" + else + echo "$(date): Failed to download $album" >> "$LOG_FILE" + fi + fi +done <<< "$(echo -e "$NEW_ALBUMS")" + +echo "$(date): Music sync completed" >> "$LOG_FILE"