summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--module/gui/ConnectionManager.py30
-rw-r--r--module/gui/Overview.py2
-rw-r--r--module/gui/Queue.py10
-rw-r--r--module/gui/connector.py40
-rw-r--r--module/plugins/hooks/Ev0InFetcher.py3
-rw-r--r--module/remote/RemoteManager.py2
-rw-r--r--module/remote/ThriftBackend.py6
-rw-r--r--module/remote/thriftbackend/Handler.py7
-rw-r--r--module/remote/thriftbackend/Processor.py4
-rw-r--r--module/remote/thriftbackend/Socket.py2
-rw-r--r--module/remote/thriftbackend/ThriftClient.py4
-rw-r--r--module/remote/thriftbackend/Transport.py15
-rwxr-xr-xpyLoadCore.py7
-rwxr-xr-xpyLoadGui.py31
14 files changed, 91 insertions, 72 deletions
diff --git a/module/gui/ConnectionManager.py b/module/gui/ConnectionManager.py
index c101a7add..51f39f2be 100644
--- a/module/gui/ConnectionManager.py
+++ b/module/gui/ConnectionManager.py
@@ -61,7 +61,6 @@ class ConnectionManager(QWidget):
form.setAlignment(Qt.AlignRight)
checkbox = QCheckBox()
- checkbox.setDisabled(True)
form.addRow(_("Use internal Core:"), checkbox)
boxLayout.addLayout(form)
@@ -110,7 +109,7 @@ class ConnectionManager(QWidget):
self.connList.setCurrentItem(item)
def slotNew(self):
- data = {"id":uuid().hex, "type":"remote", "default":False, "name":"", "host":"", "ssl":False, "port":"7227", "user":"admin", "password":""}
+ data = {"id":uuid().hex, "type":"remote", "default":False, "name":"", "host":"", "port":"7228", "user":"admin", "password":""}
self.edit.setData(data)
self.edit.show()
@@ -173,12 +172,14 @@ class ConnectionManager(QWidget):
class EditWindow(QWidget):
def __init__(self):
QWidget.__init__(self)
+
+ self.setWindowTitle(_("pyLoad ConnectionManager"))
+ self.setWindowIcon(QIcon(join(pypath, "icons","logo.png")))
grid = QGridLayout()
nameLabel = QLabel(_("Name:"))
hostLabel = QLabel(_("Host:"))
- sslLabel = QLabel(_("SSL:"))
localLabel = QLabel(_("Local:"))
userLabel = QLabel(_("User:"))
pwLabel = QLabel(_("Password:"))
@@ -186,7 +187,6 @@ class ConnectionManager(QWidget):
name = QLineEdit()
host = QLineEdit()
- ssl = QCheckBox()
local = QCheckBox()
user = QLineEdit()
password = QLineEdit()
@@ -205,20 +205,17 @@ class ConnectionManager(QWidget):
grid.addWidget(host, 2, 1)
grid.addWidget(portLabel, 3, 0)
grid.addWidget(port, 3, 1)
- grid.addWidget(sslLabel, 4, 0)
- grid.addWidget(ssl, 4, 1)
- grid.addWidget(userLabel, 5, 0)
- grid.addWidget(user, 5, 1)
- grid.addWidget(pwLabel, 6, 0)
- grid.addWidget(password, 6, 1)
- grid.addWidget(cancel, 7, 0)
- grid.addWidget(save, 7, 1)
+ grid.addWidget(userLabel, 4, 0)
+ grid.addWidget(user, 4, 1)
+ grid.addWidget(pwLabel, 5, 0)
+ grid.addWidget(password, 5, 1)
+ grid.addWidget(cancel, 6, 0)
+ grid.addWidget(save, 6, 1)
self.setLayout(grid)
self.controls = {}
self.controls["name"] = name
self.controls["host"] = host
- self.controls["ssl"] = ssl
self.controls["local"] = local
self.controls["user"] = user
self.controls["password"] = password
@@ -245,22 +242,18 @@ class ConnectionManager(QWidget):
data["local"] = False
self.controls["local"].setChecked(data["local"])
if not data["local"]:
- self.controls["ssl"].setChecked(data["ssl"])
self.controls["user"].setText(data["user"])
self.controls["password"].setText(data["password"])
self.controls["port"].setValue(int(data["port"]))
self.controls["host"].setText(data["host"])
- self.controls["ssl"].setDisabled(False)
self.controls["user"].setDisabled(False)
self.controls["password"].setDisabled(False)
self.controls["port"].setDisabled(False)
self.controls["host"].setDisabled(False)
else:
- self.controls["ssl"].setChecked(False)
self.controls["user"].setText("")
self.controls["port"].setValue(1)
self.controls["host"].setText("")
- self.controls["ssl"].setDisabled(True)
self.controls["user"].setDisabled(True)
self.controls["password"].setDisabled(True)
self.controls["port"].setDisabled(True)
@@ -268,13 +261,11 @@ class ConnectionManager(QWidget):
def slotLocalChanged(self, val):
if val == 2:
- self.controls["ssl"].setDisabled(True)
self.controls["user"].setDisabled(True)
self.controls["password"].setDisabled(True)
self.controls["port"].setDisabled(True)
self.controls["host"].setDisabled(True)
elif val == 0:
- self.controls["ssl"].setDisabled(False)
self.controls["user"].setDisabled(False)
self.controls["password"].setDisabled(False)
self.controls["port"].setDisabled(False)
@@ -286,7 +277,6 @@ class ConnectionManager(QWidget):
d["default"] = self.default
d["name"] = self.controls["name"].text()
d["local"] = self.controls["local"].isChecked()
- d["ssl"] = self.controls["ssl"].isChecked()
d["user"] = self.controls["user"].text()
d["password"] = self.controls["password"].text()
d["host"] = self.controls["host"].text()
diff --git a/module/gui/Overview.py b/module/gui/Overview.py
index ad63bf9fd..72daf2e46 100644
--- a/module/gui/Overview.py
+++ b/module/gui/Overview.py
@@ -28,7 +28,7 @@ def formatSpeed(speed):
while speed > 1000:
speed /= 1024.0
steps += 1
- return "%i %s" % (speed, sizes[steps])
+ return "%.2f %s" % (speed, sizes[steps])
class OverviewModel(QAbstractListModel):
PackageName = 10
diff --git a/module/gui/Queue.py b/module/gui/Queue.py
index 5acbf2eb3..977dd6e9a 100644
--- a/module/gui/Queue.py
+++ b/module/gui/Queue.py
@@ -44,7 +44,7 @@ def formatSpeed(speed):
while speed > 1000:
speed /= 1024.0
steps += 1
- return "%i %s" % (speed, sizes[steps])
+ return "%.2f %s" % (speed, sizes[steps])
class QueueModel(CollectorModel):
def __init__(self, view, connector):
@@ -95,6 +95,10 @@ class QueueModel(CollectorModel):
CollectorModel.removeEvent(self, event)
self.updateCount()
+ def updateEvent(self, event):
+ CollectorModel.updateEvent(self, event)
+ self.updateCount()
+
def updateCount(self):
packageCount = len(self._data)
fileCount = 0
@@ -308,9 +312,9 @@ class QueueView(CollectorView):
self.setColumnWidth(0, 300)
self.setColumnWidth(1, 100)
- self.setColumnWidth(2, 130)
+ self.setColumnWidth(2, 140)
self.setColumnWidth(3, 50)
- self.setColumnWidth(4, 120)
+ self.setColumnWidth(4, 130)
self.setColumnWidth(5, 70)
self.setEditTriggers(QAbstractItemView.NoEditTriggers)
diff --git a/module/gui/connector.py b/module/gui/connector.py
index a9cb0610c..5acfdfc8b 100644
--- a/module/gui/connector.py
+++ b/module/gui/connector.py
@@ -26,13 +26,8 @@ from PyQt4.QtGui import *
import socket
-from module.remote.thriftbackend.thriftgen.pyload import Pyload
-from module.remote.thriftbackend.thriftgen.pyload.ttypes import *
-from module.remote.thriftbackend.Socket import Socket
-from module.remote.thriftbackend.Protocol import Protocol
-
-from thrift import Thrift
-from thrift.transport import TTransport
+from module.remote.thriftbackend.ThriftClient import ThriftClient, WrongLogin, NoSSL, NoConnection
+from thrift.Thrift import TException
class Connector(QObject):
def __init__(self):
@@ -55,16 +50,17 @@ class Connector(QObject):
self.ssl = ssl
def connectProxy(self):
- transport = Socket(self.host, self.port, self.ssl)
- transport = TTransport.TBufferedTransport(transport)
- protocol = Protocol(transport)
- client = Pyload.Client(protocol)
-
- transport.open()
-
- if not client.login(self.user, self.password):
+ try:
+ client = ThriftClient(self.host, self.port, self.user, self.password)
+ except WrongLogin:
self.emit(SIGNAL("error_box"), "bad login credentials")
return False
+ except NoSSL:
+ self.emit(SIGNAL("error_box"), "no ssl support")
+ return False
+ except NoConnection:
+ self.emit(SIGNAL("connectionLost"))
+ return False
self.proxy = DispatchRPC(self.mutex, client)
self.connect(self.proxy, SIGNAL("proxy_error"), self._proxyError)
@@ -113,15 +109,21 @@ class DispatchRPC(QObject):
self.f = f
self.mutex = mutex
self.dispatcher = dispatcher
- self.error = True
def __call__(self, *args, **kwargs):
+ lost = False
+ error = False
try:
return self.f(*args, **kwargs)
except socket.error:
- self.dispatcher.emit(SIGNAL("connectionLost"))
+ lost = True
+ except TException:
+ lost = True
except Exception, e:
- if self.error:
- self.dispatcher.emit(SIGNAL("proxy_error"), self.dispatcher.fname, e)
+ err = e
finally:
self.mutex.unlock()
+ if lost:
+ self.dispatcher.emit(SIGNAL("connectionLost"))
+ if error:
+ self.dispatcher.emit(SIGNAL("proxy_error"), self.dispatcher.fname, error)
diff --git a/module/plugins/hooks/Ev0InFetcher.py b/module/plugins/hooks/Ev0InFetcher.py
index f3703ea04..f573d28a3 100644
--- a/module/plugins/hooks/Ev0InFetcher.py
+++ b/module/plugins/hooks/Ev0InFetcher.py
@@ -79,7 +79,8 @@ class Ev0InFetcher(Hook, PluginStorage):
self.setStorage("show_%s_lastfound" % show, int(mktime(item.date_parsed)))
found = True
if not found:
- self.core.log.debug("Ev0InFetcher: no new episodes found")
+ #self.core.log.debug("Ev0InFetcher: no new episodes found")
+ pass
for show, lastfound in self.getStorage().iteritems():
if int(lastfound) > 0 and int(lastfound) + (3600*24*30) < int(time()):
diff --git a/module/remote/RemoteManager.py b/module/remote/RemoteManager.py
index b66ed75e5..e0e5cdccf 100644
--- a/module/remote/RemoteManager.py
+++ b/module/remote/RemoteManager.py
@@ -73,4 +73,6 @@ class RemoteManager():
def checkAuth(self, user, password, remoteip=None):
if self.core.config["remote"]["nolocalauth"] and remoteip == "127.0.0.1":
return True
+ if self.core.startedInGui and remoteip == "127.0.0.1":
+ return True
return self.core.db.checkAuth(user, password)
diff --git a/module/remote/ThriftBackend.py b/module/remote/ThriftBackend.py
index ab262cf76..208fb8c72 100644
--- a/module/remote/ThriftBackend.py
+++ b/module/remote/ThriftBackend.py
@@ -23,8 +23,8 @@ from thriftbackend.Handler import Handler
from thriftbackend.Processor import Processor
from thriftbackend.Protocol import ProtocolFactory
from thriftbackend.Socket import ServerSocket
+from thriftbackend.Transport import TransportFactory
-from thrift.transport import TTransport
from thrift.server import TServer
class ThriftBackend(BackendBase):
@@ -41,9 +41,9 @@ class ThriftBackend(BackendBase):
key = self.core.config['ssl']['key']
cert = self.core.config['ssl']['cert']
- transport = ServerSocket(7228, self.core.config["remote"]["listenaddr"], key, cert)
+ transport = ServerSocket(int(self.core.config['remote']['port'])+1, self.core.config["remote"]["listenaddr"], key, cert)
- tfactory = TTransport.TBufferedTransportFactory()
+ tfactory = TransportFactory()
pfactory = ProtocolFactory()
self.server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
diff --git a/module/remote/thriftbackend/Handler.py b/module/remote/thriftbackend/Handler.py
index 6eb2a8bc6..6e1377938 100644
--- a/module/remote/thriftbackend/Handler.py
+++ b/module/remote/thriftbackend/Handler.py
@@ -4,6 +4,7 @@ from thriftgen.pyload.ttypes import *
from thriftgen.pyload.Pyload import Iface
from module.PyFile import PyFile
+from module.utils import freeSpace
class Handler(Iface):
def __init__(self, backend):
@@ -90,7 +91,7 @@ class Handler(Iface):
return serverStatus
def freeSpace(self):
- return self.core.freeSpace() #bytes
+ return freeSpace(self.core.config["general"]["download_folder"])
def getServerVersion(self):
return self.serverMethods.get_server_version()
@@ -479,13 +480,13 @@ class Handler(Iface):
self.serverMethods.remove_account(plugin, account)
#auth
- def login(self, username, password):
+ def login(self, username, password, remoteip=None):
"""
Parameters:
- username
- password
"""
- return True if self.serverMethods.checkAuth(username, password) else False
+ return self.backend.checkAuth(username, password, remoteip)
def getUserData(self):
return self.serverMethods.checkAuth(username, password)
diff --git a/module/remote/thriftbackend/Processor.py b/module/remote/thriftbackend/Processor.py
index 53c6e404d..8aea42960 100644
--- a/module/remote/thriftbackend/Processor.py
+++ b/module/remote/thriftbackend/Processor.py
@@ -32,7 +32,7 @@ class Processor(Pyload.Processor):
args.read(iprot)
iprot.readMessageEnd()
result = Pyload.login_result()
- self.authenticated[trans] = self._handler.login(args.username, args.password)
+ self.authenticated[trans] = self._handler.login(args.username, args.password, trans.remoteaddr[0])
result.success = self.authenticated[trans]
oprot.writeMessageBegin("login", Pyload.TMessageType.REPLY, seqid)
result.write(oprot)
@@ -40,4 +40,4 @@ class Processor(Pyload.Processor):
oprot.trans.flush()
else:
self._processMap[name](self, seqid, iprot, oprot)
- return True \ No newline at end of file
+ return True
diff --git a/module/remote/thriftbackend/Socket.py b/module/remote/thriftbackend/Socket.py
index d8d3d8db4..33daab4c0 100644
--- a/module/remote/thriftbackend/Socket.py
+++ b/module/remote/thriftbackend/Socket.py
@@ -103,4 +103,4 @@ class ServerSocket(TServerSocket, Socket):
client, addr = self.handle.accept()
result = Socket()
result.setHandle(client)
- return result \ No newline at end of file
+ return result
diff --git a/module/remote/thriftbackend/ThriftClient.py b/module/remote/thriftbackend/ThriftClient.py
index 9fcabc4e7..67474b2bb 100644
--- a/module/remote/thriftbackend/ThriftClient.py
+++ b/module/remote/thriftbackend/ThriftClient.py
@@ -52,7 +52,7 @@ class ThriftClient:
correct = self.client.login(user, password)
finally:
self.socket.setTimeout(None)
-
+
if not correct:
self.transport.close()
raise WrongLogin
@@ -80,4 +80,4 @@ if __name__ == "__main__":
for p in q:
data = client.getPackageData(p.pid)
print data
- print "Package Name: ", data.name \ No newline at end of file
+ print "Package Name: ", data.name
diff --git a/module/remote/thriftbackend/Transport.py b/module/remote/thriftbackend/Transport.py
new file mode 100644
index 000000000..50638f461
--- /dev/null
+++ b/module/remote/thriftbackend/Transport.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from thrift.transport.TTransport import TBufferedTransport
+
+class Transport(TBufferedTransport):
+ DEFAULT_BUFFER = 4096
+
+ def __init__(self, trans, rbuf_size = DEFAULT_BUFFER):
+ TBufferedTransport.__init__(self, trans, rbuf_size)
+ self.remoteaddr = trans.handle.getpeername()
+
+class TransportFactory:
+ def getTransport(self, trans):
+ buffered = Transport(trans)
+ return buffered
diff --git a/pyLoadCore.py b/pyLoadCore.py
index ace86b899..8aeb0a23b 100755
--- a/pyLoadCore.py
+++ b/pyLoadCore.py
@@ -79,6 +79,8 @@ class Core(object):
def __init__(self):
self.doDebug = False
+ self.startedInGui = False
+ self.running = False
self.daemon = False
self.arg_links = []
self.pidfile = "pyload.pid"
@@ -221,7 +223,7 @@ class Core(object):
except:
print "Error quitting pyLoad"
- def start(self, xmlrpc=True, web=True):
+ def start(self, rpc=True, web=True):
""" starts the fun :D """
if not exists("pyload.conf"):
@@ -339,7 +341,7 @@ class Core(object):
self.log.info(_("Downloadtime: %s") % self.server_methods.is_time_download())
- if xmlrpc:
+ if rpc:
self.remoteManager.startBackends()
if web:
@@ -354,6 +356,7 @@ class Core(object):
self.threadManager.pause = False
#self.threadManager.start()
+ self.running = True
self.hookManager.coreReady()
self.config.save() #save so config files gets filled
diff --git a/pyLoadGui.py b/pyLoadGui.py
index e1a680df5..7050b46fd 100755
--- a/pyLoadGui.py
+++ b/pyLoadGui.py
@@ -58,7 +58,7 @@ def formatSpeed(speed):
while speed > 1000:
speed /= 1024.0
steps += 1
- return "%i %s" % (speed, sizes[steps])
+ return "%.2f %s" % (speed, sizes[steps])
def formatSize(size):
"""formats size of bytes"""
@@ -137,6 +137,7 @@ class main(QObject):
"""
if not self.connector.connectProxy():
self.init()
+ return
self.connect(self.connector, SIGNAL("connectionLost"), self.slotConnectionLost)
self.restoreMainWindow()
self.mainWindow.show()
@@ -219,7 +220,7 @@ class main(QObject):
display a nice error box
"""
msgb = QMessageBox(QMessageBox.Warning, "Error", msg)
- #msgb.show()
+ msgb.exec_()
def initPackageCollector(self):
"""
@@ -351,11 +352,6 @@ class main(QObject):
continue
else:
data["host"] = subs["server"].text()
- data["ssl"] = subs["server"].attribute("ssl", "False")
- if data["ssl"] == "True":
- data["ssl"] = True
- else:
- data["ssl"] = False
data["user"] = subs["server"].attribute("user", "admin")
data["port"] = int(subs["server"].attribute("port", "7227"))
data["password"] = subs["server"].attribute("password", "")
@@ -380,7 +376,6 @@ class main(QObject):
connNode.appendChild(nameNode)
if data["type"] == "remote":
serverNode = self.parser.xml.createElement("server")
- serverNode.setAttribute("ssl", data["ssl"])
serverNode.setAttribute("user", data["user"])
serverNode.setAttribute("port", data["port"])
serverNode.setAttribute("password", data["password"])
@@ -433,14 +428,13 @@ class main(QObject):
if not coreparser.config:
self.connector.setConnectionData("127.0.0.1", 7228, "anonymous", "anonymous", False)
else:
- #coreparser.get("remote","port")
- self.connector.setConnectionData("127.0.0.1", 7228, "anonymous", "anonymous", coreparser.get("ssl","activated"))
+ self.connector.setConnectionData("127.0.0.1", coreparser.get("remote","port")+1, "anonymous", "anonymous")
elif data["type"] == "remote":
if data["port"] == 7227:
print "xmlrpc port selected, autocorrecting"
data["port"] = 7228
- self.connector.setConnectionData(data["host"], data["port"], data["user"], data["password"], data["ssl"])
+ self.connector.setConnectionData(data["host"], data["port"], data["user"], data["password"])
elif data["type"] == "internal":
from pyLoadCore import Core
@@ -451,11 +445,18 @@ class main(QObject):
config = CoreConfig() #create so at least default config exists
self.core = Core()
- thread.start_new_thread(self.core.start, (False,False))
- self.connector.setConnectionData("127.0.0.1", 7228, "anonymous", "anonymous", config.get("ssl","activated"))
+ self.core.startedInGui = True
+ thread.start_new_thread(self.core.start, (True, False))
+ while not self.core.running:
+ sleep(0.5)
+ self.connector.setConnectionData("127.0.0.1", config.get("remote","port")+1, "anonymous", "anonymous")
self.startMain()
- self.notification.showMessage(_("connected to %s") % data["host"])
+ try:
+ host = data["host"]
+ except:
+ host = "127.0.0.1"
+ self.notification.showMessage(_("connected to %s") % host)
def refreshConnections(self):
"""
@@ -703,7 +704,7 @@ class main(QObject):
if not self.connectionLost:
self.connectionLost = True
m = QMessageBox(QMessageBox.Critical, _("Connection lost"), _("Lost connection to the core!"), QMessageBox.Ok)
- #m.show()
+ m.exec_()
self.slotQuit()
class Loop():