diff --git a/mopidy_iris/core.py b/mopidy_iris/core.py index 1486b3f7..3fb2e6cb 100755 --- a/mopidy_iris/core.py +++ b/mopidy_iris/core.py @@ -456,7 +456,7 @@ class IrisCore(pykka.ThreadingActor): callback = kwargs.get('callback', False) # Trigger the action - IrisSystemThread('restart', self).start() + IrisSystemThread('restart', self.restart_callback).start() self.broadcast(data={ 'method': "restart_started" @@ -478,7 +478,8 @@ class IrisCore(pykka.ThreadingActor): }) else: self.broadcast(data={ - 'method': "restart_finished" + 'method': "restart_finished", + 'params': response }) @@ -493,7 +494,7 @@ class IrisCore(pykka.ThreadingActor): }) # Trigger the action - IrisSystemThread('upgrade', self).start() + IrisSystemThread('upgrade', self.upgrade_callback).start() response = { 'message': "Upgrade started" @@ -526,7 +527,7 @@ class IrisCore(pykka.ThreadingActor): callback = kwargs.get('callback', False) # Trigger the action - IrisSystemThread('local_scan', self).start() + IrisSystemThread('local_scan', self.local_scan_callback).start() self.broadcast(data={ 'method': "local_scan_started" @@ -1092,12 +1093,16 @@ class IrisCore(pykka.ThreadingActor): 'method': "test_started" }) - if (callback): - callback({ - 'message': "Running test... please wait" - }) + response = { + 'message': "Running test... please wait" + } - IrisSystemThread('test', self).run() + if (callback): + callback(response) + else: + return response + + IrisSystemThread('test', self.test_callback).run() def test_callback(self, response, error): if error: diff --git a/mopidy_iris/system.py b/mopidy_iris/system.py index 06586751..c9b435bf 100755 --- a/mopidy_iris/system.py +++ b/mopidy_iris/system.py @@ -6,10 +6,10 @@ import os, logging, subprocess, json logger = logging.getLogger(__name__) class IrisSystemThread(Thread): - def __init__(self, action, origin): + def __init__(self, action, callback): Thread.__init__(self) self.action = action - self.origin = origin + self.callback = callback self.path = os.path.dirname(__file__) ## @@ -17,7 +17,6 @@ class IrisSystemThread(Thread): ## def run(self): logger.info("Running system action '"+self.action+"'") - callback_name = self.action+"_callback" try: self.can_run() @@ -43,20 +42,10 @@ class IrisSystemThread(Thread): if stderr: logger.error(stderr.decode()) - getattr(self.origin, callback_name)( - None, - { - 'error': stderr.decode() - } - ) + self.callback(None, { 'error': stderr.decode() }) else: logger.info(stdout.decode()) - getattr(self.origin, callback_name)( - { - 'output': stdout.decode() - }, - None - ) + self.callback({ 'output': stdout.decode() }, None) @@ -68,7 +57,7 @@ class IrisSystemThread(Thread): def can_run(self, *args, **kwargs): # Attempt an empty call to our system file - process = subprocess.Popen("sudo -n "+self.path+"/system.sh", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + process = subprocess.Popen("sudo -n "+self.path+"/system.sh check", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) result, error = process.communicate() exitCode = process.wait() diff --git a/mopidy_iris/system.sh b/mopidy_iris/system.sh index f2339a3a..463be628 100755 --- a/mopidy_iris/system.sh +++ b/mopidy_iris/system.sh @@ -1,9 +1,11 @@ #!/bin/bash -if [[ "$(pwd)" = "/iris/mopidy_iris/system.sh" ]]; then +if [[ "$(pwd)" = "/iris" ]]; then IS_CONTAINER=true + echo -e "Detected as running in a Docker container" else IS_CONTAINER=false + echo -e "Not running in a Docker container" fi if [[ $1 = "upgrade" ]]; then @@ -17,9 +19,13 @@ if [[ $1 = "upgrade" ]]; then echo -e "${UPGRADE}" elif [[ $1 = "restart" ]]; then - - RESTART="$(sudo service mopidy restart)" - echo -e "${RESTART}" + if [[ $IS_CONTAINER ]]; then + echo -e "Cannot restart Mopidy when running in a Docker container" + exit 1 + else + RESTART="$(sudo service mopidy restart)" + echo -e "${RESTART}" + fi elif [[ $1 = "local_scan" ]]; then @@ -30,6 +36,9 @@ elif [[ $1 = "local_scan" ]]; then fi echo -e "${SCAN}" +elif [[ $1 = "check" ]]; then + echo -e "Access permitted" + elif [[ $1 = "test" ]]; then sleep 3 @@ -39,6 +48,7 @@ elif [[ $1 = "test" ]]; then else echo -e "Unsupported system task" + exit 1 fi exit 0 \ No newline at end of file