From 041fce027e8b6d6f7e723b5e423147f07789f8f9 Mon Sep 17 00:00:00 2001 From: Chubby Granny Chaser Date: Fri, 28 Jun 2024 12:08:33 +0100 Subject: [PATCH] feat: splitting downloader.py --- torrent-client/main.py | 59 +++--------------------------------------- 1 file changed, 3 insertions(+), 56 deletions(-) diff --git a/torrent-client/main.py b/torrent-client/main.py index 01f65557..88acd823 100644 --- a/torrent-client/main.py +++ b/torrent-client/main.py @@ -1,69 +1,16 @@ -import libtorrent as lt + import sys from http.server import HTTPServer, BaseHTTPRequestHandler import json -import threading -import time import urllib.parse +from downloader import Downloader torrent_port = sys.argv[1] http_port = sys.argv[2] rpc_password = sys.argv[3] initial_download = json.loads(urllib.parse.unquote(sys.argv[4])) -class Downloader: - def __init__(self): - self.torrent_handles = {} - self.downloading_game_id = -1 - self.session = lt.session({'listen_interfaces': '0.0.0.0:{port}'.format(port=torrent_port)}) - - def start_download(self, game_id: int, magnet: str, save_path: str): - params = {'url': magnet, 'save_path': save_path} - torrent_handle = self.session.add_torrent(params) - self.torrent_handles[game_id] = torrent_handle - torrent_handle.set_flags(lt.torrent_flags.auto_managed) - torrent_handle.resume() - - self.downloading_game_id = game_id - - def pause_download(self, game_id: int): - torrent_handle = self.torrent_handles.get(game_id) - if torrent_handle: - torrent_handle.pause() - torrent_handle.unset_flags(lt.torrent_flags.auto_managed) - self.downloading_game_id = -1 - - def cancel_download(self, game_id: int): - torrent_handle = self.torrent_handles.get(game_id) - if torrent_handle: - torrent_handle.pause() - self.session.remove_torrent(torrent_handle) - self.torrent_handles[game_id] = None - self.downloading_game_id = -1 - - def get_download_status(self): - if self.downloading_game_id == -1: - return None - - torrent_handle = self.torrent_handles.get(self.downloading_game_id) - - status = torrent_handle.status() - info = torrent_handle.get_torrent_info() - - return { - 'folderName': info.name() if info else "", - 'fileSize': info.total_size() if info else 0, - 'gameId': self.downloading_game_id, - 'progress': status.progress, - 'downloadSpeed': status.download_rate, - 'numPeers': status.num_peers, - 'numSeeds': status.num_seeds, - 'status': status.state, - 'bytesDownloaded': status.progress * info.total_size() if info else status.all_time_download, - } - - -downloader = Downloader() +downloader = Downloader(torrent_port) downloader.start_download(initial_download['game_id'], initial_download['magnet'], initial_download['save_path'])