mirror of
https://codeberg.org/hyperreal/admin-scripts
synced 2024-11-29 11:03:41 +01:00
228 lines
8.3 KiB
Bash
228 lines
8.3 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
# qbth - qbittorrent helper
|
||
|
|
||
|
# Dependency check
|
||
|
missing_deps=()
|
||
|
for bin in "gum" "jq" "lynx" "parallel" "qbt"; do
|
||
|
if ! test -x "$(command -v $bin)"; then
|
||
|
missing_deps+=("$bin")
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if (( "${#missing_deps[@]}" != 0 )); then
|
||
|
echo "Missing dependencies:" "${missing_deps[@]}"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Add torrent
|
||
|
function add_torrents() {
|
||
|
torrents=("$@")
|
||
|
|
||
|
if ! parallel qbt torrent add url --category "distro" ::: "${torrents[@]}"; then
|
||
|
gum log -l error "Error adding torrents"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
for url in "${torrents[@]}"; do gum log -l info "Added" "$(basename "$url")"; done
|
||
|
}
|
||
|
|
||
|
function delete_torrents() {
|
||
|
if test -n "$1"; then
|
||
|
echo "$1" | parallel "qbt torrent delete --with-files {}"
|
||
|
echo "$1" | xargs -I _ gum log -l info "Deleted" _
|
||
|
else
|
||
|
gum log -l warn "Nothing to do."
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
export -f add_torrents
|
||
|
export -f delete_torrents
|
||
|
|
||
|
distro_selection=$(gum choose --limit=1 --header="Available torrents" --height=13 "AlmaLinux" "Debian" "Devuan" "Fedora" "FreeBSD" "Kali Linux" "NetBSD" "NixOS" "Qubes" "Rocky Linux" "Tails")
|
||
|
action=$(gum choose --limit=1 --header="Choose an action: Add, Delete" "Add" "Delete")
|
||
|
relver=$(gum input --placeholder="Enter $distro_selection release version")
|
||
|
|
||
|
case "$distro_selection" in
|
||
|
"AlmaLinux")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
urls=(
|
||
|
"https://almalinux-mirror.dal1.hivelocity.net/${relver}/isos/aarch64/AlmaLinux-${relver}-aarch64.torrent"
|
||
|
"https://almalinux-mirror.dal1.hivelocity.net/${relver}/isos/ppc64le/AlmaLinux-${relver}-ppc64le.torrent"
|
||
|
"https://almalinux-mirror.dal1.hivelocity.net/${relver}/isos/s390x/AlmaLinux-${relver}-s390x.torrent"
|
||
|
"https://almalinux-mirror.dal1.hivelocity.net/${relver}/isos/x86_64/AlmaLinux-${relver}-x86_64.torrent"
|
||
|
)
|
||
|
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="AlmaLinux-$relver" -F, '$0~pat{print $1}')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"Debian")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
urls=(
|
||
|
"https://cdimage.debian.org/debian-cd/current/amd64/bt-dvd/debian-${relver}-amd64-DVD-1.iso.torrent"
|
||
|
"https://cdimage.debian.org/debian-cd/current/arm64/bt-dvd/debian-${relver}-arm64-DVD-1.iso.torrent"
|
||
|
"https://cdimage.debian.org/debian-cd/current/armel/bt-dvd/debian-${relver}-armel-DVD-1.iso.torrent"
|
||
|
"https://cdimage.debian.org/debian-cd/current/armhf/bt-dvd/debian-${relver}-armhf-DVD-1.iso.torrent"
|
||
|
"https://cdimage.debian.org/debian-cd/current/mips64el/bt-dvd/debian-${relver}-mips64el-DVD-1.iso.torrent"
|
||
|
"https://cdimage.debian.org/debian-cd/current/mipsel/bt-dvd/debian-${relver}-mipsel-DVD-1.iso.torrent"
|
||
|
"https://cdimage.debian.org/debian-cd/current/ppc64el/bt-dvd/debian-${relver}-ppc64el-DVD-1.iso.torrent"
|
||
|
"https://cdimage.debian.org/debian-cd/current/s390x/bt-dvd/debian-${relver}-s390x-DVD-1.iso.torrent"
|
||
|
)
|
||
|
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="debian-$relver" -F, '$0~pat{print $1}')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"Devuan")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
urls=("https://files.devuan.org/devuan_${relver}.torrent")
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hash=$(qbt torrent list -F csv | awk -v pat="devuan_$relver" -F, '$0~pat{print $1}')
|
||
|
delete_torrents "$torrent_hash"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"Fedora")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
mapfile -t urls < <(lynx -dump -listonly=on -nonumbers "https://torrent.fedoraproject.org/" | grep "${relver}.torrent")
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
# TODO: Fix this. I suspect it has to do with the $relver not expanding in the jq input.
|
||
|
torrent_hashes=$(qbt torrent list -F json | jq '.[] | select(.name | startswith("Fedora") and endswith("$relver")) | .hash' | tr -d '"')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"FreeBSD")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
mapfile -t urls < <(curl -sSL "https://people.freebsd.org/~jmg/FreeBSD-${relver}-R-magnet.txt" | grep "magnet:")
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="FreeBSD-$relver" -F, '$0~pat{print $1}')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"Kali Linux")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
mapfile -t urls < <(lynx -dump -listonly=on -nonumbers https://kali.download/base-images/current/ | grep ".torrent")
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hashes=$(qbt torrent list -F json | jq '.[] | select(.name | contains("kali")) | .hash' | tr -d '"')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"NetBSD")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
mapfile -t urls < <(lynx -dump -listonly=on -nonumbers "https://cdn.netbsd.org/pub/NetBSD/NetBSD-${relver}/images/" | grep ".torrent")
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="NetBSD-$relver" -F, '$0~pat{print $1}')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"NixOS")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
mapfile -t urls < <(curl -sSL https://api.github.com/repos/AnimMouse/NixOS-ISO-Torrents/releases/latest | jq '.assets[].browser_download_url' | tr -d '"')
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hashes=$(qbt torrent list -F json | jq '.[] | select(.name | contains("nixos")) | .hash' | tr -d '"')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"Qubes")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
urls=("https://mirrors.edge.kernel.org/qubes/iso/Qubes-R${relver}-x86_64.torrent")
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hash=$(qbt torrent list -F csv | awk -v pat="Qubes-R$relver" -F, '$0~pat{print $1}')
|
||
|
delete_torrents "$torrent_hash"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"Rocky Linux")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
urls=(
|
||
|
"https://download.rockylinux.org/pub/rocky/${relver}/isos/aarch64/Rocky-${relver}-aarch64-dvd.torrent"
|
||
|
"https://download.rockylinux.org/pub/rocky/${relver}/isos/ppc64le/Rocky-${relver}-ppc64le-dvd.torrent"
|
||
|
"https://download.rockylinux.org/pub/rocky/${relver}/isos/s390x/Rocky-${relver}-s390x-dvd.torrent"
|
||
|
"https://download.rockylinux.org/pub/rocky/${relver}/isos/x86_64/Rocky-${relver}-x86_64-dvd.torrent"
|
||
|
)
|
||
|
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="Rocky-$relver" -F, '$0~pat{print $1}')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
|
||
|
"Tails")
|
||
|
case "$action" in
|
||
|
"Add")
|
||
|
urls=(
|
||
|
"https://tails.net/torrents/files/tails-amd64-${relver}.img.torrent"
|
||
|
"https://tails.net/torrents/files/tails-amd64-${relver}.iso.torrent"
|
||
|
)
|
||
|
|
||
|
add_torrents "${urls[@]}"
|
||
|
;;
|
||
|
|
||
|
"Delete")
|
||
|
torrent_hashes=$(qbt torrent list -F json | jq '.[] | select(.name | contains("tails")) | .hash' | tr -d '"')
|
||
|
delete_torrents "$torrent_hashes"
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
esac
|