mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-02-03 00:33:49 +03:00
feat: splitting downloader.py
This commit is contained in:
parent
363bcf16a4
commit
041fce027e
@ -1,69 +1,16 @@
|
|||||||
import libtorrent as lt
|
|
||||||
import sys
|
import sys
|
||||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||||
import json
|
import json
|
||||||
import threading
|
|
||||||
import time
|
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
from downloader import Downloader
|
||||||
|
|
||||||
torrent_port = sys.argv[1]
|
torrent_port = sys.argv[1]
|
||||||
http_port = sys.argv[2]
|
http_port = sys.argv[2]
|
||||||
rpc_password = sys.argv[3]
|
rpc_password = sys.argv[3]
|
||||||
initial_download = json.loads(urllib.parse.unquote(sys.argv[4]))
|
initial_download = json.loads(urllib.parse.unquote(sys.argv[4]))
|
||||||
|
|
||||||
class Downloader:
|
downloader = Downloader(torrent_port)
|
||||||
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.start_download(initial_download['game_id'], initial_download['magnet'], initial_download['save_path'])
|
downloader.start_download(initial_download['game_id'], initial_download['magnet'], initial_download['save_path'])
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user