️ Rewrite download manager

This commit is contained in:
zhbaor 2023-03-04 13:53:05 +08:00
parent e47a92b77e
commit afc9c112cb
4 changed files with 68 additions and 53 deletions

View file

@ -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 [