Skip to content

Commit 110039c

Browse files
committed
Shut down gui on service upgrade
1 parent 1eb8870 commit 110039c

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

soundcraft/gui.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .dbus import Client, DbusInitializationError
1+
from .dbus import Client, DbusInitializationError, VersionIncompatibilityError
22
import sys
33
import traceback
44
import gi
@@ -23,12 +23,25 @@ def __init__(self):
2323
traceback.print_exc()
2424
self._startupFailure(f"Unexpected exception {e.__class__.__name__}", str(e))
2525
raise e
26+
self.dbus.serviceDisconnected.connect(self.dbusDisconnect)
27+
self.dbus.serviceConnected.connect(self.dbusReconnect)
2628

2729
def _startupFailure(self, title, message):
2830
dialog = Gtk.MessageDialog(parent=self, message_type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, text=title)
2931
dialog.format_secondary_text(message)
3032
dialog.run()
3133

34+
def dbusDisconnect(self):
35+
self.setNoDevice()
36+
37+
def dbusReconnect(self):
38+
try:
39+
self.dbus.ensureServiceVersion()
40+
except VersionIncompatibilityError as e:
41+
self._startupFailure("Dbus service version incompatibility", "Restart of this gui application is required")
42+
Gtk.main_quit()
43+
# Todo: Can we relaunch ourselves?
44+
3245
def setDevice(self, dev):
3346
if self.dev is not None:
3447
if self.dev._path == dev._path:
@@ -57,6 +70,7 @@ def setDevice(self, dev):
5770
self.show_all()
5871

5972
def setNoDevice(self):
73+
self.dev = None
6074
if self.grid is not None:
6175
self.remove(self.grid)
6276
self.grid = Gtk.Grid()
@@ -75,7 +89,6 @@ def deviceRemoved(self, path):
7589
if self.dev._path != path:
7690
# Not our device
7791
return
78-
self.dev = None
7992
self.setNoDevice()
8093

8194
def addHeading(self, text):

0 commit comments

Comments
 (0)