update gui

This commit is contained in:
Yaronzz
2022-07-08 09:59:48 +08:00
parent 450102bfea
commit 346befda6d
+50 -23
View File
@@ -9,6 +9,7 @@
@Desc :
"""
import sys
import aigpy
import _thread
import importlib
@@ -16,35 +17,51 @@ from tidal_dl.events import *
from tidal_dl.settings import *
from tidal_dl.printf import *
enableGui = False
try:
params = importlib.import_module('PyQt5')
params = importlib.import_module('qt_material')
enableGui = True
except Exception as e:
pass
if enableGui:
from PyQt5.QtCore import Qt
def enableGui():
try:
importlib.import_module('PyQt5')
importlib.import_module('qt_material')
return True
except Exception as e:
return False
if not enableGui():
def startGui():
Printf.err("Not support gui. Please type: `pip3 install PyQt5 qt_material`")
else:
from PyQt5.QtCore import Qt, QObject
from PyQt5.QtGui import QTextCursor
from PyQt5.QtCore import pyqtSignal
from PyQt5 import QtWidgets
from qt_material import apply_stylesheet
class EmittingStream(QObject):
textWritten = pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
class MainView(QtWidgets.QWidget):
s_downloadEnd = pyqtSignal(str, bool, str)
def __init__(self, ) -> None:
super().__init__()
self.initView()
self.setMinimumSize(600, 500)
self.setMinimumSize(600, 620)
self.setWindowTitle("Tidal-dl")
def __info__(self, msg):
QtWidgets.QMessageBox.information(self,
'Info',
msg,
QtWidgets.QMessageBox.Yes)
QtWidgets.QMessageBox.information(self, 'Info', msg, QtWidgets.QMessageBox.Yes)
def __output__(self, text):
cursor = self.c_printTextEdit.textCursor()
cursor.movePosition(QTextCursor.End)
cursor.insertText(text)
self.c_printTextEdit.setTextCursor(cursor)
self.c_printTextEdit.ensureCursorVisible()
def initView(self):
self.c_lineSearch = QtWidgets.QLineEdit()
self.c_btnSearch = QtWidgets.QPushButton("Search")
@@ -55,6 +72,7 @@ if enableGui:
for item in self.m_supportType:
self.c_combType.addItem(item.name, item)
# init table
columnNames = ['#', 'Title', 'Artists', 'Quality']
self.c_tableInfo = QtWidgets.QTableWidget()
self.c_tableInfo.setColumnCount(len(columnNames))
@@ -71,6 +89,14 @@ if enableGui:
item = QtWidgets.QTableWidgetItem(name)
self.c_tableInfo.setHorizontalHeaderItem(index, item)
# print
self.c_printTextEdit = QtWidgets.QTextEdit()
self.c_printTextEdit.setReadOnly(True)
self.c_printTextEdit.setFixedHeight(150)
sys.stdout = EmittingStream(textWritten=self.__output__)
sys.stderr = EmittingStream(textWritten=self.__output__)
# layout
self.lineGrid = QtWidgets.QHBoxLayout()
self.lineGrid.addWidget(self.c_combType)
self.lineGrid.addWidget(self.c_lineSearch)
@@ -80,7 +106,9 @@ if enableGui:
self.mainGrid.addLayout(self.lineGrid)
self.mainGrid.addWidget(self.c_tableInfo)
self.mainGrid.addWidget(self.c_btnDownload)
self.mainGrid.addWidget(self.c_printTextEdit)
# connect
self.c_btnSearch.clicked.connect(self.search)
self.c_btnDownload.clicked.connect(self.download)
self.s_downloadEnd.connect(self.downloadEnd)
@@ -92,7 +120,7 @@ if enableGui:
def search(self):
self.c_tableInfo.setRowCount(0)
self.s_type = self.c_combType.currentData()
self.s_text = self.c_lineSearch.text()
if self.s_text.startswith('http'):
@@ -103,7 +131,7 @@ if enableGui:
elif tmpType not in self.m_supportType:
self.__info__(f'Type[{tmpType.name}] not support')
return
tmpData = TIDAL_API.getTypeData(tmpId, tmpType)
if tmpData is None:
self.__info__('Url is wrong!')
@@ -115,7 +143,7 @@ if enableGui:
else:
self.s_result = TIDAL_API.search(self.s_text, self.s_type)
self.s_array = TIDAL_API.getSearchResultItems(self.s_result, self.s_type)
if len(self.s_array) <= 0:
self.__info__('No result')
return
@@ -170,8 +198,9 @@ if enableGui:
if not loginByConfig():
self.__info__('Login failed. Please log in using the command line first.')
def startGui():
aigpy.cmd.enableColor(False)
app = QtWidgets.QApplication(sys.argv)
apply_stylesheet(app, theme='dark_blue.xml')
@@ -180,9 +209,7 @@ if enableGui:
window.checkLogin()
app.exec_()
else:
def startGui():
Printf.err("Not support gui. Please type: `pip3 install PyQt5 qt_material`")
if __name__ == '__main__':
SETTINGS.read(getProfilePath())