#!/bin/bash # Transmission-related functions for torrent-mover # get_destination: Maps a source directory to a destination directory based on keywords and patterns get_destination() { local source_path="$1" if [[ -n "${PATH_CACHE["${source_path}"]+x}" ]]; then echo "${PATH_CACHE["${source_path}"]}" return fi log_info "Analyzing path: ${source_path}" local destination="${DEFAULT_DST}" # Match using custom patterns from config file if they exist if [[ -n "${CUSTOM_PATTERNS}" ]]; then log_debug "Using custom patterns from config..." # Parse and apply each pattern IFS=';' read -ra PATTERN_ARRAY <<< "${CUSTOM_PATTERNS}" for pattern in "${PATTERN_ARRAY[@]}"; do IFS='=' read -ra PARTS <<< "${pattern}" if [[ "${#PARTS[@]}" -eq 2 ]]; then local regex="${PARTS[0]}" local dest="${PARTS[1]}" if [[ "${source_path,,}" =~ ${regex,,} ]]; then log_info "Custom pattern match: ${regex} -> ${dest}" destination="${dest}" break fi fi done fi # If no custom pattern matched, use default category mapping if [[ "${destination}" == "${DEFAULT_DST}" ]]; then case "${source_path,,}" in *games*) destination="${DIR_GAMES_DST}";; *apps*|*applications*|*programs*|*software*) destination="${DIR_APPS_DST}";; *movies*|*film*|*video*) destination="${DIR_MOVIES_DST}";; *books*|*ebook*|*pdf*|*epub*) destination="${DIR_BOOKS_DST}";; *tv*|*series*|*episode*) if [[ -n "${DIR_TV_DST}" ]]; then destination="${DIR_TV_DST}" else destination="${DIR_MOVIES_DST}" fi ;; *music*|*audio*|*mp3*|*flac*) if [[ -n "${DIR_MUSIC_DST}" ]]; then destination="${DIR_MUSIC_DST}" else destination="${DEFAULT_DST}" fi ;; esac fi log_info "Mapped to: ${destination}" PATH_CACHE["${source_path}"]="${destination}" echo "${destination}" } # process_removal: Removes a torrent via Transmission. process_removal() { local id="$1" if (( DRY_RUN )); then log_info "[DRY RUN] Would remove torrent ${id}" return fi retry_command "transmission-remote \"${TRANSMISSION_IP}:${TRANSMISSION_PORT}\" -n \"${TRANSMISSION_USER}:${TRANSMISSION_PASSWORD}\" -t \"${id}\" --remove-and-delete" 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}' } # 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 }