diff --git a/i3pystatus/solaar.py b/i3pystatus/solaar.py new file mode 100644 index 0000000..dbb81fe --- /dev/null +++ b/i3pystatus/solaar.py @@ -0,0 +1,62 @@ +from i3pystatus import IntervalModule +from i3pystatus.core.command import run_through_shell + + +class Solaar(IntervalModule): + """ + Shows output of shell command + + .. rubric:: Available formatters + + * `{output}` — percentage of battery and status + """ + + color = "#FFFFFF" + error_color = "#FF0000" + interval = 30 + + settings = ( + ("nameOfDevice", "name of the bluetooth-device"), + ("color", "standard color"), + ("error_color", "color to use when non zero exit code is returned"), + ) + + required = ("nameOfDevice",) + + def findDeviceNumber(self): + command = 'solaar-cli show' + retvalue, out, stderr = run_through_shell(command, enable_shell=True) + 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) + + def findBatteryStatus(self, numberOfDevice): + command = 'solaar-cli show -v %s' % (numberOfDevice) + retvalue, out, stderr = run_through_shell(command, enable_shell=True) + for line in out.split('\n'): + if line.count('Battery') > 0: + if line.count(':') > 0: + batterystatus = line.split(':')[1].strip().strip(",") + return(0, batterystatus) + else: + return(1, 0) + return(1, 0) + + def run(self): + self.output = {} + rcfindDeviceNumber = self.findDeviceNumber() + if rcfindDeviceNumber[0] != 0: + output = "problem finding device %s" % (self.nameOfDevice) + 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 + self.output['full_text'] = output