From e585ffe73ecd8b5d6106dce02934013062b03645 Mon Sep 17 00:00:00 2001 From: Anish Lakhwara Date: Sat, 13 Sep 2025 00:06:03 -0700 Subject: [PATCH] actually fix music --- hosts/box/default.nix | 1 + hosts/profiles/gonic/default.nix | 3 ++ hosts/profiles/sync/music/default.nix | 1 + hosts/profiles/sync/music/get-music.sh | 61 ++++++++++++++------------ 4 files changed, 39 insertions(+), 27 deletions(-) diff --git a/hosts/box/default.nix b/hosts/box/default.nix index 2c651928..6e73a783 100644 --- a/hosts/box/default.nix +++ b/hosts/box/default.nix @@ -18,6 +18,7 @@ ../profiles/wallabag ../profiles/finance ../profiles/sync/website + ../profiles/sync/music ../profiles/grasp # ../profiles/archivebox # ../profiles/woodpecker-agent diff --git a/hosts/profiles/gonic/default.nix b/hosts/profiles/gonic/default.nix index 1dd18e42..6c17e54f 100644 --- a/hosts/profiles/gonic/default.nix +++ b/hosts/profiles/gonic/default.nix @@ -1,11 +1,14 @@ { config, lib, pkgs, ... }: { + environment.systemPackages = [ pkgs.ffmpeg ]; mossnet.gonic.enable = true; mossnet.gonic.settings = '' music-path /mnt/two/music/ podcast-path /data/podcasts cache-path /data/cache playlists-path /data/playlists + transcode-cache-size 1000 + transcode-eject-interval 1440 ''; mossnet.gonic.user = "gonic"; mossnet.gonic.group = "audio"; diff --git a/hosts/profiles/sync/music/default.nix b/hosts/profiles/sync/music/default.nix index 461e9d6c..7e9c1be6 100644 --- a/hosts/profiles/sync/music/default.nix +++ b/hosts/profiles/sync/music/default.nix @@ -6,6 +6,7 @@ path = [ pkgs.coreutils pkgs.rsync + pkgs.beets ]; script = builtins.readFile ./get-music.sh; serviceConfig = { diff --git a/hosts/profiles/sync/music/get-music.sh b/hosts/profiles/sync/music/get-music.sh index 242cbe55..6d9faf4c 100755 --- a/hosts/profiles/sync/music/get-music.sh +++ b/hosts/profiles/sync/music/get-music.sh @@ -2,51 +2,58 @@ set -euo pipefail -REMOTE_HOST="anish@talos.feralhosting.com" +REMOTE_HOST="aynish@talos.feralhosting.com" REMOTE_PATH="private/transmission/data/" -LOCAL_PATH="/data/incoming" -TRACKING_FILE="/data/incoming/.downloaded_albums" -LOG_FILE="/data/incoming/download-log" +LOCAL_PATH="/mnt/two/incoming" +TRACKING_FILE="/mnt/two/incoming/.downloaded_albums" +LOG_FILE="/mnt/two/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 +echo "$(date): Checking for new albums on seedbox..." >>"$LOG_FILE" +REMOTE_ALBUMS=$(rsync --dry-run --list-only "$REMOTE_HOST:$REMOTE_PATH" | grep '^d' | awk '{$1=$2=$3=$4=""; sub(/^ +/, ""); print}' | grep -v '^\.') || true if [ -z "$REMOTE_ALBUMS" ]; then - echo "$(date): No albums found on remote server" >> "$LOG_FILE" - exit 0 + 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 [ -n "$album" ] && ! grep -qF "$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 + 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" +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")" + if [ -n "$album" ]; then + echo "$(date): Downloading $album" >>"$LOG_FILE" + if rsync -r --log-file="$LOG_FILE" "$REMOTE_HOST:$REMOTE_PATH$album/" "$LOCAL_PATH/$album/"; then + echo "$album" >>"$TRACKING_FILE" + echo "$(date): Successfully downloaded $album" >>"$LOG_FILE" -echo "$(date): Music sync completed" >> "$LOG_FILE" + # Import to beets + echo "$(date): Importing $album to beets..." >>"$LOG_FILE" + if beet -p fetchart import -m -l /home/anish/music.log -q -g "$LOCAL_PATH/$album"; then + echo "$(date): Successfully imported $album to beets" >>"$LOG_FILE" + else + echo "$(date): Failed to import $album to beets" >>"$LOG_FILE" + fi + else + echo "$(date): Failed to download $album" >>"$LOG_FILE" + fi + fi +done <<<"$(echo -e "$NEW_ALBUMS")" +echo "$(date): Music sync completed" >>"$LOG_FILE"