diff --git a/SickBeard.py b/SickBeard.py index f4fc9493b4cca2c66a437f5eb028c1309b2806ef..34ef84fe775a58ee981dc3860096362ecd6df7cc 100755 --- a/SickBeard.py +++ b/SickBeard.py @@ -231,6 +231,11 @@ def main(): # stay alive while my threads do the work while (True): + if sickbeard.invoked_command: + logger.log(u"Executing invoked command: "+repr(sickbeard.invoked_command)) + sickbeard.invoked_command() + sickbeard.invoked_command = None + time.sleep(1) return diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index fa762a166c27ba79cc5725e2f77e4e4cd7bbe7c3..3266451cb4a5ecc14443f5ff331359c9761215e5 100644 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -42,6 +42,8 @@ from sickbeard.databases import mainDB from lib.configobj import ConfigObj +invoked_command = None + SOCKET_TIMEOUT = 30 PID = None @@ -745,7 +747,6 @@ def halt (): def sig_handler(signum=None, frame=None): if type(signum) != type(None): logger.log(u"Signal %i caught, saving and exiting..." % int(signum)) - cherrypy.engine.exit() saveAndShutdown() @@ -795,6 +796,19 @@ def saveAndShutdown(restart=False): os._exit(0) +def invoke_command(to_call, *args, **kwargs): + def delegate(): + to_call(*args, **kwargs) + sickbeard.invoked_command = delegate + logger.log(u"Placed invoked command: "+repr(sickbeard.invoked_command)+" for "+repr(to_call)+" with "+repr(args)+" and "+repr(kwargs), logger.DEBUG) + +def invoke_restart(soft=True): + invoke_command(sickbeard.restart, soft=soft) + +def invoke_shutdown(): + invoke_command(sickbeard.saveAndShutdown) + + def restart(soft=True): if soft: diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 166604522ecab7705e67eba678f463f9f13e699b..3501c5a997c4ef7f85266378ec61bba8bdbe2dba 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -1779,7 +1779,7 @@ class Home: @cherrypy.expose def shutdown(self): - threading.Timer(2, sickbeard.saveAndShutdown).start() + threading.Timer(2, sickbeard.invoke_shutdown).start() title = "Shutting down" message = "Sick Beard is shutting down..." @@ -1793,7 +1793,7 @@ class Home: redirect("/home") # do a soft restart - threading.Timer(2, sickbeard.restart, [False]).start() + threading.Timer(2, sickbeard.invoke_restart, [False]).start() title = "Restarting" message = "Sick Beard is restarting, refresh in 30 seconds." @@ -1810,7 +1810,7 @@ class Home: if updated: # do a hard restart - threading.Timer(2, sickbeard.restart, [False]).start() + threading.Timer(2, sickbeard.invoke_restart, [False]).start() return "Sick Beard is restarting, refresh in 30 seconds." else: return _genericMessage("Update Failed","Update wasn't successful, not restarting. Check your log for more information.")