actually fix music

Changed files
+39 -27
hosts
box
profiles
+1
hosts/box/default.nix
··· 18 18 ../profiles/wallabag 19 19 ../profiles/finance 20 20 ../profiles/sync/website 21 + ../profiles/sync/music 21 22 ../profiles/grasp 22 23 # ../profiles/archivebox 23 24 # ../profiles/woodpecker-agent
+3
hosts/profiles/gonic/default.nix
··· 1 1 { config, lib, pkgs, ... }: 2 2 { 3 + environment.systemPackages = [ pkgs.ffmpeg ]; 3 4 mossnet.gonic.enable = true; 4 5 mossnet.gonic.settings = '' 5 6 music-path /mnt/two/music/ 6 7 podcast-path /data/podcasts 7 8 cache-path /data/cache 8 9 playlists-path /data/playlists 10 + transcode-cache-size 1000 11 + transcode-eject-interval 1440 9 12 ''; 10 13 mossnet.gonic.user = "gonic"; 11 14 mossnet.gonic.group = "audio";
+1
hosts/profiles/sync/music/default.nix
··· 6 6 path = [ 7 7 pkgs.coreutils 8 8 pkgs.rsync 9 + pkgs.beets 9 10 ]; 10 11 script = builtins.readFile ./get-music.sh; 11 12 serviceConfig = {
+34 -27
hosts/profiles/sync/music/get-music.sh
··· 2 2 3 3 set -euo pipefail 4 4 5 - REMOTE_HOST="anish@talos.feralhosting.com" 5 + REMOTE_HOST="aynish@talos.feralhosting.com" 6 6 REMOTE_PATH="private/transmission/data/" 7 - LOCAL_PATH="/data/incoming" 8 - TRACKING_FILE="/data/incoming/.downloaded_albums" 9 - LOG_FILE="/data/incoming/download-log" 7 + LOCAL_PATH="/mnt/two/incoming" 8 + TRACKING_FILE="/mnt/two/incoming/.downloaded_albums" 9 + LOG_FILE="/mnt/two/incoming/download-log" 10 10 11 11 # Create tracking file if it doesn't exist 12 12 touch "$TRACKING_FILE" 13 13 14 14 # Get list of albums on remote server 15 - echo "$(date): Checking for new albums on seedbox..." >> "$LOG_FILE" 16 - REMOTE_ALBUMS=$(rsync --dry-run --list-only "$REMOTE_HOST:$REMOTE_PATH" | grep '^d' | awk '{print $5}' | grep -v '^\.') || true 15 + echo "$(date): Checking for new albums on seedbox..." >>"$LOG_FILE" 16 + REMOTE_ALBUMS=$(rsync --dry-run --list-only "$REMOTE_HOST:$REMOTE_PATH" | grep '^d' | awk '{$1=$2=$3=$4=""; sub(/^ +/, ""); print}' | grep -v '^\.') || true 17 17 18 18 if [ -z "$REMOTE_ALBUMS" ]; then 19 - echo "$(date): No albums found on remote server" >> "$LOG_FILE" 20 - exit 0 19 + echo "$(date): No albums found on remote server" >>"$LOG_FILE" 20 + exit 0 21 21 fi 22 22 23 23 # Check each album against tracking file 24 24 NEW_ALBUMS="" 25 25 while IFS= read -r album; do 26 - if [ -n "$album" ] && ! grep -q "^$album$" "$TRACKING_FILE"; then 27 - NEW_ALBUMS="$NEW_ALBUMS$album\n" 28 - echo "$(date): Found new album: $album" >> "$LOG_FILE" 29 - fi 30 - done <<< "$REMOTE_ALBUMS" 26 + if [ -n "$album" ] && ! grep -qF "$album" "$TRACKING_FILE"; then 27 + NEW_ALBUMS="$NEW_ALBUMS$album\n" 28 + echo "$(date): Found new album: $album" >>"$LOG_FILE" 29 + fi 30 + done <<<"$REMOTE_ALBUMS" 31 31 32 32 if [ -z "$NEW_ALBUMS" ]; then 33 - echo "$(date): No new albums to download" >> "$LOG_FILE" 34 - exit 0 33 + echo "$(date): No new albums to download" >>"$LOG_FILE" 34 + exit 0 35 35 fi 36 36 37 37 # Download new albums only 38 - echo "$(date): Starting download of new albums..." >> "$LOG_FILE" 38 + echo "$(date): Starting download of new albums..." >>"$LOG_FILE" 39 39 while IFS= read -r album; do 40 - if [ -n "$album" ]; then 41 - echo "$(date): Downloading $album" >> "$LOG_FILE" 42 - if rsync -r --log-file="$LOG_FILE" "$REMOTE_HOST:$REMOTE_PATH$album/" "$LOCAL_PATH/"; then 43 - echo "$album" >> "$TRACKING_FILE" 44 - echo "$(date): Successfully downloaded $album" >> "$LOG_FILE" 45 - else 46 - echo "$(date): Failed to download $album" >> "$LOG_FILE" 47 - fi 48 - fi 49 - done <<< "$(echo -e "$NEW_ALBUMS")" 40 + if [ -n "$album" ]; then 41 + echo "$(date): Downloading $album" >>"$LOG_FILE" 42 + if rsync -r --log-file="$LOG_FILE" "$REMOTE_HOST:$REMOTE_PATH$album/" "$LOCAL_PATH/$album/"; then 43 + echo "$album" >>"$TRACKING_FILE" 44 + echo "$(date): Successfully downloaded $album" >>"$LOG_FILE" 50 45 51 - echo "$(date): Music sync completed" >> "$LOG_FILE" 46 + # Import to beets 47 + echo "$(date): Importing $album to beets..." >>"$LOG_FILE" 48 + if beet -p fetchart import -m -l /home/anish/music.log -q -g "$LOCAL_PATH/$album"; then 49 + echo "$(date): Successfully imported $album to beets" >>"$LOG_FILE" 50 + else 51 + echo "$(date): Failed to import $album to beets" >>"$LOG_FILE" 52 + fi 53 + else 54 + echo "$(date): Failed to download $album" >>"$LOG_FILE" 55 + fi 56 + fi 57 + done <<<"$(echo -e "$NEW_ALBUMS")" 52 58 59 + echo "$(date): Music sync completed" >>"$LOG_FILE"