major server manager overhaul
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import qbittorrentapi
|
||||
import logging
|
||||
from .config import settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class QbittorrentManager:
|
||||
def __init__(self):
|
||||
self.url = settings.qbittorrent_url
|
||||
self.username = settings.qbittorrent_username
|
||||
self.password = settings.qbittorrent_password
|
||||
self.client = None
|
||||
|
||||
def connect(self):
|
||||
if not self.url:
|
||||
raise Exception("qBittorrent URL not configured")
|
||||
|
||||
try:
|
||||
self.client = qbittorrentapi.Client(
|
||||
host=self.url,
|
||||
username=self.username,
|
||||
password=self.password,
|
||||
VERIFY_WEBUI_CERTIFICATE=False
|
||||
)
|
||||
self.client.auth_log_in()
|
||||
except qbittorrentapi.LoginFailed as e:
|
||||
logger.error(f"qBittorrent Login Failed: {e}")
|
||||
raise Exception("qBittorrent Login Failed")
|
||||
except Exception as e:
|
||||
logger.error(f"qBittorrent Connection Failed: {e}")
|
||||
raise
|
||||
|
||||
def get_torrents(self):
|
||||
self.connect()
|
||||
# Return list of dicts with relevant info
|
||||
torrents = self.client.torrents_info()
|
||||
return [
|
||||
{
|
||||
"hash": t.hash,
|
||||
"name": t.name,
|
||||
"state": t.state,
|
||||
"save_path": t.save_path,
|
||||
"progress": t.progress,
|
||||
"size": t.size,
|
||||
"dlspeed": t.dlspeed,
|
||||
"upspeed": t.upspeed,
|
||||
"eta": t.eta
|
||||
}
|
||||
for t in torrents
|
||||
]
|
||||
|
||||
def pause_torrents(self, hashes):
|
||||
self.connect()
|
||||
self.client.torrents_pause(torrent_hashes=hashes)
|
||||
|
||||
def resume_torrents(self, hashes):
|
||||
self.connect()
|
||||
self.client.torrents_resume(torrent_hashes=hashes)
|
||||
|
||||
def delete_torrents(self, hashes, delete_files=False):
|
||||
self.connect()
|
||||
self.client.torrents_delete(torrent_hashes=hashes, delete_files=delete_files)
|
||||
|
||||
def recheck_torrents(self, hashes):
|
||||
self.connect()
|
||||
self.client.torrents_recheck(torrent_hashes=hashes)
|
||||
|
||||
def set_location(self, hashes, location):
|
||||
self.connect()
|
||||
self.client.torrents_set_location(location=location, torrent_hashes=hashes)
|
||||
Reference in New Issue
Block a user