Started developing GUI

This commit is contained in:
2020-08-23 19:53:28 +03:00
parent e87869c1f4
commit e17533e148
5 changed files with 181 additions and 53 deletions
+41 -44
View File
@@ -1,50 +1,47 @@
from os import access,F_OK,mkdir
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QWidget,
QDialog, QFileDialog, QInputDialog
)
from requests import get as load
from bs4 import BeautifulSoup as parse
import click
from sys import stdout
@click.command()
@click.argument('songs',nargs=-1,metavar='<SongID [SongID [...]]>')
@click.option('-d','--dist',default='./Downloads',type=click.Path(exists=True),help='Where to save the songs (default: ./Downloads)')
def CLI(songs,dist):
"""===== Newgrounds Audio Downloader by H1K0 ====="""
for song in songs:
download(song,dist)
class GUI(QMainWindow):
def __init__(self):
super().__init__()
loadUi('GUI/MainWindow.ui',self)
self.dlbtn.clicked.connect(self.download)
def download(self):
# Validating input
songID=self.input.text()
page=parse(load(f'https://www.newgrounds.com/audio/listen/{songID}').text,'html.parser')
if page.find(id='pageerror') is not None:
self.input.clear()
return
songTitle=page.find('title').text
# Getting download link
link='http://audio.ngfiles.com/'
page=str(page)
i=page.find('audio.ngfiles.com')+len('audio.ngfiles.com/')
while not link.endswith('.mp3'):
if page[i]!='\\': link+=page[i]
i+=1
# Locating file
dist=QFileDialog.getSaveFileName(self,'Save File',
link.split('/')[-1],
'MP3 Audio File (*.mp3)')[0]
if not dist: return
# Downloading
with open(dist,'wb') as out:
out.write(load(link).content)
self.input.clear()
def download(songID,dist):
print(f'Loading https://www.newgrounds.com/audio/listen/{songID}...')
page=parse(load(f'https://www.newgrounds.com/audio/listen/{songID}').text,'html.parser')
songTitle=page.find('title').text
print('Searching download link...')
link='http://audio.ngfiles.com/'
page=str(page)
i=page.find('audio.ngfiles.com')+len('audio.ngfiles.com/')
while not link.endswith('.mp3'):
if page[i]!='\\': link+=page[i]
i+=1
if not access(dist,F_OK): mkdir(dist)
print(f'Downloading "{songTitle}"...')
BARLEN=50
with open(f'{dist}/{link.split("/")[-1]}','wb') as out:
file=load(link,stream=True)
total=file.headers.get('content-length')
if total is None: total=-1
else: total=int(total)
downloaded=0
for data in file.iter_content(chunk_size=max(total//BARLEN,1024)):
downloaded+=len(data)
out.write(data)
done=BARLEN*downloaded//total
stdout.write(f'\r[{""*done}{"·"*(BARLEN-done)}]')
stdout.flush()
print()
print(f'"{songTitle}" successfully downloaded.')
if __name__=='__main__':
CLI()
if __name__ == '__main__':
from sys import argv
app=QApplication(argv)
ngad=GUI()
ngad.show()
app.exec_()