mirror of
https://codeberg.org/hyperreal/admin-scripts
synced 2024-11-25 17:13:41 +01:00
Rewrite qbth in Python
This commit is contained in:
parent
6b44c86915
commit
5906ca9afe
227
bin/.archived/qbth.bash
Executable file
227
bin/.archived/qbth.bash
Executable file
@ -0,0 +1,227 @@
|
|||||||
|
#!/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
|
451
bin/qbth
451
bin/qbth
@ -1,227 +1,294 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# qbth - qbittorrent helper
|
import json
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
# Dependency check
|
import requests
|
||||||
missing_deps=()
|
from bs4 import BeautifulSoup
|
||||||
for bin in "gum" "jq" "lynx" "parallel" "qbt"; do
|
from qbittorrent import Client
|
||||||
if ! test -x "$(command -v $bin)"; then
|
|
||||||
missing_deps+=("$bin")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if (( "${#missing_deps[@]}" != 0 )); then
|
qb = Client("http://localhost:8080/")
|
||||||
echo "Missing dependencies:" "${missing_deps[@]}"
|
qb.login()
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add torrent
|
|
||||||
function add_torrents() {
|
|
||||||
torrents=("$@")
|
|
||||||
|
|
||||||
if ! parallel qbt torrent add url --category "distro" ::: "${torrents[@]}"; then
|
def add_torrents(urls):
|
||||||
gum log -l error "Error adding torrents"
|
for url in urls:
|
||||||
exit 1
|
qb.download_from_link(url, category="distro")
|
||||||
fi
|
print(f"Added {os.path.basename(url)}")
|
||||||
|
|
||||||
for url in "${torrents[@]}"; do gum log -l info "Added" "$(basename "$url")"; done
|
|
||||||
}
|
|
||||||
|
|
||||||
function delete_torrents() {
|
def add_torrents_from_html(webpage_url: str, torrent_substring: str):
|
||||||
if test -n "$1"; then
|
reqs = requests.get(webpage_url)
|
||||||
echo "$1" | parallel "qbt torrent delete --with-files {}"
|
soup = BeautifulSoup(reqs.text, "html.parser")
|
||||||
echo "$1" | xargs -I _ gum log -l info "Deleted" _
|
for link in soup.find_all("a"):
|
||||||
else
|
if torrent_substring in link.get("href"):
|
||||||
gum log -l warn "Nothing to do."
|
url = f"{webpage_url}/{link.get("href")}"
|
||||||
fi
|
qb.download_from_link(url, category="distro")
|
||||||
}
|
print(f"Added {link.get("href")}")
|
||||||
|
|
||||||
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")
|
def remove_torrents(distro_substring: str):
|
||||||
action=$(gum choose --limit=1 --header="Choose an action: Add, Delete" "Add" "Delete")
|
torrents = qb.torrents()
|
||||||
relver=$(gum input --placeholder="Enter $distro_selection release version")
|
for torrent in torrents:
|
||||||
|
if distro_substring in torrent["name"]:
|
||||||
|
qb.delete_permanently(torrent["hash"])
|
||||||
|
print(f"Removed {torrent["name"]}")
|
||||||
|
|
||||||
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[@]}"
|
def add_almalinux(relver: str):
|
||||||
;;
|
urls = [
|
||||||
|
f"https://almalinux-mirror.dal1.hivelocity.net/{relver}/isos/aarch64/AlmaLinux-{relver}-aarch64.torrent",
|
||||||
|
f"https://almalinux-mirror.dal1.hivelocity.net/{relver}/isos/ppc64le/AlmaLinux-{relver}-ppc64le.torrent",
|
||||||
|
f"https://almalinux-mirror.dal1.hivelocity.net/{relver}/isos/s390x/AlmaLinux-{relver}-s390x.torrent",
|
||||||
|
f"https://almalinux-mirror.dal1.hivelocity.net/{relver}/isos/x86_64/AlmaLinux-{relver}-x86_64.torrent",
|
||||||
|
]
|
||||||
|
|
||||||
"Delete")
|
add_torrents(urls)
|
||||||
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[@]}"
|
def remove_almalinux(relver: str):
|
||||||
;;
|
remove_torrents(f"AlmaLinux-{relver}")
|
||||||
|
|
||||||
"Delete")
|
|
||||||
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="debian-$relver" -F, '$0~pat{print $1}')
|
|
||||||
delete_torrents "$torrent_hashes"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
|
|
||||||
"Devuan")
|
def add_debian(relver: str):
|
||||||
case "$action" in
|
urls = [
|
||||||
"Add")
|
f"https://cdimage.debian.org/debian-cd/current/amd64/bt-dvd/debian-{relver}-amd64-DVD-1.iso.torrent",
|
||||||
urls=("https://files.devuan.org/devuan_${relver}.torrent")
|
f"https://cdimage.debian.org/debian-cd/current/arm64/bt-dvd/debian-{relver}-arm64-DVD-1.iso.torrent",
|
||||||
add_torrents "${urls[@]}"
|
f"https://cdimage.debian.org/debian-cd/current/armel/bt-dvd/debian-{relver}-armel-DVD-1.iso.torrent",
|
||||||
;;
|
f"https://cdimage.debian.org/debian-cd/current/armhf/bt-dvd/debian-{relver}-armhf-DVD-1.iso.torrent",
|
||||||
|
f"https://cdimage.debian.org/debian-cd/current/mips64el/bt-dvd/debian-{relver}-mips64el-DVD-1.iso.torrent",
|
||||||
|
f"https://cdimage.debian.org/debian-cd/current/mipsel/bt-dvd/debian-{relver}-mipsel-DVD-1.iso.torrent",
|
||||||
|
f"https://cdimage.debian.org/debian-cd/current/ppc64el/bt-dvd/debian-{relver}-ppc64el-DVD-1.iso.torrent",
|
||||||
|
f"https://cdimage.debian.org/debian-cd/current/s390x/bt-dvd/debian-{relver}-s390x-DVD-1.iso.torrent",
|
||||||
|
]
|
||||||
|
|
||||||
"Delete")
|
add_torrents(urls)
|
||||||
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")
|
def remove_debian(relver: str):
|
||||||
# TODO: Fix this. I suspect it has to do with the $relver not expanding in the jq input.
|
remove_torrents(f"debian-{relver}")
|
||||||
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")
|
def add_devuan(relver: str):
|
||||||
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="FreeBSD-$relver" -F, '$0~pat{print $1}')
|
url = f"https://files.devuan.org/devuan_{relver}.torrent"
|
||||||
delete_torrents "$torrent_hashes"
|
qb.download_from_link(url, category="distro")
|
||||||
;;
|
print(f"Added {os.path.basename(url)}")
|
||||||
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")
|
def remove_devuan(relver: str):
|
||||||
torrent_hashes=$(qbt torrent list -F json | jq '.[] | select(.name | contains("kali")) | .hash' | tr -d '"')
|
remove_torrents(f"devuan_{relver}")
|
||||||
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")
|
def add_fedora(relver: str):
|
||||||
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="NetBSD-$relver" -F, '$0~pat{print $1}')
|
webpage_url = "https://torrent.fedoraproject.org/torrents"
|
||||||
delete_torrents "$torrent_hashes"
|
torrent_substring = f"{relver}.torrent"
|
||||||
;;
|
add_torrents_from_html(webpage_url, torrent_substring)
|
||||||
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")
|
def remove_fedora(relver: str):
|
||||||
torrent_hashes=$(qbt torrent list -F json | jq '.[] | select(.name | contains("nixos")) | .hash' | tr -d '"')
|
remove_torrents(f"{relver}.torrent")
|
||||||
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")
|
def add_freebsd(relver: str):
|
||||||
torrent_hash=$(qbt torrent list -F csv | awk -v pat="Qubes-R$relver" -F, '$0~pat{print $1}')
|
url = f"https://people.freebsd.org/~jmg/FreeBSD-{relver}-R-magnet.txt"
|
||||||
delete_torrents "$torrent_hash"
|
reqs = requests.get(url)
|
||||||
;;
|
data = reqs.text.split("\n")
|
||||||
esac
|
|
||||||
;;
|
|
||||||
|
|
||||||
"Rocky Linux")
|
for line in data:
|
||||||
case "$action" in
|
if line.startswith("magnet:"):
|
||||||
"Add")
|
qb.download_from_link(line, category="distro")
|
||||||
urls=(
|
print(f"Added {line.split("=")[2]}")
|
||||||
"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")
|
def remove_freebsd(relver: str):
|
||||||
torrent_hashes=$(qbt torrent list -F csv | awk -v pat="Rocky-$relver" -F, '$0~pat{print $1}')
|
remove_torrents(f"FreeBSD-{relver}")
|
||||||
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[@]}"
|
def add_kali():
|
||||||
;;
|
webpage_url = "https://kali.download/base-images/current"
|
||||||
|
torrent_substring = ".torrent"
|
||||||
|
add_torrents_from_html(webpage_url, torrent_substring)
|
||||||
|
|
||||||
"Delete")
|
|
||||||
torrent_hashes=$(qbt torrent list -F json | jq '.[] | select(.name | contains("tails")) | .hash' | tr -d '"')
|
def remove_kali():
|
||||||
delete_torrents "$torrent_hashes"
|
remove_torrents(f"kali-linux")
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
def add_netbsd(relver: str):
|
||||||
esac
|
webpage_url = f"https://cdn.netbsd.org/pub/NetBSD/NetBSD-{relver}/images/"
|
||||||
|
torrent_substring = f".torrent"
|
||||||
|
add_torrents_from_html(webpage_url, torrent_substring)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_netbsd(relver: str):
|
||||||
|
remove_torrents(f"NetBSD-{relver}")
|
||||||
|
|
||||||
|
|
||||||
|
def add_nixos():
|
||||||
|
url = "https://api.github.com/repos/AnimMouse/NixOS-ISO-Torrents/releases/latest"
|
||||||
|
reqs = requests.get(url)
|
||||||
|
json_data = json.loads(reqs.text)
|
||||||
|
for item in json_data["assets"]:
|
||||||
|
qb.download_from_link(item["browser_download_url"], category="distro")
|
||||||
|
print(f"Added {os.path.basename(item["browser_download_url"])}")
|
||||||
|
|
||||||
|
|
||||||
|
def remove_nixos():
|
||||||
|
remove_torrents("nixos")
|
||||||
|
|
||||||
|
|
||||||
|
def add_qubes(relver: str):
|
||||||
|
url = f"https://mirrors.edge.kernel.org/qubes/iso/Qubes-R{relver}-x86_64.torrent"
|
||||||
|
qb.download_from_link(url, category="distro")
|
||||||
|
print(f"Added {os.path.basename(url)}")
|
||||||
|
|
||||||
|
|
||||||
|
def remove_qubes(relver: str):
|
||||||
|
remove_torrents(f"Qubes-R{relver}")
|
||||||
|
|
||||||
|
|
||||||
|
def add_rockylinux(relver: str):
|
||||||
|
urls = [
|
||||||
|
f"https://download.rockylinux.org/pub/rocky/{relver}/isos/aarch64/Rocky-{relver}-aarch64-dvd.torrent",
|
||||||
|
f"https://download.rockylinux.org/pub/rocky/{relver}/isos/ppc64le/Rocky-{relver}-ppc64le-dvd.torrent",
|
||||||
|
f"https://download.rockylinux.org/pub/rocky/{relver}/isos/s390x/Rocky-{relver}-s390x-dvd.torrent",
|
||||||
|
f"https://download.rockylinux.org/pub/rocky/{relver}/isos/x86_64/Rocky-{relver}-x86_64-dvd.torrent",
|
||||||
|
]
|
||||||
|
|
||||||
|
add_torrents(urls)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_rockylinux(relver: str):
|
||||||
|
remove_torrents(f"Rocky-{relver}")
|
||||||
|
|
||||||
|
|
||||||
|
def add_tails(relver: str):
|
||||||
|
urls = [
|
||||||
|
f"https://tails.net/torrents/files/tails-amd64-{relver}.img.torrent",
|
||||||
|
f"https://tails.net/torrents/files/tails-amd64-{relver}.iso.torrent",
|
||||||
|
]
|
||||||
|
|
||||||
|
add_torrents(urls)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_tails(relver: str):
|
||||||
|
remove_torrents(f"tails-amd64-{relver}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
distro_selection = subprocess.run(
|
||||||
|
[
|
||||||
|
"gum",
|
||||||
|
"choose",
|
||||||
|
"--limit=1",
|
||||||
|
"--header='Available torrents'",
|
||||||
|
"--height=13",
|
||||||
|
"AlmaLinux",
|
||||||
|
"Debian",
|
||||||
|
"Devuan",
|
||||||
|
"Fedora",
|
||||||
|
"FreeBSD",
|
||||||
|
"Kali Linux",
|
||||||
|
"NetBSD",
|
||||||
|
"NixOS",
|
||||||
|
"Qubes",
|
||||||
|
"Rocky Linux",
|
||||||
|
"Tails",
|
||||||
|
],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
).stdout.strip()
|
||||||
|
|
||||||
|
action_selection = subprocess.run(
|
||||||
|
["gum", "choose", "--limit=1", "--header='Choose:'", "Add", "Remove"],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
).stdout.strip()
|
||||||
|
|
||||||
|
relver = subprocess.run(
|
||||||
|
["gum", "input", f"--placeholder='Enter {distro_selection} release version'"],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
).stdout.strip()
|
||||||
|
|
||||||
|
match distro_selection:
|
||||||
|
case "AlmaLinux":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_almalinux(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_almalinux(relver)
|
||||||
|
|
||||||
|
case "Debian":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_debian(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_debian(relver)
|
||||||
|
|
||||||
|
case "Devuan":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_devuan(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_devuan(relver)
|
||||||
|
|
||||||
|
case "Fedora":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_fedora(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_fedora(relver)
|
||||||
|
|
||||||
|
case "FreeBSD":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_freebsd(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_freebsd(relver)
|
||||||
|
|
||||||
|
case "Kali Linux":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_kali()
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_kali()
|
||||||
|
|
||||||
|
case "NetBSD":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_netbsd(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_netbsd(relver)
|
||||||
|
|
||||||
|
case "NixOS":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_nixos()
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_nixos()
|
||||||
|
|
||||||
|
case "Qubes":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_qubes(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_qubes(relver)
|
||||||
|
|
||||||
|
case "Rocky Linux":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_rockylinux(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_rockylinux(relver)
|
||||||
|
|
||||||
|
case "Tails":
|
||||||
|
if action_selection == "Add":
|
||||||
|
add_tails(relver)
|
||||||
|
|
||||||
|
if action_selection == "Remove":
|
||||||
|
remove_tails(relver)
|
||||||
|
|
||||||
|
case _:
|
||||||
|
print("Nothing to do.")
|
||||||
|
Loading…
Reference in New Issue
Block a user