diff --git a/i3pystatus/solaar.py b/i3pystatus/solaar.py index fc336ad..04f2e69 100644 --- a/i3pystatus/solaar.py +++ b/i3pystatus/solaar.py @@ -2,6 +2,17 @@ from i3pystatus import IntervalModule from i3pystatus.core.command import run_through_shell +class DeviceNotFound(Exception): + pass + + +class NoBatteryStatus(Exception): + message = None + + def __init__(self, message): + self.message = message + + class Solaar(IntervalModule): """ Shows status and load percentage of bluetooth-device @@ -29,8 +40,8 @@ class Solaar(IntervalModule): for line in out.split('\n'): if line.count(self.nameOfDevice) > 0 and line.count(':') > 0: numberOfDevice = line.split(':')[0] - return(0, numberOfDevice) - return(1, 0) + return numberOfDevice + raise DeviceNotFound() def findBatteryStatus(self, numberOfDevice): command = 'solaar-cli show -v %s' % (numberOfDevice) @@ -39,24 +50,25 @@ class Solaar(IntervalModule): if line.count('Battery') > 0: if line.count(':') > 0: batterystatus = line.split(':')[1].strip().strip(",") - return(0, batterystatus) + return batterystatus + elif line.count('offline'): + raise NoBatteryStatus('offline') else: - return(1, 0) - return(1, 0) + raise NoBatteryStatus('unknown') + raise NoBatteryStatus('unknown/error') def run(self): self.output = {} - rcfindDeviceNumber = self.findDeviceNumber() - if rcfindDeviceNumber[0] != 0: - output = "problem finding device %s" % (self.nameOfDevice) + + try: + device_number = self.findDeviceNumber() + output = self.findBatteryStatus(device_number) + self.output['color'] = self.color + except DeviceNotFound: + output = "device absent" self.output['color'] = self.error_color - else: - numberOfDevice = rcfindDeviceNumber[1] - rcfindBatteryStatus = self.findBatteryStatus(numberOfDevice) - if rcfindBatteryStatus[0] != 0: - output = "problem finding battery status device %s" % (self.nameOfDevice) - self.output['color'] = self.error_color - else: - output = self.findBatteryStatus(self.findDeviceNumber()[1])[1] - self.output['color'] = self.color + except NoBatteryStatus as e: + output = e.message + self.output['color'] = self.error_color + self.output['full_text'] = output