actually fix music

This commit is contained in:
Anish Lakhwara 2025-09-13 00:06:03 -07:00
parent d67ade06c8
commit e585ffe73e
4 changed files with 39 additions and 27 deletions

View file

@ -18,6 +18,7 @@
../profiles/wallabag ../profiles/wallabag
../profiles/finance ../profiles/finance
../profiles/sync/website ../profiles/sync/website
../profiles/sync/music
../profiles/grasp ../profiles/grasp
# ../profiles/archivebox # ../profiles/archivebox
# ../profiles/woodpecker-agent # ../profiles/woodpecker-agent

View file

@ -1,11 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
{ {
environment.systemPackages = [ pkgs.ffmpeg ];
mossnet.gonic.enable = true; mossnet.gonic.enable = true;
mossnet.gonic.settings = '' mossnet.gonic.settings = ''
music-path /mnt/two/music/ music-path /mnt/two/music/
podcast-path /data/podcasts podcast-path /data/podcasts
cache-path /data/cache cache-path /data/cache
playlists-path /data/playlists playlists-path /data/playlists
transcode-cache-size 1000
transcode-eject-interval 1440
''; '';
mossnet.gonic.user = "gonic"; mossnet.gonic.user = "gonic";
mossnet.gonic.group = "audio"; mossnet.gonic.group = "audio";

View file

@ -6,6 +6,7 @@
path = [ path = [
pkgs.coreutils pkgs.coreutils
pkgs.rsync pkgs.rsync
pkgs.beets
]; ];
script = builtins.readFile ./get-music.sh; script = builtins.readFile ./get-music.sh;
serviceConfig = { serviceConfig = {

View file

@ -2,51 +2,58 @@
set -euo pipefail set -euo pipefail
REMOTE_HOST="anish@talos.feralhosting.com" REMOTE_HOST="aynish@talos.feralhosting.com"
REMOTE_PATH="private/transmission/data/" REMOTE_PATH="private/transmission/data/"
LOCAL_PATH="/data/incoming" LOCAL_PATH="/mnt/two/incoming"
TRACKING_FILE="/data/incoming/.downloaded_albums" TRACKING_FILE="/mnt/two/incoming/.downloaded_albums"
LOG_FILE="/data/incoming/download-log" LOG_FILE="/mnt/two/incoming/download-log"
# Create tracking file if it doesn't exist # Create tracking file if it doesn't exist
touch "$TRACKING_FILE" touch "$TRACKING_FILE"
# Get list of albums on remote server # Get list of albums on remote server
echo "$(date): Checking for new albums on seedbox..." >> "$LOG_FILE" 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 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 if [ -z "$REMOTE_ALBUMS" ]; then
echo "$(date): No albums found on remote server" >> "$LOG_FILE" echo "$(date): No albums found on remote server" >>"$LOG_FILE"
exit 0 exit 0
fi fi
# Check each album against tracking file # Check each album against tracking file
NEW_ALBUMS="" NEW_ALBUMS=""
while IFS= read -r album; do while IFS= read -r album; do
if [ -n "$album" ] && ! grep -q "^$album$" "$TRACKING_FILE"; then if [ -n "$album" ] && ! grep -qF "$album" "$TRACKING_FILE"; then
NEW_ALBUMS="$NEW_ALBUMS$album\n" NEW_ALBUMS="$NEW_ALBUMS$album\n"
echo "$(date): Found new album: $album" >> "$LOG_FILE" echo "$(date): Found new album: $album" >>"$LOG_FILE"
fi fi
done <<< "$REMOTE_ALBUMS" done <<<"$REMOTE_ALBUMS"
if [ -z "$NEW_ALBUMS" ]; then if [ -z "$NEW_ALBUMS" ]; then
echo "$(date): No new albums to download" >> "$LOG_FILE" echo "$(date): No new albums to download" >>"$LOG_FILE"
exit 0 exit 0
fi fi
# Download new albums only # 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 while IFS= read -r album; do
if [ -n "$album" ]; then if [ -n "$album" ]; then
echo "$(date): Downloading $album" >> "$LOG_FILE" echo "$(date): Downloading $album" >>"$LOG_FILE"
if rsync -r --log-file="$LOG_FILE" "$REMOTE_HOST:$REMOTE_PATH$album/" "$LOCAL_PATH/"; then if rsync -r --log-file="$LOG_FILE" "$REMOTE_HOST:$REMOTE_PATH$album/" "$LOCAL_PATH/$album/"; then
echo "$album" >> "$TRACKING_FILE" echo "$album" >>"$TRACKING_FILE"
echo "$(date): Successfully downloaded $album" >> "$LOG_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" # 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"