Fix torrent processing issues in transmission_handler.sh
- Fix quote handling in transmission-remote commands - Add robust handling for empty torrent IDs - Improve path handling for empty directories - Update version to 9.1 with shared directory handling - Fix empty array subscript errors On branch main Your branch is up to date with 'origin/main'. Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: README.md modified: etc/torrent/mover.conf modified: install.sh new file: usr/local/bin/smart-processor modified: usr/local/bin/torrent-mover new file: usr/local/bin/torrent-processor modified: usr/local/lib/torrent-mover/common.sh modified: usr/local/lib/torrent-mover/transmission_handler.sh
This commit is contained in:
@@ -18,23 +18,31 @@ declare -A PATH_CACHE
|
||||
log_debug() {
|
||||
if [[ "${DEBUG}" -eq 1 ]]; then
|
||||
echo -e "[DEBUG] $(date '+%F %T') - $*" | tee -a "${LOG_FILE}" >&2
|
||||
[[ "${USE_SYSLOG}" == "true" ]] && logger -t torrent-mover "[DEBUG] $*"
|
||||
if [[ "${USE_SYSLOG}" == "true" ]]; then
|
||||
logger -t torrent-mover "[DEBUG] $*" || true
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
log_info() {
|
||||
echo -e "[INFO] $(date '+%F %T') - $*" | tee -a "${LOG_FILE}" >&2
|
||||
[[ "${USE_SYSLOG}" == "true" ]] && logger -t torrent-mover "[INFO] $*"
|
||||
if [[ "${USE_SYSLOG}" == "true" ]]; then
|
||||
logger -t torrent-mover "[INFO] $*" || true
|
||||
fi
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "[WARN] $(date '+%F %T') - $*" | tee -a "${LOG_FILE}" >&2
|
||||
[[ "${USE_SYSLOG}" == "true" ]] && logger -t torrent-mover "[WARN] $*"
|
||||
if [[ "${USE_SYSLOG}" == "true" ]]; then
|
||||
logger -t torrent-mover "[WARN] $*" || true
|
||||
fi
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "[ERROR] $(date '+%F %T') - $*" | tee -a "${LOG_FILE}" >&2
|
||||
[[ "${USE_SYSLOG}" == "true" ]] && logger -t torrent-mover "[ERROR] $*"
|
||||
if [[ "${USE_SYSLOG}" == "true" ]]; then
|
||||
logger -t torrent-mover "[ERROR] $*" || true
|
||||
fi
|
||||
}
|
||||
|
||||
# Error Handling & Notifications
|
||||
@@ -93,20 +101,42 @@ check_dependencies() {
|
||||
check_disk_usage() {
|
||||
local dir="$1"
|
||||
[[ -z "${dir}" ]] && return
|
||||
|
||||
log_debug "Checking disk usage for directory: ${dir}"
|
||||
|
||||
if ! df -P "${dir}" &>/dev/null; then
|
||||
log_warn "Directory not found: ${dir}"
|
||||
return
|
||||
fi
|
||||
|
||||
local mount_point
|
||||
mount_point=$(df -P "${dir}" | awk 'NR==2 {print $6}')
|
||||
[[ -z "${mount_point}" ]] && return
|
||||
if [[ -z "${CHECKED_MOUNTS["${mount_point}"]+x}" ]]; then
|
||||
|
||||
if [[ -z "${mount_point}" ]]; then
|
||||
log_warn "Could not determine mount point for: ${dir}"
|
||||
return
|
||||
fi
|
||||
|
||||
log_debug "Mount point for ${dir} is ${mount_point}"
|
||||
|
||||
# Initialize CHECKED_MOUNTS as an empty array if not already done
|
||||
if [[ -z "${CHECKED_MOUNTS+x}" ]]; then
|
||||
declare -A CHECKED_MOUNTS
|
||||
fi
|
||||
|
||||
# Check if we've already checked this mount point
|
||||
if [[ -z "${CHECKED_MOUNTS[${mount_point}]+x}" ]]; then
|
||||
local usage
|
||||
usage=$(df -P "${dir}" | awk 'NR==2 {sub(/%/, "", $5); print $5}')
|
||||
log_debug "Usage for ${mount_point}: ${usage}%"
|
||||
|
||||
if (( usage >= 90 )); then
|
||||
log_warn "Storage warning: ${mount_point} at ${usage}% capacity"
|
||||
fi
|
||||
CHECKED_MOUNTS["${mount_point}"]=1
|
||||
|
||||
CHECKED_MOUNTS[${mount_point}]=1
|
||||
else
|
||||
log_debug "Mount point ${mount_point} already checked"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,13 @@
|
||||
# get_destination: Maps a source directory to a destination directory based on keywords and patterns
|
||||
get_destination() {
|
||||
local source_path="$1"
|
||||
|
||||
# Check if source_path is valid before accessing the array
|
||||
if [[ -z "${source_path}" ]]; then
|
||||
log_warn "Empty source path provided to get_destination"
|
||||
return "${DEFAULT_DST}"
|
||||
fi
|
||||
|
||||
if [[ -n "${PATH_CACHE["${source_path}"]+x}" ]]; then
|
||||
echo "${PATH_CACHE["${source_path}"]}"
|
||||
return
|
||||
@@ -56,7 +63,12 @@ get_destination() {
|
||||
fi
|
||||
|
||||
log_info "Mapped to: ${destination}"
|
||||
PATH_CACHE["${source_path}"]="${destination}"
|
||||
|
||||
# Only set in cache if source_path is not empty
|
||||
if [[ -n "${source_path}" ]]; then
|
||||
PATH_CACHE["${source_path}"]="${destination}"
|
||||
fi
|
||||
|
||||
echo "${destination}"
|
||||
}
|
||||
|
||||
@@ -68,17 +80,26 @@ process_removal() {
|
||||
return
|
||||
fi
|
||||
|
||||
retry_command "transmission-remote \"${TRANSMISSION_IP}:${TRANSMISSION_PORT}\" -n \"${TRANSMISSION_USER}:${TRANSMISSION_PASSWORD}\" -t \"${id}\" --remove-and-delete" 3 15
|
||||
local cmd="transmission-remote ${TRANSMISSION_IP}:${TRANSMISSION_PORT} -n ${TRANSMISSION_USER}:${TRANSMISSION_PASSWORD} -t ${id} --remove-and-delete"
|
||||
retry_command "$cmd" 3 15
|
||||
}
|
||||
|
||||
# get_torrents: Retrieves a list of torrents from Transmission
|
||||
get_torrents() {
|
||||
retry_command "transmission-remote \"${TRANSMISSION_IP}:${TRANSMISSION_PORT}\" -n \"${TRANSMISSION_USER}:${TRANSMISSION_PASSWORD}\" -l" 3 20 |
|
||||
awk 'NR>1 && $1 ~ /^[0-9]+$/ {print $1}'
|
||||
local cmd="transmission-remote ${TRANSMISSION_IP}:${TRANSMISSION_PORT} -n ${TRANSMISSION_USER}:${TRANSMISSION_PASSWORD} -l"
|
||||
log_debug "Running command: $cmd"
|
||||
local output
|
||||
output=$(retry_command "$cmd" 3 20)
|
||||
|
||||
# Extract IDs directly using awk
|
||||
# Skip the header line (NR>1) and print the first column
|
||||
# The IDs are right-aligned with spaces in front, so we need to trim them
|
||||
echo "$output" | awk 'NR>1 && NF>1 {gsub(/^[ ]+/, "", $1); if ($1 ~ /^[0-9]+$/) print $1}'
|
||||
}
|
||||
|
||||
# get_torrent_info: Gets detailed info for a specific torrent
|
||||
get_torrent_info() {
|
||||
local id="$1"
|
||||
retry_command "transmission-remote \"${TRANSMISSION_IP}:${TRANSMISSION_PORT}\" -n \"${TRANSMISSION_USER}:${TRANSMISSION_PASSWORD}\" -t \"${id}\" -i" 3 15
|
||||
local cmd="transmission-remote ${TRANSMISSION_IP}:${TRANSMISSION_PORT} -n ${TRANSMISSION_USER}:${TRANSMISSION_PASSWORD} -t ${id} -i"
|
||||
retry_command "$cmd" 3 15
|
||||
}
|
||||
Reference in New Issue
Block a user