2024-07-07 05:14:58 +02:00
|
|
|
#!/usr/bin/env python3
|
2024-07-05 08:10:06 +02:00
|
|
|
#
|
2024-07-07 05:14:58 +02:00
|
|
|
# Dependencies: python-qbittorrent
|
|
|
|
# pip install --user python-qbittorrent
|
|
|
|
#
|
|
|
|
# On Debian:
|
|
|
|
# pip install --user python-qbittorrent --break-system-packages
|
|
|
|
|
|
|
|
from qbittorrent import Client
|
|
|
|
|
|
|
|
|
|
|
|
# convert byte units
|
|
|
|
def human_bytes(bites: int) -> str:
|
|
|
|
B = float(bites)
|
|
|
|
KiB = float(1024)
|
|
|
|
MiB = float(KiB**2)
|
|
|
|
GiB = float(KiB**3)
|
|
|
|
TiB = float(KiB**4)
|
|
|
|
|
|
|
|
match B:
|
|
|
|
case B if B < KiB:
|
|
|
|
return "{0} {1}".format(B, "bytes" if 0 == B > 1 else "byte")
|
|
|
|
case B if KiB <= B < MiB:
|
|
|
|
return "{0:.2f} KiB".format(B / KiB)
|
|
|
|
case B if MiB <= B < GiB:
|
|
|
|
return "{0:.2f} MiB".format(B / MiB)
|
|
|
|
case B if GiB <= B < TiB:
|
|
|
|
return "{0:.2f} GiB".format(B / GiB)
|
|
|
|
case B if TiB <= B:
|
|
|
|
return "{0:.2f} TiB".format(B / TiB)
|
|
|
|
case _:
|
|
|
|
return ""
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
# Instantiate a qbittorrent client
|
|
|
|
qb = Client("http://localhost:8080/")
|
|
|
|
|
|
|
|
# username and password not required when 'Bypass from localhost' setting is active.
|
|
|
|
qb.login()
|
|
|
|
|
|
|
|
# get torrents
|
|
|
|
torrents = qb.torrents()
|
|
|
|
|
|
|
|
# get total_completed_bytes
|
|
|
|
completed_torrent_sizes = list()
|
|
|
|
for torrent in torrents:
|
|
|
|
if torrent["state"] == "queuedUP":
|
|
|
|
completed_torrent_sizes.append(torrent["total_size"])
|
|
|
|
|
|
|
|
total_completed_bytes = sum(completed_torrent_sizes)
|
|
|
|
|
|
|
|
# get total_added_bytes
|
|
|
|
total_added_bytes = sum([torrent["total_size"] for torrent in torrents])
|
|
|
|
|
|
|
|
# print the results
|
|
|
|
print(f"\nTotal completed size: {human_bytes(total_completed_bytes)}")
|
|
|
|
print(f"Total added size: {human_bytes(total_added_bytes)}\n")
|