84 lines
3.1 KiB
Bash
84 lines
3.1 KiB
Bash
#!/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
|
|
} |