Downloading tracks
This commit is contained in:
1
gui/modules/download/__init__.py
Normal file
1
gui/modules/download/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .handlers import *
|
||||
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)}")
|
||||
13
gui/modules/download/handlers.py
Normal file
13
gui/modules/download/handlers.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from gui.gui import Ui_MainWindow
|
||||
from PyQt5.QtWidgets import QFileDialog
|
||||
from gui.modules.download import downloader
|
||||
|
||||
|
||||
def register_handlers(ui: Ui_MainWindow):
|
||||
ui.choose_download_path_button.clicked.connect(
|
||||
lambda: ui.download_to_path_box.setText(
|
||||
QFileDialog.getExistingDirectory(caption="Select where to download file")
|
||||
)
|
||||
)
|
||||
|
||||
ui.download_track_button.clicked.connect(lambda: downloader.download_track(ui))
|
||||
Reference in New Issue
Block a user