Skip to content

Commit

Permalink
my try with pyqt as a gui
Browse files Browse the repository at this point in the history
  • Loading branch information
balrok committed Aug 27, 2014
1 parent 1d57d95 commit dbf8327
Show file tree
Hide file tree
Showing 3 changed files with 392 additions and 0 deletions.
73 changes: 73 additions & 0 deletions flashget/qtgui.py
@@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qtgui.ui'
#
# Created: Wed Aug 27 19:34:42 2014
# by: PyQt4 UI code generator 4.10.3
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s

try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(640, 480)
Dialog.setMinimumSize(QtCore.QSize(640, 480))
self.label = QtGui.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(9, 9, 21, 16))
self.label.setObjectName(_fromUtf8("label"))
self.url = QtGui.QLineEdit(Dialog)
self.url.setGeometry(QtCore.QRect(40, 10, 110, 20))
self.url.setObjectName(_fromUtf8("url"))
self.okButton = QtGui.QPushButton(Dialog)
self.okButton.setGeometry(QtCore.QRect(510, 10, 77, 26))
self.okButton.setObjectName(_fromUtf8("okButton"))
self.label_2 = QtGui.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(0, 60, 118, 16))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.parallel_downloads = QtGui.QLineEdit(Dialog)
self.parallel_downloads.setGeometry(QtCore.QRect(150, 60, 16, 16))
self.parallel_downloads.setObjectName(_fromUtf8("parallel_downloads"))
self.progress_1_label = QtGui.QLabel(Dialog)
self.progress_1_label.setGeometry(QtCore.QRect(10, 140, 73, 16))
self.progress_1_label.setObjectName(_fromUtf8("progress_1_label"))
self.progressBar_1 = QtGui.QProgressBar(Dialog)
self.progressBar_1.setGeometry(QtCore.QRect(89, 133, 95, 22))
self.progressBar_1.setProperty("value", 0)
self.progressBar_1.setObjectName(_fromUtf8("progressBar_1"))
self.label_5 = QtGui.QLabel(Dialog)
self.label_5.setGeometry(QtCore.QRect(9, 189, 22, 16))
self.label_5.setObjectName(_fromUtf8("label_5"))
self.logBrowser = QtGui.QTextBrowser(Dialog)
self.logBrowser.setGeometry(QtCore.QRect(9, 209, 631, 241))
self.logBrowser.setObjectName(_fromUtf8("logBrowser"))
self.current_downloads = QtGui.QTableView(Dialog)
self.current_downloads.setGeometry(QtCore.QRect(250, 110, 351, 81))
self.current_downloads.setObjectName(_fromUtf8("current_downloads"))

self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)

def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
self.label.setText(_translate("Dialog", "Url:", None))
self.okButton.setText(_translate("Dialog", "OK", None))
self.label_2.setText(_translate("Dialog", "Parallel Downloads", None))
self.progress_1_label.setText(_translate("Dialog", "Download 1", None))
self.label_5.setText(_translate("Dialog", "Log", None))

176 changes: 176 additions & 0 deletions gui_qt.py
@@ -0,0 +1,176 @@
# -*- coding: utf-8 -*-
import flashget
from flashget.qtgui import Ui_Dialog
from flashget.main import main as flashget_main
from flashget.config import updateConfig, loadConfig
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QVariant, Qt, QAbstractTableModel, QThread
import sys


class FlashgetDialog(QtGui.QDialog, Ui_Dialog):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

# Set up the user interface from Designer.
self.setupUi(parent)

self.okButton.clicked.connect(self.accept)

self.config = loadConfig()

self.setFields()
self.started = False

def setFields(self):
self.parallel_downloads.setText(self.config["dl_instances"])
self.url.setText("http://de.ddl.me/ein-seltsames-paar-deutsch-stream-download_0_5707.html")

XStream.stdout().messageWritten.connect( self.logBrowser.insertPlainText)
XStream.stderr().messageWritten.connect( self.logBrowser.insertPlainText )

self.tableModel = DownloadsModel([["","","","",""]], self)
self.current_downloads.setModel(self.tableModel)

def accept(self):
if self.started:
return
url = self.url.text()
url = unicode(url).strip()
self.config = updateConfig({"links": [url],
"progress_handler": progress_handler,
"sleep_handler": sleep_handler,
"captcha_selfsolve": True})
self.thread = FlashgetThread(self.config, self)
self.thread.start()
self.started = True


class FlashgetThread(QThread):
def __init__(self, config, parent=None):
QThread.__init__(self, parent)

self.config = config

def run(self):
flashget_main(self.config)

