From dcb5e5869f264b940b3ca5dbee9091033d0426f9 Mon Sep 17 00:00:00 2001
From: "Michael D. M. Dryden" <mdryden@chem.utoronto.ca>
Date: Mon, 8 Jun 2015 17:00:49 -0400
Subject: [PATCH] =?UTF-8?q?Prevents=20=C2=B5Drop=20from=20stalling=20if=20?=
 =?UTF-8?q?DStat=20not=20connected.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dstat-interface/main.py | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/dstat-interface/main.py b/dstat-interface/main.py
index d01219e..4efefda 100644
--- a/dstat-interface/main.py
+++ b/dstat-interface/main.py
@@ -120,6 +120,8 @@ class Main(object):
 
         self.expnumber = 0
         
+        self.connected = False
+        
         self.menu_dropbot_connect = self.builder.get_object(
                                                          'menu_dropbot_connect')
         self.menu_dropbot_disconnect = self.builder.get_object(
@@ -182,6 +184,7 @@ class Main(object):
                                 ".", str(self.version[1])])
                                )
             self.start_ocp()
+            self.connected = True
 
     def start_ocp(self):
         """Start OCP measurements."""
@@ -704,7 +707,7 @@ class Main(object):
                             "Waiting for µDrop to connect…")
         self.microdrop_proc = gobject.timeout_add(500, self.microdrop_listen)
     
-    def on_menu_dropbot_disconnect_activate(self, menuitem, data= None):
+    def on_menu_dropbot_disconnect_activate(self, menuitem=None, data=None):
         """Disconnect µDrop connection and stop listening."""
         gobject.source_remove(self.microdrop_proc)
         self.microdrop.reset()
@@ -724,11 +727,19 @@ class Main(object):
 
         if data == microdrop.EXP_FINISH_REQ:
             if self.dropbot_triggered:
-                self.on_pot_start_clicked()
-                return False  # Removes function from GTK's main loop
+                if self.connected:
+                    self.on_pot_start_clicked()
+                else:
+                    print ("WAR: µDrop requested experiment but DStat "
+                           "disconnected.")
+                    self.statusbar.push(self.message_context_id,
+                                        "Listen stopped—DStat disconnected.")
+                    self.microdrop.reply(microdrop.EXPFINISHED)
+                    self.on_menu_dropbot_disconnect_activate()
+                    return False  # Removes function from GTK's main loop 
             else:
-                print "WAR: µDrop requested experiment finish confirmation \
-                        without starting experiment."
+                print ("WAR: µDrop requested experiment finish confirmation "
+                        "without starting experiment.")
                 self.microdrop.reply(microdrop.EXPFINISHED)
             
         elif data == microdrop.STARTEXP:
-- 
GitLab