⚡️ Rewrite download manager
This commit is contained in:
parent
e47a92b77e
commit
afc9c112cb
4 changed files with 68 additions and 53 deletions
|
@ -1,13 +1,22 @@
|
|||
from video import Video
|
||||
from threading import Thread
|
||||
from queue import SimpleQueue
|
||||
from sanitize_filename import sanitize
|
||||
from pathlib import Path
|
||||
from time import sleep
|
||||
|
||||
|
||||
class Manager:
|
||||
def __init__(self):
|
||||
self.video_list: list[Video] = []
|
||||
self.bvid_set = set()
|
||||
self.queue = SimpleQueue()
|
||||
|
||||
def get_info_worker(self):
|
||||
while not self.queue.empty():
|
||||
video: Video = self.queue.get()
|
||||
video.get_info()
|
||||
sleep(5)
|
||||
|
||||
def add_videos_by_number(self, video_numbers: list[str]):
|
||||
for video_number in video_numbers:
|
||||
|
@ -18,19 +27,23 @@ class Manager:
|
|||
if (bvid := video.v.get_bvid()) not in self.bvid_set:
|
||||
self.bvid_set.add(bvid)
|
||||
self.video_list.append(video)
|
||||
Thread(target=video.get_info).start()
|
||||
self.queue.put(video)
|
||||
Thread(target=self.get_info_worker).start()
|
||||
|
||||
def download(self, id: int, parent_dir: str | Path = Path(".")):
|
||||
def download_worker(self, parent_dir: Path):
|
||||
while not self.queue.empty():
|
||||
video: Video = self.queue.get()
|
||||
filename = sanitize(video.title) + ".m4a"
|
||||
video.download(parent_dir / filename)
|
||||
sleep(5)
|
||||
|
||||
def download(self, parent_dir: str | Path = Path(".")):
|
||||
if isinstance(parent_dir, str):
|
||||
parent_dir = Path(parent_dir)
|
||||
if not 0 <= id < len(self.video_list):
|
||||
raise Exception(f"id ({id}) out of range!")
|
||||
video = self.video_list[id]
|
||||
if not hasattr(video, "title"):
|
||||
raise Exception(f"No information for video {video.number}")
|
||||
filename = sanitize(video.title) + ".m4a"
|
||||
t = Thread(target=video.download, args=(parent_dir / filename,))
|
||||
t.start()
|
||||
for video in self.video_list:
|
||||
print(video)
|
||||
self.queue.put(video)
|
||||
Thread(target=self.download_worker, args=(parent_dir,)).start()
|
||||
|
||||
def get_progress(self):
|
||||
return [
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue