Downloading tracks
This commit is contained in:
42
gui/modules/download/downloader.py
Normal file
42
gui/modules/download/downloader.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import time
|
||||
|
||||
import validators
|
||||
from ezzthread import threaded
|
||||
from gui.modules.core.qt_updater import call
|
||||
from gui.gui import Ui_MainWindow
|
||||
from modules.player import convert
|
||||
from modules.spotify.spotify_dl import Spotify
|
||||
from urllib.request import urlopen
|
||||
from functools import partial
|
||||
import os
|
||||
|
||||
|
||||
@threaded
|
||||
def download_track(ui: Ui_MainWindow):
|
||||
url = ui.download_url_box.text()
|
||||
|
||||
if not validators.url(url):
|
||||
call(ui.download_track_logs.append, f"{url} is not valid URL, skipping")
|
||||
return
|
||||
|
||||
call(ui.download_track_logs.append, f"Downloading {url}")
|
||||
|
||||
name = (lambda song: song.artist + " - " + song.name + ".mp3")(Spotify().get_song(url)) \
|
||||
if "spotify" in url or "youtu" in url else url.split('/')[-1]
|
||||
|
||||
url = convert.get_raw_link(url)
|
||||
|
||||
call(ui.download_track_button.setEnabled, False)
|
||||
|
||||
response = urlopen(url)
|
||||
call(ui.download_track_progress.setValue, 0)
|
||||
size = int(response.info()["Content-length"])
|
||||
downloaded = 0
|
||||
with open(os.path.join(ui.download_to_path_box.text(), name), "wb") as dest_file:
|
||||
for data in iter(partial(response.read, 4096), b""):
|
||||
downloaded += len(data)
|
||||
dest_file.write(data)
|
||||
call(ui.download_track_progress.setValue, int(downloaded / size * 100))
|
||||
|
||||
call(ui.download_track_button.setEnabled, True)
|
||||
call(ui.download_track_logs.append, f"Downloaded to {os.path.join(ui.download_to_path_box.text(), name)}")
|
||||
Reference in New Issue
Block a user