82 lines
2.8 KiB
Nix
82 lines
2.8 KiB
Nix
{ pkgs }:
|
|
|
|
pkgs.writeShellScriptBin "filebot-process" ''
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# FileBot AMC script for automated media organization
|
|
# Called by PyLoad's package_extracted hook with parameters:
|
|
# $1 = package_id
|
|
# $2 = package_name
|
|
# $3 = download_folder (actual path to extracted files)
|
|
# $4 = password (optional)
|
|
|
|
PACKAGE_ID="''${1:-}"
|
|
PACKAGE_NAME="''${2:-unknown}"
|
|
DOWNLOAD_DIR="''${3:-/downloads}"
|
|
PASSWORD="''${4:-}"
|
|
|
|
OUTPUT_DIR="/multimedia"
|
|
LOG_FILE="/var/lib/pyload/filebot-amc.log"
|
|
EXCLUDE_LIST="/var/lib/pyload/filebot-exclude-list.txt"
|
|
|
|
# Ensure FileBot data directory exists
|
|
mkdir -p /var/lib/pyload/.local/share/filebot/data
|
|
mkdir -p "$(dirname "$LOG_FILE")"
|
|
touch "$EXCLUDE_LIST"
|
|
|
|
# Install FileBot license if not already installed
|
|
if [ ! -f /var/lib/pyload/.local/share/filebot/data/.license ]; then
|
|
echo "$(date): Installing FileBot license..." >> "$LOG_FILE"
|
|
${pkgs.filebot}/bin/filebot --license /var/lib/pyload/filebot-license.psm || true
|
|
fi
|
|
|
|
echo "===========================================" >> "$LOG_FILE"
|
|
echo "$(date): PyLoad package extracted hook triggered" >> "$LOG_FILE"
|
|
echo "Package ID: $PACKAGE_ID" >> "$LOG_FILE"
|
|
echo "Package Name: $PACKAGE_NAME" >> "$LOG_FILE"
|
|
echo "Download Directory: $DOWNLOAD_DIR" >> "$LOG_FILE"
|
|
echo "===========================================" >> "$LOG_FILE"
|
|
|
|
# Check if download directory exists and has media files
|
|
if [ ! -d "$DOWNLOAD_DIR" ]; then
|
|
echo "$(date): Download directory does not exist: $DOWNLOAD_DIR" >> "$LOG_FILE"
|
|
exit 0
|
|
fi
|
|
|
|
# Check if there are any video/media files to process
|
|
if ! find "$DOWNLOAD_DIR" -type f \( -iname "*.mkv" -o -iname "*.mp4" -o -iname "*.avi" -o -iname "*.m4v" -o -iname "*.mov" \) -print -quit | grep -q .; then
|
|
echo "$(date): No media files found in: $DOWNLOAD_DIR" >> "$LOG_FILE"
|
|
echo "$(date): Skipping FileBot processing" >> "$LOG_FILE"
|
|
exit 0
|
|
fi
|
|
|
|
echo "$(date): Starting FileBot processing" >> "$LOG_FILE"
|
|
|
|
# Run FileBot AMC script
|
|
${pkgs.filebot}/bin/filebot \
|
|
-script fn:amc \
|
|
--output "$OUTPUT_DIR" \
|
|
--action move \
|
|
--conflict auto \
|
|
-non-strict \
|
|
--log-file "$LOG_FILE" \
|
|
--def \
|
|
excludeList="$EXCLUDE_LIST" \
|
|
movieFormat="$OUTPUT_DIR/movies/{n} ({y})/{n} ({y}) - {vf}" \
|
|
seriesFormat="$OUTPUT_DIR/tv-shows/{n}/Season {s.pad(2)}/{n} - {s00e00} - {t}" \
|
|
ut_dir="$DOWNLOAD_DIR" \
|
|
ut_kind=multi \
|
|
clean=y \
|
|
skipExtract=y || {
|
|
echo "$(date): FileBot processing failed with exit code $?" >> "$LOG_FILE"
|
|
exit 0 # Don't fail the hook even if FileBot fails
|
|
}
|
|
|
|
# Clean up empty directories
|
|
find "$DOWNLOAD_DIR" -type d -empty -delete 2>/dev/null || true
|
|
|
|
echo "$(date): FileBot processing completed successfully" >> "$LOG_FILE"
|
|
exit 0
|
|
''
|