def progress_handler(self, uid, event, data):
emptyRow = ["", "", "", "", ""]
arraydata = main.centralWidget().tableModel.arraydata
if event == "new" or event == "update":
while len(arraydata) <= uid:
arraydata.append(emptyRow)
arraydata[uid] = [data["basename"], data["downloaded"] + " / " + data["size"], data["percent"], data["eta"], data["speed"]]
#self.logProgress(' [%s%%] %s/%s at %s ETA %s %s' % (data["percent"], data["downloaded"], data["size"], data["speed"], data["eta"], data["basename"]))
elif event == "delete":
if len(arraydata) <= uid:
arraydata[uid] = emptyRow
# cleanup
while True:
if arraydata[len(arraydata)-1] == emptyRow:
del arraydata[len(arraydata)-1]
# we need at least one row
if len(arraydata) == 0:
arraydata = [emptyRow]
# self.logProgress(' ') # clear our old line
main.centralWidget().tableModel.layoutChanged.emit()

def sleep_handler(self, timeout):
import time
start = time.time()
print("sleeping for %d" % timeout)
main.centralWidget().progress_1_label.setText(self.ename)
while True:
diff = time.time() - start
if diff > timeout:
break
# TODO this one is crashing the application - especially when I add a "print" before
# I guess signals are required for it so it doesn't run in a separate thread
# val = int((diff*10/(timeout*10))*100)
# main.centralWidget().progressBar_1.setValue(val)
time.sleep(0.1)
main.centralWidget().progressBar_1._active = False
return True


class DownloadsModel(QAbstractTableModel):
def __init__(self, datain, parent=None, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.arraydata = datain

def rowCount(self, parent):
return len(self.arraydata)

def columnCount(self, parent):
return len(self.arraydata[0])

def data(self, index, role):
if not index.isValid():
return QVariant()
elif role != Qt.DisplayRole:
return QVariant()
return QVariant(self.arraydata[index.row()][index.column()])

class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)

self.setWindowTitle(flashget.__name__ + " - " + flashget.__version__)
self.resize(433, 318)

w = FlashgetDialog(self)
self.setCentralWidget(w)




import logging

class QtHandler(logging.Handler):
def __init__(self):
logging.Handler.__init__(self)
def emit(self, record):
record = self.format(record)
if record: XStream.stdout().write('%s\n'%record)
# originally: XStream.stdout().write("{}\n".format(record))

logger = logging.getLogger()
handler = QtHandler()
handler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)


class XStream(QtCore.QObject):
_stdout = None
_stderr = None
messageWritten = QtCore.pyqtSignal(str)
def flush( self ):
pass
def fileno( self ):
return -1
def write( self, msg ):
if ( not self.signalsBlocked() ):
self.messageWritten.emit(unicode(msg))
@staticmethod
def stdout():
if ( not XStream._stdout ):
XStream._stdout = XStream()
sys.stdout = XStream._stdout
return XStream._stdout
@staticmethod
def stderr():
if ( not XStream._stderr ):
XStream._stderr = XStream()
sys.stderr = XStream._stderr
return XStream._stderr





app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
143 changes: 143 additions & 0 deletions qtgui.ui
@@ -0,0 +1,143 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>480</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>480</height>
</size>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>9</x>
<y>9</y>
<width>21</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Url:</string>
</property>
</widget>
<widget class="QLineEdit" name="url">
<property name="geometry">
<rect>
<x>40</x>
<y>10</y>
<width>110</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="okButton">
<property name="geometry">
<rect>
<x>510</x>
<y>10</y>
<width>77</width>
<height>26</height>
</rect>
</property>
<property name="text">
<string>OK</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>0</x>
<y>60</y>
<width>118</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Parallel Downloads</string>
</property>
</widget>
<widget class="QLineEdit" name="parallel_downloads">
<property name="geometry">
<rect>
<x>150</x>
<y>60</y>
<width>16</width>
<height>16</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="progress_1_label">
<property name="geometry">
<rect>
<x>10</x>
<y>140</y>
<width>73</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Download 1</string>
</property>
</widget>
<widget class="QProgressBar" name="progressBar_1">
<property name="geometry">
<rect>
<x>89</x>
<y>133</y>
<width>95</width>
<height>22</height>
</rect>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>9</x>
<y>189</y>
<width>22</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Log</string>
</property>
</widget>
<widget class="QTextBrowser" name="logBrowser">
<property name="geometry">
<rect>
<x>9</x>
<y>209</y>
<width>631</width>
<height>241</height>
</rect>
</property>
</widget>
<widget class="QTableView" name="current_downloads">
<property name="geometry">
<rect>
<x>250</x>
<y>110</y>
<width>351</width>
<height>81</height>
</rect>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

0 comments on commit dbf8327

Please sign in to comment.