Files
KotoPad/gui/modules/download/downloader.py
2022-12-25 12:02:59 +02:00

43 lines
1.4 KiB
Python

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)}")