summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--module/gui/ConnectionManager.py15
-rw-r--r--module/gui/connector.py9
-rwxr-xr-xpyLoadCore.py2
-rwxr-xr-xpyLoadGui.py44
4 files changed, 58 insertions, 12 deletions
diff --git a/module/gui/ConnectionManager.py b/module/gui/ConnectionManager.py
index d96916338..2a63698a0 100644
--- a/module/gui/ConnectionManager.py
+++ b/module/gui/ConnectionManager.py
@@ -126,10 +126,14 @@ class ConnectionManager(QWidget):
self.emit(SIGNAL("removeConnection"), data)
def slotConnect(self):
- item = self.connList.currentItem()
- data = item.data(Qt.UserRole).toPyObject()
- data = self.cleanDict(data)
- self.emit(SIGNAL("connect"), data)
+ if self.internal.checkState() == 2:
+ data = {"type": "internal"}
+ self.emit(SIGNAL("connect"), data)
+ else:
+ item = self.connList.currentItem()
+ data = item.data(Qt.UserRole).toPyObject()
+ data = self.cleanDict(data)
+ self.emit(SIGNAL("connect"), data)
def cleanDict(self, data):
tmp = {}
@@ -154,7 +158,8 @@ class ConnectionManager(QWidget):
self.setDefault(data, False)
def slotInternal(self):
- self.connList.clearSelection()
+ if self.internal.checkState() == 2:
+ self.connList.clearSelection()
def setDefault(self, data, state):
data = self.cleanDict(data)
diff --git a/module/gui/connector.py b/module/gui/connector.py
index 975e1ca1b..28bfaacc4 100644
--- a/module/gui/connector.py
+++ b/module/gui/connector.py
@@ -46,7 +46,14 @@ class Connector(QThread):
self.mutex.unlock()
def connectProxy(self):
- self.proxy = DispatchRPC(self.mutex, ServerProxy(self.addr, allow_none=True, verbose=False))
+ if isinstance(self.addr, tuple):
+ while not hasattr(self.addr[1], "server_methods"):
+ sleep(1)
+
+ self.proxy = DispatchRPC(self.mutex, self.addr[1].server_methods)
+ else:
+ self.proxy = DispatchRPC(self.mutex, ServerProxy(self.addr, allow_none=True, verbose=False))
+
self.connect(self.proxy, SIGNAL("proxy_error"), self._proxyError)
self.connect(self.proxy, SIGNAL("connectionLost"), self, SIGNAL("connectionLost"))
try:
diff --git a/pyLoadCore.py b/pyLoadCore.py
index 073cab191..310c3e2e5 100755
--- a/pyLoadCore.py
+++ b/pyLoadCore.py
@@ -194,6 +194,7 @@ class Core(object):
self.do_kill = False
self.do_restart = False
+ self.shuttedDown = False
self.log.info(_("Using home directory: %s") % getcwd())
@@ -430,6 +431,7 @@ class Core(object):
finally:
self.files.syncSave()
+ self.shuttedDown = True
def path(self, * args):
diff --git a/pyLoadGui.py b/pyLoadGui.py
index b516ba9b4..df21555f8 100755
--- a/pyLoadGui.py
+++ b/pyLoadGui.py
@@ -89,6 +89,8 @@ class main(QObject):
self.connData = None
self.captchaProcessing = False
self.serverStatus = {"pause":True, "speed":0, "freespace":0}
+
+ self.core = None # pyLoadCore if started
if True:
@@ -96,7 +98,7 @@ class main(QObject):
self.tray.show()
self.notification = Notification(self.tray)
self.connect(self, SIGNAL("showMessage"), self.notification.showMessage)
- self.connect(self.tray.exitAction, SIGNAL("triggered()"), self.app.quit)
+ self.connect(self.tray.exitAction, SIGNAL("triggered()"), self.slotQuit)
self.connect(self.tray.showAction, SIGNAL("toggled(bool)"), self.mainWindow.setVisible)
self.connect(self.mainWindow, SIGNAL("hidden"), self.tray.mainWindowHidden)
@@ -170,7 +172,7 @@ class main(QObject):
self.connect(self.mainWindow, SIGNAL("reloadAccounts"), self.slotReloadAccounts)
self.connect(self.mainWindow, SIGNAL("quit"), self.quit)
- self.connect(self.mainWindow.mactions["exit"], SIGNAL("triggered()"), self.quit)
+ self.connect(self.mainWindow.mactions["exit"], SIGNAL("triggered()"), self.slotQuit)
self.connect(self.mainWindow.captchaDock, SIGNAL("done"), self.slotCaptchaDone)
def slotShowConnector(self):
@@ -179,6 +181,7 @@ class main(QObject):
hide the main window and show connection manager
(to switch to other core)
"""
+ self.quitInternal()
self.stopMain()
self.init()
@@ -396,10 +399,11 @@ class main(QObject):
"""
connect to a core
if connection is local, parse the core config file for data
+ if internal, start pyLoadCore
set up connector, show main window
"""
self.connWindow.hide()
- if not data["type"] == "remote":
+ if data["type"] not in ("remote","internal"):
coreparser = ConfigParser(self.configdir)
if not coreparser.config:
@@ -414,9 +418,26 @@ class main(QObject):
data["password"] = coreparser.get("remote","password")
data["host"] = "127.0.0.1"
data["ssl"] = coreparser.get("ssl","activated")
- data["ssl"] = "s" if data["ssl"] else ""
- server_url = "http%(ssl)s://%(user)s:%(password)s@%(host)s:%(port)s/" % data
- self.connector.setAddr(str(server_url))
+
+ data["ssl"] = "s" if data["ssl"] else ""
+ server_url = "http%(ssl)s://%(user)s:%(password)s@%(host)s:%(port)s/" % data
+ self.connector.setAddr(str(server_url))
+
+ elif data["type"] == "remote":
+ data["ssl"] = "s" if data["ssl"] else ""
+ server_url = "http%(ssl)s://%(user)s:%(password)s@%(host)s:%(port)s/" % data
+ self.connector.setAddr(str(server_url))
+
+ elif data["type"] == "internal":
+ from pyLoadCore import Core
+ import thread
+
+ if not self.core:
+ self.core = Core()
+ thread.start_new_thread(self.core.start, ())
+ self.connector.setAddr(("core", self.core))
+
+
self.startMain()
def refreshConnections(self):
@@ -624,6 +645,17 @@ class main(QObject):
def slotReloadAccounts(self):
self.mainWindow.tabs["accounts"]["view"].model().reloadData()
+ def slotQuit(self):
+ self.quitInternal()
+ self.app.quit()
+
+ def quitInternal(self):
+ if self.core:
+ self.core.server_methods.kill()
+ for i in range(10):
+ if self.core.shuttedDown:
+ break
+ sleep(0.5)
class Loop():
def __init__(self, parent):
self.parent = parent