#!/bin/bash ############################################################################### # Description: # qBittorrent external script that: # 1. Receives torrent name, root path and category from qBittorrent. # 2. Sends the torrent name to torrent_mqtt.py. # 3. Copies the torrent contents to mediahost via SCP. # 4. Logs all output to a timestamped logfile. # # Usage: # torrent_complete.sh # # qBittorrent configuration: # /home/lucas/scripts/serverhost/torrent_complete.sh "%N" "%R" "%L" # # Arguments: # $1 Torrent name # $2 Root path # $3 Torrent category # # Log files: # /home/lucas/.LOG/log_torrent_name_YYYY-MM-DD_HH-MM-SS.log # # Requirements: # - bash # - scp # - SSH access to "mediahost" # - /home/lucas/scripts/serverhost/torrent_mqtt.py ############################################################################### set -u SCRIPT_NAME="$(basename "$0")" ############################################################################### # Usage ############################################################################### usage() { cat < Description: Sends the torrent name to torrent_mqtt.py and copies the torrent contents to mediahost. Arguments: torrent_name Torrent name root_path Torrent root path category Torrent category Example: $SCRIPT_NAME "Ubuntu 24.04" "/downloads/Ubuntu 24.04" "Linux" qBittorrent: $SCRIPT_NAME "%N" "%R" "%L" EOF } ############################################################################### # Check arguments ############################################################################### if [[ $# -ne 3 ]]; then usage >&2 exit 1 fi TORRENT_NAME="$1" ROOT_PATH="$2" CATEGORY="$3" if [[ "$CATEGORY" != *arr* && "$CATEGORY" != "mytorrents" ]]; then ############################################################################### # Start ############################################################################### echo "==================================================" echo "Torrent transfer started" echo "Date: $(date)" echo "Script: $SCRIPT_NAME" echo "Torrent name: $TORRENT_NAME" echo "Root path: $ROOT_PATH" echo "Category: $CATEGORY" echo "==================================================" ############################################################################### # Check for scp command ############################################################################### if ! command -v scp >/dev/null 2>&1; then echo "Install scp" sed -i 's|http://|https://|g' /etc/apk/repositories for i in {1..12}; do if apk add --no-cache openssh-client; then break fi echo "Retry $i/12" sleep 5 done fi ############################################################################### # Send torrent name to MQTT script ############################################################################### echo echo "--- Sending torrent name to torrent_mqtt.py ---" /config/.venv/bin/python3 /config/torrent_mqtt.py "$TORRENT_NAME" MQTT_STATUS=$? echo "torrent_mqtt.py exit status: $MQTT_STATUS" ############################################################################### # Check root path ############################################################################### echo echo "--- Checking root path ---" if [[ ! -d "$ROOT_PATH" ]]; then echo "ERROR: Root path does not exist or is not a directory:" echo " $ROOT_PATH" exit 1 fi echo "Root path exists." ############################################################################### # Copy torrent to mediahost ############################################################################### basename_root=$(basename "$ROOT_PATH") echo $basename_root if [ "$basename_root" = "downloads" ]; then remote_dir="$TORRENT_NAME" else remote_dir="$basename_root" fi echo echo "--- Copying torrent to mediahost ---" echo "Source: $ROOT_PATH" echo "Destination: mediahost:/torrent/qbittorrent/mediahost/" ssh -i /config/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ lucas@mediahost "mkdir -p \"/torrent/qbittorrent/mediahost/$remote_dir\"" SSH_STATUS=$? scp -i /config/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ -r "$ROOT_PATH"/. lucas@mediahost:/torrent/qbittorrent/mediahost/$remote_dir/ SCP_STATUS=$? echo "scp exit status: $SCP_STATUS" ############################################################################### # Result ############################################################################### echo echo "==================================================" if [[ $MQTT_STATUS -ne 0 ]]; then echo "WARNING: torrent_mqtt.py failed." fi if [[ $SSH_STATUS -eq 0 ]]; then echo "Target Dir generated" else echo "ERROR: Target dir generation failed." fi if [[ $SCP_STATUS -eq 0 ]]; then echo "Torrent transfer completed successfully." else echo "ERROR: Torrent transfer failed." fi echo "Finished: $(date +'%y%m%d %H%M%Sr')" echo "==================================================" else echo "ARR handled torrent: $(date +'%y%m%d %H%M%S'): $TORRENT_NAME" fi # Return SCP's exit status to qBittorrent exit 0