From 419e24ce24087a3f0159fb5c7527eab766987155 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 13:40:17 +0200 Subject: Replace tabs with 4 spaces. --- ParrotZikTray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index d9bdbc1..57464a7 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -171,4 +171,4 @@ class ParrotZikIndicator(SysIndicator): if __name__ == "__main__": indicator = ParrotZikIndicator() - indicator.main() \ No newline at end of file + indicator.main() -- cgit v1.2.1 From c6442c2eb44c38d6cbe64f8ebe7b4132c70a6326 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 13:45:42 +0200 Subject: Remove unused imports. --- ParrotZikTray | 3 --- 1 file changed, 3 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 57464a7..9d392a3 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -1,9 +1,6 @@ #!/usr/bin/env python -import sys -import gtk import re -import os import ParrotZik import BluetoothPairedDevices from SysIndicator import * -- cgit v1.2.1 From b7ccaa7015df61c101b3aa40e44feb2b5da287a0 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 14:07:20 +0200 Subject: Fix pep8. --- ParrotZikTray | 83 +++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 34 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 9d392a3..f35662a 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -5,44 +5,57 @@ import ParrotZik import BluetoothPairedDevices from SysIndicator import * -UPDATE_FREQUENCY = 30 # seconds +# seconds +UPDATE_FREQUENCY = 30 + class ParrotZikIndicator(SysIndicator): def __init__(self): self.menu = UniversalMenu() - self.info_item = MenuItem("Parrot Zik Not connected..",None,sensitive = False) + self.info_item = MenuItem("Parrot Zik Not connected..", + None, sensitive=False) self.menu.append(self.info_item) - self.battery_level = MenuItem("Battery Level:",None,sensitive = False) + self.battery_level = MenuItem("Battery Level:", + None, sensitive=False) self.menu.append(self.battery_level) - self.battery_state = MenuItem("Battery State:",None,sensitive = False) + self.battery_state = MenuItem("Battery State:", + None, sensitive=False) self.menu.append(self.battery_state) - self.firmware_version = MenuItem("Firmware Version:",None,sensitive = False) + self.firmware_version = MenuItem("Firmware Version:", + None, sensitive=False) self.menu.append(self.firmware_version) - self.check = MenuItem("Noise Cancellation",self.toggleANC,sensitive = False, checkitem = True) + self.check = MenuItem("Noise Cancellation", self.toggleANC, + sensitive=False, checkitem=True) self.menu.append(self.check) - self.check2 = MenuItem("Auto Connection",self.toggleAuto,sensitive = False, checkitem = True) + self.check2 = MenuItem("Auto Connection", self.toggleAuto, + sensitive=False, checkitem=True) self.menu.append(self.check2) - self.check3 = MenuItem("Lou Reed Mode",self.toggleLouReedMode,sensitive = False, checkitem = True) + self.check3 = MenuItem("Lou Reed Mode", self.toggleLouReedMode, + sensitive=False, checkitem=True) self.menu.append(self.check3) - self.check4 = MenuItem("Concert Hall Mode",self.toggleParrotConcertHall,sensitive = False, checkitem = True) + self.check4 = MenuItem( + "Concert Hall Mode", self.toggleParrotConcertHall, + sensitive=False, checkitem=True) self.menu.append(self.check4) - self.quit = MenuItem("Quit",sys.exit,sensitive = True, checkitem = True) + self.quit = MenuItem("Quit", sys.exit, sensitive=True, checkitem=True) self.menu.append(self.quit) - SysIndicator.__init__(self,icon = "zik-audio-headset",menu = self.menu) + SysIndicator.__init__(self, icon="zik-audio-headset", menu=self.menu) - self.connected=False - self.p = re.compile('90:03:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}') + self.connected = False + self.p = re.compile( + '90:03:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}' + ) def EstablishConnection(self): if self.connected: @@ -52,7 +65,7 @@ class ParrotZikIndicator(SysIndicator): else: print "Connection already established" else: - mac=BluetoothPairedDevices.ParrotZikMac() + mac = BluetoothPairedDevices.ParrotZikMac() if mac: self.parrot = ParrotZik.ParrotZik(mac) if not self.parrot.sock: @@ -91,21 +104,21 @@ class ParrotZikIndicator(SysIndicator): self.CheckBattery() return True - def toggleANC(self,widget): + def toggleANC(self, widget): if self.connected: if self.check.get_active(): self.parrot.setNoiseCancel("true") else: self.parrot.setNoiseCancel("false") - def toggleAuto(self,widget): + def toggleAuto(self, widget): if self.connected: if self.check2.get_active(): self.parrot.setAutoConnection("true") else: self.parrot.setAutoConnection("false") - def toggleLouReedMode(self,widget): + def toggleLouReedMode(self, widget): if self.connected: if self.check3.get_active(): self.parrot.setLouReedMode("true") @@ -114,7 +127,7 @@ class ParrotZikIndicator(SysIndicator): self.parrot.setLouReedMode("false") self.check4.set_sensitive(True) - def toggleParrotConcertHall(self,widget): + def toggleParrotConcertHall(self, widget): if self.connected: if self.check4.get_active(): self.parrot.setParrotConcertHall("true") @@ -129,28 +142,30 @@ class ParrotZikIndicator(SysIndicator): if self.parrot.BatteryCharging: self.batteryLevel = "Charging" self.setIcon("zik-battery-charging") - self.batteryLevel="Unknown" - self.batteryState="Charging" - elif self.batteryLevel>80: + self.batteryLevel = "Unknown" + self.batteryState = "Charging" + elif self.batteryLevel > 80: self.setIcon("zik-battery-100") - self.batteryState="In Use" - elif self.batteryLevel>60: + self.batteryState = "In Use" + elif self.batteryLevel > 60: self.setIcon("zik-battery-080") - self.batteryState="In Use" - elif self.batteryLevel>40: + self.batteryState = "In Use" + elif self.batteryLevel > 40: self.setIcon("zik-battery-060") - self.batteryState="In Use" - elif self.batteryLevel>20: + self.batteryState = "In Use" + elif self.batteryLevel > 20: self.setIcon("zik-battery-040") - self.batteryState="In Use" + self.batteryState = "In Use" else: self.setIcon("zik-battery-low") - self.batteryState="In Use" - - self.info_item.set_label("Connected to: "+self.name) - self.firmware_version.set_label("Firmware version: "+self.version) - self.battery_state.set_label("State: "+self.batteryState) - self.battery_level.set_label("Battery Level: "+str(self.batteryLevel)) + self.batteryState = "In Use" + + self.info_item.set_label("Connected to: " + self.name) + self.firmware_version.set_label( + "Firmware version: " + self.version) + self.battery_state.set_label("State: " + self.batteryState) + self.battery_level.set_label( + "Battery Level: " + str(self.batteryLevel)) else: self.setIcon("zik-audio-headset") self.info_item.set_label("Parrot Zik Not connected..") -- cgit v1.2.1 From cac2d834faa85153fba2fca3c7faa1de34183b4d Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 14:27:54 +0200 Subject: Make ParrotZik more pythonic. --- ParrotZikTray | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index f35662a..193f8d1 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -73,30 +73,30 @@ class ParrotZikIndicator(SysIndicator): return False self.connected = True - self.name = self.parrot.getFriendlyName() - self.version = self.parrot.getVersion() + self.name = self.parrot.friendly_name + self.version = self.parrot.version self.check.set_sensitive(True) self.check2.set_sensitive(True) self.check3.set_sensitive(True) self.check4.set_sensitive(True) - if self.parrot.getNoiseCancel() == "true": + if self.parrot.noise_cancel == "true": self.check.set_active(True) else: self.check.set_active(False) - if self.parrot.getAutoConnection() == "true": + if self.parrot.auto_connect == "true": self.check2.set_active(True) else: self.check2.set_active(False) - if self.parrot.getLouReedMode() == "true": + if self.parrot.lou_reed_mode == "true": self.check3.set_active(True) else: self.check3.set_active(False) - if self.parrot.getParrotConcertHall() == "true": + if self.parrot.concert_hall == "true": self.check4.set_active(True) else: self.check4.set_active(False) @@ -114,30 +114,30 @@ class ParrotZikIndicator(SysIndicator): def toggleAuto(self, widget): if self.connected: if self.check2.get_active(): - self.parrot.setAutoConnection("true") + self.parrot.auto_connection = "true" else: - self.parrot.setAutoConnection("false") + self.parrot.auto_connection = "false" def toggleLouReedMode(self, widget): if self.connected: if self.check3.get_active(): - self.parrot.setLouReedMode("true") + self.parrot.lou_reed_mode = "true" self.check4.set_sensitive(False) else: - self.parrot.setLouReedMode("false") + self.parrot.lou_reed_mode = "false" self.check4.set_sensitive(True) def toggleParrotConcertHall(self, widget): if self.connected: if self.check4.get_active(): - self.parrot.setParrotConcertHall("true") + self.parrot.concert_hall = "true" else: - self.parrot.setParrotConcertHall("false") + self.parrot.concert_hall = "false" def CheckBattery(self): if self.connected: print "Updating battery" - self.batteryLevel = int(self.parrot.getBatteryLevel()) + self.batteryLevel = int(self.parrot.battery_level) if self.parrot.BatteryCharging: self.batteryLevel = "Charging" -- cgit v1.2.1 From 0d692102cd94f70e78cf036cb9f64c485ea8b6a5 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 15:15:44 +0200 Subject: Add Zik 2.0 compatibility. --- ParrotZikTray | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 193f8d1..1f934ea 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -107,9 +107,9 @@ class ParrotZikIndicator(SysIndicator): def toggleANC(self, widget): if self.connected: if self.check.get_active(): - self.parrot.setNoiseCancel("true") + self.parrot.noise_cancel = "true" else: - self.parrot.setNoiseCancel("false") + self.parrot.noise_cancel = "false" def toggleAuto(self, widget): if self.connected: -- cgit v1.2.1 From 215e013edafbf2688cf5dc1742716be919502ee5 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 19:03:25 +0200 Subject: Allow adding different zik version interfaces. --- ParrotZikTray | 232 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 139 insertions(+), 93 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 1f934ea..934062c 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -1,12 +1,33 @@ #!/usr/bin/env python -import re import ParrotZik import BluetoothPairedDevices from SysIndicator import * -# seconds -UPDATE_FREQUENCY = 30 +UPDATE_FREQUENCY = 1000 +RECONNECT_FREQUENCY = 5000 + +class repeat(object): + def __init__(self, f): + self.f = f + self.id = None + + def start(self, cls, frequency): + if not self.id: + def run(): + self.f(cls) + return True + + self.id = gtk.timeout_add(frequency, run) + + def stop(self): + if self.id: + gtk.timeout_remove(self.id) + self.id = None + + +class Stop(Exception): + pass class ParrotZikIndicator(SysIndicator): @@ -18,91 +39,128 @@ class ParrotZikIndicator(SysIndicator): None, sensitive=False) self.menu.append(self.info_item) - self.battery_level = MenuItem("Battery Level:", - None, sensitive=False) - self.menu.append(self.battery_level) - - self.battery_state = MenuItem("Battery State:", - None, sensitive=False) - self.menu.append(self.battery_state) - - self.firmware_version = MenuItem("Firmware Version:", - None, sensitive=False) - self.menu.append(self.firmware_version) - - self.check = MenuItem("Noise Cancellation", self.toggleANC, - sensitive=False, checkitem=True) - self.menu.append(self.check) - - self.check2 = MenuItem("Auto Connection", self.toggleAuto, - sensitive=False, checkitem=True) - self.menu.append(self.check2) - - self.check3 = MenuItem("Lou Reed Mode", self.toggleLouReedMode, - sensitive=False, checkitem=True) - self.menu.append(self.check3) - - self.check4 = MenuItem( - "Concert Hall Mode", self.toggleParrotConcertHall, - sensitive=False, checkitem=True) - self.menu.append(self.check4) - - self.quit = MenuItem("Quit", sys.exit, sensitive=True, checkitem=True) + self.version_1_interface = ParrotZikVersion1Interface(self) + self.quit = MenuItem("Quit", gtk.main_quit, checkitem=True) self.menu.append(self.quit) SysIndicator.__init__(self, icon="zik-audio-headset", menu=self.menu) - self.connected = False - self.p = re.compile( - '90:03:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}' - ) + self.active_interface = None + @repeat def EstablishConnection(self): - if self.connected: - if not self.parrot.sock: + if self.active_interface: + if not self.active_interface.parrot.sock: print "Lost connection" - self.connected = False + self.active_interface.deactivate() else: - print "Connection already established" + self.EstablishConnection.stop() else: mac = BluetoothPairedDevices.ParrotZikMac() if mac: - self.parrot = ParrotZik.ParrotZik(mac) - if not self.parrot.sock: + parrot = ParrotZik.ParrotZik(mac) + if parrot.sock: + self.version_1_interface.activate(parrot) + self.CheckBattery.start(self, UPDATE_FREQUENCY) + self.EstablishConnection.stop() + print "Connected" + else: print "Failed to connect to Parrot Zik %s" % mac - return False - - self.connected = True - self.name = self.parrot.friendly_name - self.version = self.parrot.version - - self.check.set_sensitive(True) - self.check2.set_sensitive(True) - self.check3.set_sensitive(True) - self.check4.set_sensitive(True) - if self.parrot.noise_cancel == "true": - self.check.set_active(True) - else: - self.check.set_active(False) + @repeat + def CheckBattery(self): + if self.active_interface: + self.active_interface.CheckBattery() + else: + self.EstablishConnection.start(self, RECONNECT_FREQUENCY) + self.CheckBattery.stop() - if self.parrot.auto_connect == "true": - self.check2.set_active(True) - else: - self.check2.set_active(False) + def main(self): + self.EstablishConnection.start(self, RECONNECT_FREQUENCY) + SysIndicator.main(self) + +class ParrotZikVersion1Interface: + def __init__(self, indicator): + self.indicator = indicator + self.battery_level = MenuItem("Battery Level:", None, sensitive=False, + visible=False) + self.battery_state = MenuItem("Battery State:", None, sensitive=False, + visible=False) + self.firmware_version = MenuItem("Firmware Version:", None, + sensitive=False, visible=False) + self.check = MenuItem("Noise Cancellation", self.toggleANC, + checkitem=True, visible=False) + self.check2 = MenuItem("Auto Connection", self.toggleAuto, + checkitem=True, visible=False) + self.check3 = MenuItem("Lou Reed Mode", self.toggleLouReedMode, + checkitem=True, visible=False) + self.check4 = MenuItem( + "Concert Hall Mode", self.toggleParrotConcertHall, + checkitem=True, visible=False) + self.indicator.menu.append(self.battery_level) + self.indicator.menu.append(self.battery_state) + self.indicator.menu.append(self.firmware_version) + self.indicator.menu.append(self.check) + self.indicator.menu.append(self.check2) + self.indicator.menu.append(self.check3) + self.indicator.menu.append(self.check4) + + @property + def connected(self): + if self.parrot: + return self.parrot.sock + else: + return False + + def activate(self, parrot): + self.parrot = parrot + self.battery_level.show() + self.battery_state.show() + self.firmware_version.show() + self.check.show() + self.check2.show() + self.check3.show() + self.check4.show() + + self.name = self.parrot.friendly_name + self.version = self.parrot.version + + if self.parrot.noise_cancel == "true": + self.check.set_active(True) + else: + self.check.set_active(False) - if self.parrot.lou_reed_mode == "true": - self.check3.set_active(True) - else: - self.check3.set_active(False) + if self.parrot.auto_connect == "true": + self.check2.set_active(True) + else: + self.check2.set_active(False) - if self.parrot.concert_hall == "true": - self.check4.set_active(True) - else: - self.check4.set_active(False) + if self.parrot.lou_reed_mode == "true": + self.check3.set_active(True) + else: + self.check3.set_active(False) - self.CheckBattery() - return True + if self.parrot.concert_hall == "true": + self.check4.set_active(True) + else: + self.check4.set_active(False) + + self.indicator.menu.reposition() + self.indicator.active_interface = self + + def deactivate(self): + self.parrot = None + self.battery_level.hide() + self.battery_state.hide() + self.firmware_version.hide() + self.check.hide() + self.check2.hide() + self.check3.hide() + self.check4.hide() + self.indicator.setIcon("zik-audio-headset") + self.indicator.info_item.set_label("Parrot Zik Not connected..") + self.indicator.menu.reposition() + self.indicator.active_interface = None def toggleANC(self, widget): if self.connected: @@ -126,7 +184,7 @@ class ParrotZikIndicator(SysIndicator): else: self.parrot.lou_reed_mode = "false" self.check4.set_sensitive(True) - + def toggleParrotConcertHall(self, widget): if self.connected: if self.check4.get_active(): @@ -138,48 +196,36 @@ class ParrotZikIndicator(SysIndicator): if self.connected: print "Updating battery" self.batteryLevel = int(self.parrot.battery_level) - + if self.parrot.BatteryCharging: self.batteryLevel = "Charging" - self.setIcon("zik-battery-charging") + self.indicator.setIcon("zik-battery-charging") self.batteryLevel = "Unknown" self.batteryState = "Charging" elif self.batteryLevel > 80: - self.setIcon("zik-battery-100") + self.indicator.setIcon("zik-battery-100") self.batteryState = "In Use" elif self.batteryLevel > 60: - self.setIcon("zik-battery-080") + self.indicator.setIcon("zik-battery-080") self.batteryState = "In Use" elif self.batteryLevel > 40: - self.setIcon("zik-battery-060") + self.indicator.setIcon("zik-battery-060") self.batteryState = "In Use" elif self.batteryLevel > 20: - self.setIcon("zik-battery-040") + self.indicator.setIcon("zik-battery-040") self.batteryState = "In Use" else: - self.setIcon("zik-battery-low") + self.indicator.setIcon("zik-battery-low") self.batteryState = "In Use" - self.info_item.set_label("Connected to: " + self.name) + self.indicator.info_item.set_label("Connected to: " + self.name) self.firmware_version.set_label( "Firmware version: " + self.version) self.battery_state.set_label("State: " + self.batteryState) self.battery_level.set_label( "Battery Level: " + str(self.batteryLevel)) else: - self.setIcon("zik-audio-headset") - self.info_item.set_label("Parrot Zik Not connected..") - self.check.set_sensitive(False) - self.check2.set_sensitive(False) - self.check3.set_sensitive(False) - self.check4.set_sensitive(False) - return True - - def main(self): - self.EstablishConnection() - gtk.timeout_add(UPDATE_FREQUENCY * 1000, self.EstablishConnection) - gtk.timeout_add(UPDATE_FREQUENCY * 1000, self.CheckBattery) - SysIndicator.main(self) + self.deactivate() if __name__ == "__main__": indicator = ParrotZikIndicator() -- cgit v1.2.1 From 095b951a7706a743ff556035fe215cafc267d2a7 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 19:19:32 +0200 Subject: Refactor. --- ParrotZikTray | 66 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 33 insertions(+), 33 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 934062c..9862774 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -88,22 +88,22 @@ class ParrotZikVersion1Interface: visible=False) self.firmware_version = MenuItem("Firmware Version:", None, sensitive=False, visible=False) - self.check = MenuItem("Noise Cancellation", self.toggleANC, - checkitem=True, visible=False) - self.check2 = MenuItem("Auto Connection", self.toggleAuto, - checkitem=True, visible=False) - self.check3 = MenuItem("Lou Reed Mode", self.toggleLouReedMode, - checkitem=True, visible=False) - self.check4 = MenuItem( + self.noise_cancelation = MenuItem("Noise Cancellation", self.toggleANC, + checkitem=True, visible=False) + self.auto_connection = MenuItem("Auto Connection", self.toggleAuto, + checkitem=True, visible=False) + self.lou_reed_mode = MenuItem("Lou Reed Mode", self.toggleLouReedMode, + checkitem=True, visible=False) + self.concert_hall_mode = MenuItem( "Concert Hall Mode", self.toggleParrotConcertHall, checkitem=True, visible=False) self.indicator.menu.append(self.battery_level) self.indicator.menu.append(self.battery_state) self.indicator.menu.append(self.firmware_version) - self.indicator.menu.append(self.check) - self.indicator.menu.append(self.check2) - self.indicator.menu.append(self.check3) - self.indicator.menu.append(self.check4) + self.indicator.menu.append(self.noise_cancelation) + self.indicator.menu.append(self.auto_connection) + self.indicator.menu.append(self.lou_reed_mode) + self.indicator.menu.append(self.concert_hall_mode) @property def connected(self): @@ -117,33 +117,33 @@ class ParrotZikVersion1Interface: self.battery_level.show() self.battery_state.show() self.firmware_version.show() - self.check.show() - self.check2.show() - self.check3.show() - self.check4.show() + self.noise_cancelation.show() + self.auto_connection.show() + self.lou_reed_mode.show() + self.concert_hall_mode.show() self.name = self.parrot.friendly_name self.version = self.parrot.version if self.parrot.noise_cancel == "true": - self.check.set_active(True) + self.noise_cancelation.set_active(True) else: - self.check.set_active(False) + self.noise_cancelation.set_active(False) if self.parrot.auto_connect == "true": - self.check2.set_active(True) + self.auto_connection.set_active(True) else: - self.check2.set_active(False) + self.auto_connection.set_active(False) if self.parrot.lou_reed_mode == "true": - self.check3.set_active(True) + self.lou_reed_mode.set_active(True) else: - self.check3.set_active(False) + self.lou_reed_mode.set_active(False) if self.parrot.concert_hall == "true": - self.check4.set_active(True) + self.concert_hall_mode.set_active(True) else: - self.check4.set_active(False) + self.concert_hall_mode.set_active(False) self.indicator.menu.reposition() self.indicator.active_interface = self @@ -153,10 +153,10 @@ class ParrotZikVersion1Interface: self.battery_level.hide() self.battery_state.hide() self.firmware_version.hide() - self.check.hide() - self.check2.hide() - self.check3.hide() - self.check4.hide() + self.noise_cancelation.hide() + self.auto_connection.hide() + self.lou_reed_mode.hide() + self.concert_hall_mode.hide() self.indicator.setIcon("zik-audio-headset") self.indicator.info_item.set_label("Parrot Zik Not connected..") self.indicator.menu.reposition() @@ -164,30 +164,30 @@ class ParrotZikVersion1Interface: def toggleANC(self, widget): if self.connected: - if self.check.get_active(): + if self.noise_cancelation.get_active(): self.parrot.noise_cancel = "true" else: self.parrot.noise_cancel = "false" def toggleAuto(self, widget): if self.connected: - if self.check2.get_active(): + if self.auto_connection.get_active(): self.parrot.auto_connection = "true" else: self.parrot.auto_connection = "false" def toggleLouReedMode(self, widget): if self.connected: - if self.check3.get_active(): + if self.lou_reed_mode.get_active(): self.parrot.lou_reed_mode = "true" - self.check4.set_sensitive(False) + self.concert_hall_mode.set_sensitive(False) else: self.parrot.lou_reed_mode = "false" - self.check4.set_sensitive(True) + self.concert_hall_mode.set_sensitive(True) def toggleParrotConcertHall(self, widget): if self.connected: - if self.check4.get_active(): + if self.concert_hall_mode.get_active(): self.parrot.concert_hall = "true" else: self.parrot.concert_hall = "false" -- cgit v1.2.1 From 0b259b140bfa455ff65cbe74907286d87de15d2e Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 19:32:58 +0200 Subject: Extract base interface. --- ParrotZikTray | 89 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 38 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 9862774..bd85db5 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -79,31 +79,22 @@ class ParrotZikIndicator(SysIndicator): self.EstablishConnection.start(self, RECONNECT_FREQUENCY) SysIndicator.main(self) -class ParrotZikVersion1Interface: +class ParrotZikBaseInterface(object): def __init__(self, indicator): self.indicator = indicator + self.parrot = None self.battery_level = MenuItem("Battery Level:", None, sensitive=False, visible=False) self.battery_state = MenuItem("Battery State:", None, sensitive=False, visible=False) self.firmware_version = MenuItem("Firmware Version:", None, sensitive=False, visible=False) - self.noise_cancelation = MenuItem("Noise Cancellation", self.toggleANC, - checkitem=True, visible=False) self.auto_connection = MenuItem("Auto Connection", self.toggleAuto, checkitem=True, visible=False) - self.lou_reed_mode = MenuItem("Lou Reed Mode", self.toggleLouReedMode, - checkitem=True, visible=False) - self.concert_hall_mode = MenuItem( - "Concert Hall Mode", self.toggleParrotConcertHall, - checkitem=True, visible=False) self.indicator.menu.append(self.battery_level) self.indicator.menu.append(self.battery_state) self.indicator.menu.append(self.firmware_version) - self.indicator.menu.append(self.noise_cancelation) self.indicator.menu.append(self.auto_connection) - self.indicator.menu.append(self.lou_reed_mode) - self.indicator.menu.append(self.concert_hall_mode) @property def connected(self): @@ -117,24 +108,63 @@ class ParrotZikVersion1Interface: self.battery_level.show() self.battery_state.show() self.firmware_version.show() - self.noise_cancelation.show() self.auto_connection.show() - self.lou_reed_mode.show() - self.concert_hall_mode.show() self.name = self.parrot.friendly_name self.version = self.parrot.version - if self.parrot.noise_cancel == "true": - self.noise_cancelation.set_active(True) - else: - self.noise_cancelation.set_active(False) - if self.parrot.auto_connect == "true": self.auto_connection.set_active(True) else: self.auto_connection.set_active(False) + self.indicator.active_interface = self + self.indicator.menu.reposition() + + def deactivate(self): + self.parrot = None + self.battery_level.hide() + self.battery_state.hide() + self.firmware_version.hide() + self.auto_connection.hide() + self.indicator.setIcon("zik-audio-headset") + self.indicator.info_item.set_label("Parrot Zik Not connected..") + self.indicator.menu.reposition() + self.indicator.active_interface = None + + def toggleAuto(self, widget): + if self.connected: + if self.auto_connection.get_active(): + self.parrot.auto_connection = "true" + else: + self.parrot.auto_connection = "false" + + +class ParrotZikVersion1Interface(ParrotZikBaseInterface): + def __init__(self, indicator): + super(ParrotZikVersion1Interface, self).__init__(indicator) + self.noise_cancelation = MenuItem("Noise Cancellation", self.toggleANC, + checkitem=True, visible=False) + self.lou_reed_mode = MenuItem("Lou Reed Mode", self.toggleLouReedMode, + checkitem=True, visible=False) + self.concert_hall_mode = MenuItem( + "Concert Hall Mode", self.toggleParrotConcertHall, + checkitem=True, visible=False) + self.indicator.menu.append(self.noise_cancelation) + self.indicator.menu.append(self.lou_reed_mode) + self.indicator.menu.append(self.concert_hall_mode) + + def activate(self, parrot): + self.noise_cancelation.show() + self.lou_reed_mode.show() + self.concert_hall_mode.show() + super(ParrotZikVersion1Interface, self).activate(parrot) + + if self.parrot.noise_cancel == "true": + self.noise_cancelation.set_active(True) + else: + self.noise_cancelation.set_active(False) + if self.parrot.lou_reed_mode == "true": self.lou_reed_mode.set_active(True) else: @@ -145,22 +175,11 @@ class ParrotZikVersion1Interface: else: self.concert_hall_mode.set_active(False) - self.indicator.menu.reposition() - self.indicator.active_interface = self - def deactivate(self): - self.parrot = None - self.battery_level.hide() - self.battery_state.hide() - self.firmware_version.hide() self.noise_cancelation.hide() - self.auto_connection.hide() self.lou_reed_mode.hide() self.concert_hall_mode.hide() - self.indicator.setIcon("zik-audio-headset") - self.indicator.info_item.set_label("Parrot Zik Not connected..") - self.indicator.menu.reposition() - self.indicator.active_interface = None + super(ParrotZikVersion1Interface, self).deactivate() def toggleANC(self, widget): if self.connected: @@ -169,13 +188,6 @@ class ParrotZikVersion1Interface: else: self.parrot.noise_cancel = "false" - def toggleAuto(self, widget): - if self.connected: - if self.auto_connection.get_active(): - self.parrot.auto_connection = "true" - else: - self.parrot.auto_connection = "false" - def toggleLouReedMode(self, widget): if self.connected: if self.lou_reed_mode.get_active(): @@ -227,6 +239,7 @@ class ParrotZikVersion1Interface: else: self.deactivate() + if __name__ == "__main__": indicator = ParrotZikIndicator() indicator.main() -- cgit v1.2.1 From 3093abbcd7d08680bf39ab2e9d404faecb433965 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 19:41:13 +0200 Subject: Refactor. --- ParrotZikTray | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index bd85db5..1e32e23 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -4,9 +4,10 @@ import ParrotZik import BluetoothPairedDevices from SysIndicator import * -UPDATE_FREQUENCY = 1000 +REFRESH_FREQUENCY = 1000 RECONNECT_FREQUENCY = 5000 + class repeat(object): def __init__(self, f): self.f = f @@ -48,35 +49,35 @@ class ParrotZikIndicator(SysIndicator): self.active_interface = None @repeat - def EstablishConnection(self): + def reconnect(self): if self.active_interface: if not self.active_interface.parrot.sock: print "Lost connection" self.active_interface.deactivate() else: - self.EstablishConnection.stop() + self.reconnect.stop() else: mac = BluetoothPairedDevices.ParrotZikMac() if mac: parrot = ParrotZik.ParrotZik(mac) if parrot.sock: self.version_1_interface.activate(parrot) - self.CheckBattery.start(self, UPDATE_FREQUENCY) - self.EstablishConnection.stop() + self.autorefresh.start(self, REFRESH_FREQUENCY) + self.reconnect.stop() print "Connected" else: print "Failed to connect to Parrot Zik %s" % mac @repeat - def CheckBattery(self): + def autorefresh(self): if self.active_interface: - self.active_interface.CheckBattery() + self.active_interface.refresh() else: - self.EstablishConnection.start(self, RECONNECT_FREQUENCY) - self.CheckBattery.stop() + self.reconnect.start(self, RECONNECT_FREQUENCY) + self.autorefresh.stop() def main(self): - self.EstablishConnection.start(self, RECONNECT_FREQUENCY) + self.reconnect.start(self, RECONNECT_FREQUENCY) SysIndicator.main(self) class ParrotZikBaseInterface(object): @@ -204,7 +205,7 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): else: self.parrot.concert_hall = "false" - def CheckBattery(self): + def refresh(self): if self.connected: print "Updating battery" self.batteryLevel = int(self.parrot.battery_level) -- cgit v1.2.1 From 566a27ff40c9478b2fd005890e39705082aceb9c Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 19:42:41 +0200 Subject: Fix imports. --- ParrotZikTray | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 1e32e23..4518bc9 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -1,8 +1,11 @@ #!/usr/bin/env python +import gtk import ParrotZik import BluetoothPairedDevices -from SysIndicator import * +from SysIndicator import MenuItem +from SysIndicator import UniversalMenu +from SysIndicator import SysIndicator REFRESH_FREQUENCY = 1000 RECONNECT_FREQUENCY = 5000 -- cgit v1.2.1 From dfb630d52ccae6c8fdd70ab7210c32b327a4fed7 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 20:35:58 +0200 Subject: Refactor. --- ParrotZikTray | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 4518bc9..f66de17 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -4,7 +4,7 @@ import gtk import ParrotZik import BluetoothPairedDevices from SysIndicator import MenuItem -from SysIndicator import UniversalMenu +from SysIndicator import Menu from SysIndicator import SysIndicator REFRESH_FREQUENCY = 1000 @@ -37,7 +37,7 @@ class Stop(Exception): class ParrotZikIndicator(SysIndicator): def __init__(self): - self.menu = UniversalMenu() + self.menu = Menu() self.info_item = MenuItem("Parrot Zik Not connected..", None, sensitive=False) -- cgit v1.2.1 From 4d780ca17fd26bf963f0a530fb5cf50e4435f2b0 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 22:30:49 +0200 Subject: Refresh data less often. --- ParrotZikTray | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index f66de17..6a7ab69 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -7,7 +7,7 @@ from SysIndicator import MenuItem from SysIndicator import Menu from SysIndicator import SysIndicator -REFRESH_FREQUENCY = 1000 +REFRESH_FREQUENCY = 30000 RECONNECT_FREQUENCY = 5000 @@ -16,6 +16,9 @@ class repeat(object): self.f = f self.id = None + def __call__(self, cls): + self.f(cls) + def start(self, cls, frequency): if not self.id: def run(): @@ -65,6 +68,7 @@ class ParrotZikIndicator(SysIndicator): parrot = ParrotZik.ParrotZik(mac) if parrot.sock: self.version_1_interface.activate(parrot) + self.autorefresh(self) self.autorefresh.start(self, REFRESH_FREQUENCY) self.reconnect.stop() print "Connected" -- cgit v1.2.1 From efb6d2808391ffc006996cacc70273fd67f12513 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 22:31:29 +0200 Subject: Remove unneeded. --- ParrotZikTray | 4 ---- 1 file changed, 4 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 6a7ab69..ee492b2 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -33,10 +33,6 @@ class repeat(object): self.id = None -class Stop(Exception): - pass - - class ParrotZikIndicator(SysIndicator): def __init__(self): -- cgit v1.2.1 From a9cfa13c5718bac0dd62a2aef0c39bc05590e55e Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 12 Jun 2015 23:01:36 +0200 Subject: Display true values. --- ParrotZikTray | 51 +++++++++++++++------------------------------------ 1 file changed, 15 insertions(+), 36 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index ee492b2..2245807 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -117,10 +117,7 @@ class ParrotZikBaseInterface(object): self.name = self.parrot.friendly_name self.version = self.parrot.version - if self.parrot.auto_connect == "true": - self.auto_connection.set_active(True) - else: - self.auto_connection.set_active(False) + self.auto_connection.set_active(self.parrot.auto_connect) self.indicator.active_interface = self self.indicator.menu.reposition() @@ -138,10 +135,8 @@ class ParrotZikBaseInterface(object): def toggleAuto(self, widget): if self.connected: - if self.auto_connection.get_active(): - self.parrot.auto_connection = "true" - else: - self.parrot.auto_connection = "false" + self.parrot.auto_connection = self.auto_connection.get_active() + self.auto_connection.set_active(self.parrot.auto_connection) class ParrotZikVersion1Interface(ParrotZikBaseInterface): @@ -164,20 +159,9 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): self.concert_hall_mode.show() super(ParrotZikVersion1Interface, self).activate(parrot) - if self.parrot.noise_cancel == "true": - self.noise_cancelation.set_active(True) - else: - self.noise_cancelation.set_active(False) - - if self.parrot.lou_reed_mode == "true": - self.lou_reed_mode.set_active(True) - else: - self.lou_reed_mode.set_active(False) - - if self.parrot.concert_hall == "true": - self.concert_hall_mode.set_active(True) - else: - self.concert_hall_mode.set_active(False) + self.noise_cancelation.set_active(self.parrot.noise_cancel) + self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) + self.concert_hall_mode.set_active(self.parrot.concert_hall) def deactivate(self): self.noise_cancelation.hide() @@ -187,26 +171,21 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): def toggleANC(self, widget): if self.connected: - if self.noise_cancelation.get_active(): - self.parrot.noise_cancel = "true" - else: - self.parrot.noise_cancel = "false" + self.parrot.noise_cancel = self.noise_cancelation.get_active() + self.noise_cancelation.set_active(self.parrot.noise_cancel) def toggleLouReedMode(self, widget): if self.connected: - if self.lou_reed_mode.get_active(): - self.parrot.lou_reed_mode = "true" - self.concert_hall_mode.set_sensitive(False) - else: - self.parrot.lou_reed_mode = "false" - self.concert_hall_mode.set_sensitive(True) + self.parrot.lou_reed_mode = self.lou_reed_mode.get_active() + self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) + self.concert_hall_mode.set_active(self.parrot.concert_hall) + self.concert_hall_mode.set_sensitive( + not self.lou_reed_mode.get_active()) def toggleParrotConcertHall(self, widget): if self.connected: - if self.concert_hall_mode.get_active(): - self.parrot.concert_hall = "true" - else: - self.parrot.concert_hall = "false" + self.parrot.concert_hall = self.concert_hall_mode.get_active() + self.concert_hall_mode.set_active(self.parrot.concert_hall) def refresh(self): if self.connected: -- cgit v1.2.1 From 2e8383760b2f32e8d068a4b235b6379cd3f06c17 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 00:06:19 +0200 Subject: First step of zik 2.0 feature implementation. --- ParrotZikTray | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 114 insertions(+), 5 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 2245807..b955a47 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -43,6 +43,7 @@ class ParrotZikIndicator(SysIndicator): self.menu.append(self.info_item) self.version_1_interface = ParrotZikVersion1Interface(self) + self.version_2_interface = ParrotZikVersion2Interface(self) self.quit = MenuItem("Quit", gtk.main_quit, checkitem=True) self.menu.append(self.quit) @@ -53,7 +54,7 @@ class ParrotZikIndicator(SysIndicator): @repeat def reconnect(self): if self.active_interface: - if not self.active_interface.parrot.sock: + if not self.active_interface.connected: print "Lost connection" self.active_interface.deactivate() else: @@ -61,9 +62,12 @@ class ParrotZikIndicator(SysIndicator): else: mac = BluetoothPairedDevices.ParrotZikMac() if mac: - parrot = ParrotZik.ParrotZik(mac) - if parrot.sock: - self.version_1_interface.activate(parrot) + parrot = ParrotZik.connect(mac) + if parrot.api.sock: + if parrot.version.startswith('1'): + self.version_1_interface.activate(parrot) + else: + self.version_2_interface.activate(parrot) self.autorefresh(self) self.autorefresh.start(self, REFRESH_FREQUENCY) self.reconnect.stop() @@ -103,7 +107,7 @@ class ParrotZikBaseInterface(object): @property def connected(self): if self.parrot: - return self.parrot.sock + return self.parrot.api.sock else: return False @@ -138,6 +142,9 @@ class ParrotZikBaseInterface(object): self.parrot.auto_connection = self.auto_connection.get_active() self.auto_connection.set_active(self.parrot.auto_connection) + def refresh(self): + raise NotImplementedError + class ParrotZikVersion1Interface(ParrotZikBaseInterface): def __init__(self, indicator): @@ -223,6 +230,108 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): self.deactivate() +class ParrotZikVersion2Interface(ParrotZikBaseInterface): + def __init__(self, indicator): + super(ParrotZikVersion2Interface, self).__init__(indicator) + self.noise_cancelation = MenuItem("Noise Cancellation", None, + sensitive=True, visible=False) + self.noise_cancelation_submenu = Menu() + self.noise_cancelation.set_submenu(self.noise_cancelation_submenu) + + self.noise_cancelation_enabled = MenuItem("Enabled", self.toggleANC, + sensitive=False, checkitem=True) + self.noise_cancelation_mode0 = MenuItem("Mode0", self.toggledummy, + sensitive=False, checkitem=True) + self.noise_cancelation_mode1 = MenuItem("Mode1", self.toggledummy, + sensitive=False, checkitem=True) + self.noise_cancelation_mode2 = MenuItem("Mode2", self.toggledummy, + sensitive=False, checkitem=True) + self.noise_cancelation_mode3 = MenuItem("Mode3", self.toggledummy, + sensitive=False, checkitem=True) + self.noise_cancelation_submenu.append(self.noise_cancelation_enabled) + self.noise_cancelation_submenu.append(self.noise_cancelation_mode0) + self.noise_cancelation_submenu.append(self.noise_cancelation_mode1) + self.noise_cancelation_submenu.append(self.noise_cancelation_mode2) + self.noise_cancelation_submenu.append(self.noise_cancelation_mode3) + self.indicator.menu.append(self.noise_cancelation) + + self.concert_hall_mode = MenuItem( + "Sound Mode", None, sensitive=True, checkitem=False, visible=False) + self.concert_hall_mode_submenu = Menu() + self.concert_hall_mode.set_submenu(self.concert_hall_mode_submenu) + + self.concert_hall_mode_enabled = MenuItem("Enabled", None, + sensitive=True, checkitem=True) + self.concert_hall = MenuItem("Concert Hall", None, + sensitive=True, checkitem=True) + self.jazz_mode = MenuItem("Jazz Club", None, + sensitive=True, checkitem=True) + self.living_mode = MenuItem("Libing Room", None, + sensitive=True, checkitem=True) + self.silent_mode = MenuItem("Silent Room", None, + sensitive=True, checkitem=True) + self.concert_hall_mode_submenu.append(self.concert_hall_mode_enabled) + self.concert_hall_mode_submenu.append(self.concert_hall) + self.concert_hall_mode_submenu.append(self.jazz_mode) + self.concert_hall_mode_submenu.append(self.living_mode) + self.concert_hall_mode_submenu.append(self.silent_mode) + self.indicator.menu.append(self.concert_hall_mode) + + self.flight_mode = MenuItem("Flight Mode", None, + sensitive=True, checkitem=True, visible=False) + self.indicator.menu.append(self.flight_mode) + + def activate(self, parrot): + self.noise_cancelation.show() + self.concert_hall_mode.show() + self.flight_mode.show() + super(ParrotZikVersion2Interface, self).activate(parrot) + self.noise_cancelation_enabled.set_active(self.parrot.noise_cancel) + # self.flight_mode.set_active(self.parrot.flight_mode) + + def toggleANC(self, widget): + if self.connected: + self.parrot.noise_cancel = self.noise_cancelation.get_active() + self.noise_cancelation.set_active(self.parrot.noise_cancel) + + def toggledummy(self, widget): + print(widget.get_name()) + + def refresh(self): + if self.connected: + print "Updating battery" + self.batteryLevel = int(self.parrot.battery_level) + + if self.parrot.BatteryCharging: + self.batteryLevel = "Charging" + self.indicator.setIcon("zik-battery-charging") + self.batteryLevel = "Unknown" + self.batteryState = "Charging" + elif self.batteryLevel > 80: + self.indicator.setIcon("zik-battery-100") + self.batteryState = "In Use" + elif self.batteryLevel > 60: + self.indicator.setIcon("zik-battery-080") + self.batteryState = "In Use" + elif self.batteryLevel > 40: + self.indicator.setIcon("zik-battery-060") + self.batteryState = "In Use" + elif self.batteryLevel > 20: + self.indicator.setIcon("zik-battery-040") + self.batteryState = "In Use" + else: + self.indicator.setIcon("zik-battery-low") + self.batteryState = "In Use" + + self.indicator.info_item.set_label("Connected to: " + self.name) + self.firmware_version.set_label( + "Firmware version: " + self.version) + self.battery_state.set_label("State: " + self.batteryState) + self.battery_level.set_label( + "Battery Level: " + str(self.batteryLevel)) + else: + self.deactivate() + if __name__ == "__main__": indicator = ParrotZikIndicator() indicator.main() -- cgit v1.2.1 From 2b0fb4d4f4747f991ef6abd3e26925c0e77433bb Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 00:14:43 +0200 Subject: Refactor. --- ParrotZikTray | 104 +++++++++++++++++++--------------------------------------- 1 file changed, 33 insertions(+), 71 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index b955a47..45aaaf0 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -143,7 +143,39 @@ class ParrotZikBaseInterface(object): self.auto_connection.set_active(self.parrot.auto_connection) def refresh(self): - raise NotImplementedError + if self.connected: + print "Updating battery" + self.batteryLevel = int(self.parrot.battery_level) + + if self.parrot.BatteryCharging: + self.batteryLevel = "Charging" + self.indicator.setIcon("zik-battery-charging") + self.batteryLevel = "Unknown" + self.batteryState = "Charging" + elif self.batteryLevel > 80: + self.indicator.setIcon("zik-battery-100") + self.batteryState = "In Use" + elif self.batteryLevel > 60: + self.indicator.setIcon("zik-battery-080") + self.batteryState = "In Use" + elif self.batteryLevel > 40: + self.indicator.setIcon("zik-battery-060") + self.batteryState = "In Use" + elif self.batteryLevel > 20: + self.indicator.setIcon("zik-battery-040") + self.batteryState = "In Use" + else: + self.indicator.setIcon("zik-battery-low") + self.batteryState = "In Use" + + self.indicator.info_item.set_label("Connected to: " + self.name) + self.firmware_version.set_label( + "Firmware version: " + self.version) + self.battery_state.set_label("State: " + self.batteryState) + self.battery_level.set_label( + "Battery Level: " + str(self.batteryLevel)) + else: + self.deactivate() class ParrotZikVersion1Interface(ParrotZikBaseInterface): @@ -194,41 +226,6 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): self.parrot.concert_hall = self.concert_hall_mode.get_active() self.concert_hall_mode.set_active(self.parrot.concert_hall) - def refresh(self): - if self.connected: - print "Updating battery" - self.batteryLevel = int(self.parrot.battery_level) - - if self.parrot.BatteryCharging: - self.batteryLevel = "Charging" - self.indicator.setIcon("zik-battery-charging") - self.batteryLevel = "Unknown" - self.batteryState = "Charging" - elif self.batteryLevel > 80: - self.indicator.setIcon("zik-battery-100") - self.batteryState = "In Use" - elif self.batteryLevel > 60: - self.indicator.setIcon("zik-battery-080") - self.batteryState = "In Use" - elif self.batteryLevel > 40: - self.indicator.setIcon("zik-battery-060") - self.batteryState = "In Use" - elif self.batteryLevel > 20: - self.indicator.setIcon("zik-battery-040") - self.batteryState = "In Use" - else: - self.indicator.setIcon("zik-battery-low") - self.batteryState = "In Use" - - self.indicator.info_item.set_label("Connected to: " + self.name) - self.firmware_version.set_label( - "Firmware version: " + self.version) - self.battery_state.set_label("State: " + self.batteryState) - self.battery_level.set_label( - "Battery Level: " + str(self.batteryLevel)) - else: - self.deactivate() - class ParrotZikVersion2Interface(ParrotZikBaseInterface): def __init__(self, indicator): @@ -297,41 +294,6 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): def toggledummy(self, widget): print(widget.get_name()) - def refresh(self): - if self.connected: - print "Updating battery" - self.batteryLevel = int(self.parrot.battery_level) - - if self.parrot.BatteryCharging: - self.batteryLevel = "Charging" - self.indicator.setIcon("zik-battery-charging") - self.batteryLevel = "Unknown" - self.batteryState = "Charging" - elif self.batteryLevel > 80: - self.indicator.setIcon("zik-battery-100") - self.batteryState = "In Use" - elif self.batteryLevel > 60: - self.indicator.setIcon("zik-battery-080") - self.batteryState = "In Use" - elif self.batteryLevel > 40: - self.indicator.setIcon("zik-battery-060") - self.batteryState = "In Use" - elif self.batteryLevel > 20: - self.indicator.setIcon("zik-battery-040") - self.batteryState = "In Use" - else: - self.indicator.setIcon("zik-battery-low") - self.batteryState = "In Use" - - self.indicator.info_item.set_label("Connected to: " + self.name) - self.firmware_version.set_label( - "Firmware version: " + self.version) - self.battery_state.set_label("State: " + self.batteryState) - self.battery_level.set_label( - "Battery Level: " + str(self.batteryLevel)) - else: - self.deactivate() - if __name__ == "__main__": indicator = ParrotZikIndicator() indicator.main() -- cgit v1.2.1 From eb6fb90329b1bb0355e00bc588d3740c57ca87bc Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 00:26:23 +0200 Subject: Refactor battery state. --- ParrotZikTray | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 45aaaf0..a69abe4 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -1,8 +1,9 @@ #!/usr/bin/env python import gtk -import ParrotZik import BluetoothPairedDevices +from ParrotZik import BatteryStates +from ParrotZik import connect from SysIndicator import MenuItem from SysIndicator import Menu from SysIndicator import SysIndicator @@ -62,7 +63,7 @@ class ParrotZikIndicator(SysIndicator): else: mac = BluetoothPairedDevices.ParrotZikMac() if mac: - parrot = ParrotZik.connect(mac) + parrot = connect(mac) if parrot.api.sock: if parrot.version.startswith('1'): self.version_1_interface.activate(parrot) @@ -145,35 +146,29 @@ class ParrotZikBaseInterface(object): def refresh(self): if self.connected: print "Updating battery" - self.batteryLevel = int(self.parrot.battery_level) + battery_level = self.parrot.battery_level + battery_state = self.parrot.battery_state - if self.parrot.BatteryCharging: - self.batteryLevel = "Charging" + if battery_state == BatteryStates.CHARGING: self.indicator.setIcon("zik-battery-charging") - self.batteryLevel = "Unknown" - self.batteryState = "Charging" - elif self.batteryLevel > 80: + elif battery_level > 80: self.indicator.setIcon("zik-battery-100") - self.batteryState = "In Use" - elif self.batteryLevel > 60: + elif battery_level > 60: self.indicator.setIcon("zik-battery-080") - self.batteryState = "In Use" - elif self.batteryLevel > 40: + elif battery_level > 40: self.indicator.setIcon("zik-battery-060") - self.batteryState = "In Use" - elif self.batteryLevel > 20: + elif battery_level > 20: self.indicator.setIcon("zik-battery-040") - self.batteryState = "In Use" else: self.indicator.setIcon("zik-battery-low") - self.batteryState = "In Use" self.indicator.info_item.set_label("Connected to: " + self.name) self.firmware_version.set_label( "Firmware version: " + self.version) - self.battery_state.set_label("State: " + self.batteryState) + self.battery_state.set_label( + "State: " + BatteryStates.representation[battery_state]) self.battery_level.set_label( - "Battery Level: " + str(self.batteryLevel)) + "Battery Level: " + str(battery_level)) else: self.deactivate() @@ -294,6 +289,7 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): def toggledummy(self, widget): print(widget.get_name()) + if __name__ == "__main__": indicator = ParrotZikIndicator() indicator.main() -- cgit v1.2.1 From d53188baa1c4175d2f9456ac722d35facb47f818 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 00:28:37 +0200 Subject: Refactor. --- ParrotZikTray | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index a69abe4..6de9e1c 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -119,8 +119,10 @@ class ParrotZikBaseInterface(object): self.firmware_version.show() self.auto_connection.show() - self.name = self.parrot.friendly_name - self.version = self.parrot.version + self.indicator.info_item.set_label("Connected to: " + + self.parrot.friendly_name) + self.firmware_version.set_label( + "Firmware version: " + self.parrot.version) self.auto_connection.set_active(self.parrot.auto_connect) @@ -162,9 +164,6 @@ class ParrotZikBaseInterface(object): else: self.indicator.setIcon("zik-battery-low") - self.indicator.info_item.set_label("Connected to: " + self.name) - self.firmware_version.set_label( - "Firmware version: " + self.version) self.battery_state.set_label( "State: " + BatteryStates.representation[battery_state]) self.battery_level.set_label( -- cgit v1.2.1 From 7856465e1ab0ab69101996b12e93450c6bea160b Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 00:37:49 +0200 Subject: Add flight mode. --- ParrotZikTray | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 6de9e1c..9a96b9b 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -268,7 +268,7 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.concert_hall_mode_submenu.append(self.silent_mode) self.indicator.menu.append(self.concert_hall_mode) - self.flight_mode = MenuItem("Flight Mode", None, + self.flight_mode = MenuItem("Flight Mode", self.toggle_flight_mode, sensitive=True, checkitem=True, visible=False) self.indicator.menu.append(self.flight_mode) @@ -278,13 +278,18 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.flight_mode.show() super(ParrotZikVersion2Interface, self).activate(parrot) self.noise_cancelation_enabled.set_active(self.parrot.noise_cancel) - # self.flight_mode.set_active(self.parrot.flight_mode) + self.flight_mode.set_active(self.parrot.flight_mode) def toggleANC(self, widget): if self.connected: self.parrot.noise_cancel = self.noise_cancelation.get_active() self.noise_cancelation.set_active(self.parrot.noise_cancel) + def toggle_flight_mode(self, widget): + if self.connected: + self.parrot.flight_mode = self.flight_mode.get_active() + self.flight_mode.set_active(self.parrot.flight_mode) + def toggledummy(self, widget): print(widget.get_name()) -- cgit v1.2.1 From 52fb4f7f5561c38631e279a403cd55d8a6632955 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 02:43:36 +0200 Subject: Add Room sound effect feature. --- ParrotZikTray | 95 ++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 18 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 9a96b9b..67ccf65 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -4,6 +4,7 @@ import gtk import BluetoothPairedDevices from ParrotZik import BatteryStates from ParrotZik import connect +from ParrotZik import Rooms from SysIndicator import MenuItem from SysIndicator import Menu from SysIndicator import SysIndicator @@ -223,6 +224,7 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): class ParrotZikVersion2Interface(ParrotZikBaseInterface): def __init__(self, indicator): + self.dirty = False super(ParrotZikVersion2Interface, self).__init__(indicator) self.noise_cancelation = MenuItem("Noise Cancellation", None, sensitive=True, visible=False) @@ -246,27 +248,28 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.noise_cancelation_submenu.append(self.noise_cancelation_mode3) self.indicator.menu.append(self.noise_cancelation) - self.concert_hall_mode = MenuItem( - "Sound Mode", None, sensitive=True, checkitem=False, visible=False) - self.concert_hall_mode_submenu = Menu() - self.concert_hall_mode.set_submenu(self.concert_hall_mode_submenu) - - self.concert_hall_mode_enabled = MenuItem("Enabled", None, - sensitive=True, checkitem=True) - self.concert_hall = MenuItem("Concert Hall", None, - sensitive=True, checkitem=True) - self.jazz_mode = MenuItem("Jazz Club", None, + self.room_sound_effect = MenuItem( + "Room Sound Effect", None, sensitive=True, checkitem=False, visible=False) + self.room_sound_effect_submenu = Menu() + self.room_sound_effect.set_submenu(self.room_sound_effect_submenu) + + self.room_sound_effect_enabled = MenuItem( + "Enabled", self.toggle_room_sound_effect, sensitive=True, checkitem=True) + self.concert_hall_mode = MenuItem("Concert Hall", + self.toggle_concert_hall_mode, + sensitive=True, checkitem=True) + self.jazz_mode = MenuItem("Jazz Club", self.toggle_jazz_club_mode, sensitive=True, checkitem=True) - self.living_mode = MenuItem("Libing Room", None, + self.living_mode = MenuItem("Libing Room", self.toggle_living_room_mode, sensitive=True, checkitem=True) - self.silent_mode = MenuItem("Silent Room", None, + self.silent_mode = MenuItem("Silent Room", self.toggle_silent_room_mode, sensitive=True, checkitem=True) - self.concert_hall_mode_submenu.append(self.concert_hall_mode_enabled) - self.concert_hall_mode_submenu.append(self.concert_hall) - self.concert_hall_mode_submenu.append(self.jazz_mode) - self.concert_hall_mode_submenu.append(self.living_mode) - self.concert_hall_mode_submenu.append(self.silent_mode) - self.indicator.menu.append(self.concert_hall_mode) + self.room_sound_effect_submenu.append(self.room_sound_effect_enabled) + self.room_sound_effect_submenu.append(self.concert_hall_mode) + self.room_sound_effect_submenu.append(self.jazz_mode) + self.room_sound_effect_submenu.append(self.living_mode) + self.room_sound_effect_submenu.append(self.silent_mode) + self.indicator.menu.append(self.room_sound_effect) self.flight_mode = MenuItem("Flight Mode", self.toggle_flight_mode, sensitive=True, checkitem=True, visible=False) @@ -276,9 +279,25 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.noise_cancelation.show() self.concert_hall_mode.show() self.flight_mode.show() + self.room_sound_effect.show() super(ParrotZikVersion2Interface, self).activate(parrot) self.noise_cancelation_enabled.set_active(self.parrot.noise_cancel) self.flight_mode.set_active(self.parrot.flight_mode) + self.read_sound_effect_room() + + sound_effect = self.parrot.sound_effect + self.room_sound_effect_enabled.set_active(sound_effect) + self.concert_hall_mode.set_sensitive(sound_effect) + self.jazz_mode.set_sensitive(sound_effect) + self.living_mode.set_sensitive(sound_effect) + self.silent_mode.set_sensitive(sound_effect) + + def deactivate(self): + self.noise_cancelation.hide() + self.concert_hall_mode.hide() + self.flight_mode.hide() + self.room_sound_effect.hide() + super(ParrotZikVersion2Interface, self).deactivate() def toggleANC(self, widget): if self.connected: @@ -293,6 +312,46 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): def toggledummy(self, widget): print(widget.get_name()) + def toggle_concert_hall_mode(self, widget): + self.toggle_room(Rooms.CONCERT_HALL) + + def toggle_jazz_club_mode(self, widget): + self.toggle_room(Rooms.JAZZ_CLUB) + + def toggle_living_room_mode(self, widget): + self.toggle_room(Rooms.LIVING_ROOM) + + def toggle_silent_room_mode(self, widget): + self.toggle_room(Rooms.SILENT_ROOM) + + def toggle_room(self, room): + if self.connected and not self.dirty: + self.parrot.room = room + self.dirty = True + self.read_sound_effect_room() + self.dirty = False + + def read_sound_effect_room(self): + active_room = self.parrot.room + room_to_menuitem_map = ( + (Rooms.CONCERT_HALL, self.concert_hall_mode), + (Rooms.JAZZ_CLUB, self.jazz_mode), + (Rooms.LIVING_ROOM, self.living_mode), + (Rooms.SILENT_ROOM, self.silent_mode), + ) + for room, menu_item in room_to_menuitem_map: + menu_item.set_active(room == active_room) + + def toggle_room_sound_effect(self, widget): + if self.connected: + self.parrot.sound_effect = self.room_sound_effect_enabled.get_active() + sound_effect = self.parrot.sound_effect + self.room_sound_effect_enabled.set_active(sound_effect) + self.concert_hall_mode.set_sensitive(sound_effect) + self.jazz_mode.set_sensitive(sound_effect) + self.living_mode.set_sensitive(sound_effect) + self.silent_mode.set_sensitive(sound_effect) + if __name__ == "__main__": indicator = ParrotZikIndicator() -- cgit v1.2.1 From 64bcb2f38bc47d9c4edd61fa0590da0698a6bc4b Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 03:35:34 +0200 Subject: Move rooms to submenu. --- ParrotZikTray | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 67ccf65..f2fe92a 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -255,6 +255,13 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.room_sound_effect_enabled = MenuItem( "Enabled", self.toggle_room_sound_effect, sensitive=True, checkitem=True) + self.rooms = MenuItem("Rooms", None, sensitive=True, checkitem=False) + self.room_sound_effect_submenu.append(self.room_sound_effect_enabled) + self.room_sound_effect_submenu.append(self.rooms) + + self.rooms_submenu = Menu() + self.rooms.set_submenu(self.rooms_submenu) + self.concert_hall_mode = MenuItem("Concert Hall", self.toggle_concert_hall_mode, sensitive=True, checkitem=True) @@ -264,11 +271,10 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): sensitive=True, checkitem=True) self.silent_mode = MenuItem("Silent Room", self.toggle_silent_room_mode, sensitive=True, checkitem=True) - self.room_sound_effect_submenu.append(self.room_sound_effect_enabled) - self.room_sound_effect_submenu.append(self.concert_hall_mode) - self.room_sound_effect_submenu.append(self.jazz_mode) - self.room_sound_effect_submenu.append(self.living_mode) - self.room_sound_effect_submenu.append(self.silent_mode) + self.rooms_submenu.append(self.concert_hall_mode) + self.rooms_submenu.append(self.jazz_mode) + self.rooms_submenu.append(self.living_mode) + self.rooms_submenu.append(self.silent_mode) self.indicator.menu.append(self.room_sound_effect) self.flight_mode = MenuItem("Flight Mode", self.toggle_flight_mode, -- cgit v1.2.1 From 45b5c30c6775ae5407f6f9eac2de27aa69493eba Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 03:50:51 +0200 Subject: Add angle feature. --- ParrotZikTray | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index f2fe92a..c23944d 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -256,8 +256,10 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.room_sound_effect_enabled = MenuItem( "Enabled", self.toggle_room_sound_effect, sensitive=True, checkitem=True) self.rooms = MenuItem("Rooms", None, sensitive=True, checkitem=False) + self.angle = MenuItem("Angle", None, sensitive=True, checkitem=False) self.room_sound_effect_submenu.append(self.room_sound_effect_enabled) self.room_sound_effect_submenu.append(self.rooms) + self.room_sound_effect_submenu.append(self.angle) self.rooms_submenu = Menu() self.rooms.set_submenu(self.rooms_submenu) @@ -277,6 +279,27 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.rooms_submenu.append(self.silent_mode) self.indicator.menu.append(self.room_sound_effect) + self.angle_submenu = Menu() + self.angle.set_submenu(self.angle_submenu) + self.angle_30 = MenuItem("30", self.toggle_angle_30, sensitive=True, + checkitem=True) + self.angle_60 = MenuItem("60", self.toggle_angle_60, sensitive=True, + checkitem=True) + self.angle_90 = MenuItem("90", self.toggle_angle_90, sensitive=True, + checkitem=True) + self.angle_120 = MenuItem("120", self.toggle_angle_120, sensitive=True, + checkitem=True) + self.angle_150 = MenuItem("150", self.toggle_angle_150, sensitive=True, + checkitem=True) + self.angle_180 = MenuItem("180", self.toggle_angle_180, sensitive=True, + checkitem=True) + self.angle_submenu.append(self.angle_30) + self.angle_submenu.append(self.angle_60) + self.angle_submenu.append(self.angle_90) + self.angle_submenu.append(self.angle_120) + self.angle_submenu.append(self.angle_150) + self.angle_submenu.append(self.angle_180) + self.flight_mode = MenuItem("Flight Mode", self.toggle_flight_mode, sensitive=True, checkitem=True, visible=False) self.indicator.menu.append(self.flight_mode) @@ -290,6 +313,7 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.noise_cancelation_enabled.set_active(self.parrot.noise_cancel) self.flight_mode.set_active(self.parrot.flight_mode) self.read_sound_effect_room() + self.read_sound_effect_angle() sound_effect = self.parrot.sound_effect self.room_sound_effect_enabled.set_active(sound_effect) @@ -298,6 +322,13 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.living_mode.set_sensitive(sound_effect) self.silent_mode.set_sensitive(sound_effect) + self.angle_30.set_sensitive(sound_effect) + self.angle_60.set_sensitive(sound_effect) + self.angle_90.set_sensitive(sound_effect) + self.angle_120.set_sensitive(sound_effect) + self.angle_150.set_sensitive(sound_effect) + self.angle_180.set_sensitive(sound_effect) + def deactivate(self): self.noise_cancelation.hide() self.concert_hall_mode.hide() @@ -357,6 +388,50 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.jazz_mode.set_sensitive(sound_effect) self.living_mode.set_sensitive(sound_effect) self.silent_mode.set_sensitive(sound_effect) + self.angle_30.set_sensitive(sound_effect) + self.angle_60.set_sensitive(sound_effect) + self.angle_90.set_sensitive(sound_effect) + self.angle_120.set_sensitive(sound_effect) + self.angle_150.set_sensitive(sound_effect) + self.angle_180.set_sensitive(sound_effect) + + def toggle_angle_30(self, widget): + self.toggle_angle(30) + + def toggle_angle_60(self, widget): + self.toggle_angle(60) + + def toggle_angle_90(self, widget): + self.toggle_angle(90) + + def toggle_angle_120(self, widget): + self.toggle_angle(120) + + def toggle_angle_150(self, widget): + self.toggle_angle(150) + + def toggle_angle_180(self, widget): + self.toggle_angle(180) + + def toggle_angle(self, angle): + if self.connected and not self.dirty: + self.parrot.angle = angle + self.dirty = True + self.read_sound_effect_angle() + self.dirty = False + + def read_sound_effect_angle(self): + active_angle = self.parrot.angle + angle_to_menuitem_map = ( + (30, self.angle_30), + (60, self.angle_60), + (90, self.angle_90), + (120, self.angle_120), + (150, self.angle_150), + (180, self.angle_180), + ) + for angle, menu_item in angle_to_menuitem_map: + menu_item.set_active(angle == active_angle) if __name__ == "__main__": -- cgit v1.2.1 From e9c6ffefde5885ed3a5ff0535843b834d77a5a09 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 03:57:11 +0200 Subject: Use info to convey message. --- ParrotZikTray | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index c23944d..c40640b 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -40,7 +40,7 @@ class ParrotZikIndicator(SysIndicator): self.menu = Menu() - self.info_item = MenuItem("Parrot Zik Not connected..", + self.info_item = MenuItem("Parrot Zik Not connected", None, sensitive=False) self.menu.append(self.info_item) @@ -57,13 +57,14 @@ class ParrotZikIndicator(SysIndicator): def reconnect(self): if self.active_interface: if not self.active_interface.connected: - print "Lost connection" + self.info_item.set_label("Lost connection") self.active_interface.deactivate() else: self.reconnect.stop() else: mac = BluetoothPairedDevices.ParrotZikMac() if mac: + self.info_item.set_label("Connecting") parrot = connect(mac) if parrot.api.sock: if parrot.version.startswith('1'): @@ -73,9 +74,10 @@ class ParrotZikIndicator(SysIndicator): self.autorefresh(self) self.autorefresh.start(self, REFRESH_FREQUENCY) self.reconnect.stop() - print "Connected" else: - print "Failed to connect to Parrot Zik %s" % mac + self.info_item.set_label("Failed to connect") + else: + self.info_item.set_label("Parrot Zik Not connected") @repeat def autorefresh(self): @@ -148,7 +150,6 @@ class ParrotZikBaseInterface(object): def refresh(self): if self.connected: - print "Updating battery" battery_level = self.parrot.battery_level battery_state = self.parrot.battery_state -- cgit v1.2.1 From 5c500c5770763f946392bd83b8f66954929f0120 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 04:20:01 +0200 Subject: Fix auto connection. --- ParrotZikTray | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index c40640b..4cc8574 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -145,8 +145,10 @@ class ParrotZikBaseInterface(object): def toggleAuto(self, widget): if self.connected: - self.parrot.auto_connection = self.auto_connection.get_active() - self.auto_connection.set_active(self.parrot.auto_connection) + self.parrot.auto_connect = self.auto_connection.get_active() + self.auto_connection.set_active(self.parrot.auto_connect) + else: + self.deactivate() def refresh(self): if self.connected: -- cgit v1.2.1 From 0be8866c0219b142a42ac552dfec320d1439d1e2 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sat, 13 Jun 2015 04:20:44 +0200 Subject: Deactivate interface on disconnection. --- ParrotZikTray | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 4cc8574..5d9325c 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -210,6 +210,8 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): if self.connected: self.parrot.noise_cancel = self.noise_cancelation.get_active() self.noise_cancelation.set_active(self.parrot.noise_cancel) + else: + self.deactivate() def toggleLouReedMode(self, widget): if self.connected: @@ -218,11 +220,15 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): self.concert_hall_mode.set_active(self.parrot.concert_hall) self.concert_hall_mode.set_sensitive( not self.lou_reed_mode.get_active()) + else: + self.deactivate() def toggleParrotConcertHall(self, widget): if self.connected: self.parrot.concert_hall = self.concert_hall_mode.get_active() self.concert_hall_mode.set_active(self.parrot.concert_hall) + else: + self.deactivate() class ParrotZikVersion2Interface(ParrotZikBaseInterface): @@ -249,7 +255,6 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.noise_cancelation_submenu.append(self.noise_cancelation_mode1) self.noise_cancelation_submenu.append(self.noise_cancelation_mode2) self.noise_cancelation_submenu.append(self.noise_cancelation_mode3) - self.indicator.menu.append(self.noise_cancelation) self.room_sound_effect = MenuItem( "Room Sound Effect", None, sensitive=True, checkitem=False, visible=False) @@ -280,7 +285,6 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.rooms_submenu.append(self.jazz_mode) self.rooms_submenu.append(self.living_mode) self.rooms_submenu.append(self.silent_mode) - self.indicator.menu.append(self.room_sound_effect) self.angle_submenu = Menu() self.angle.set_submenu(self.angle_submenu) @@ -305,11 +309,12 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.flight_mode = MenuItem("Flight Mode", self.toggle_flight_mode, sensitive=True, checkitem=True, visible=False) + self.indicator.menu.append(self.room_sound_effect) + self.indicator.menu.append(self.noise_cancelation) self.indicator.menu.append(self.flight_mode) def activate(self, parrot): self.noise_cancelation.show() - self.concert_hall_mode.show() self.flight_mode.show() self.room_sound_effect.show() super(ParrotZikVersion2Interface, self).activate(parrot) @@ -343,11 +348,15 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): if self.connected: self.parrot.noise_cancel = self.noise_cancelation.get_active() self.noise_cancelation.set_active(self.parrot.noise_cancel) + else: + self.deactivate() def toggle_flight_mode(self, widget): if self.connected: self.parrot.flight_mode = self.flight_mode.get_active() self.flight_mode.set_active(self.parrot.flight_mode) + else: + self.deactivate() def toggledummy(self, widget): print(widget.get_name()) @@ -365,11 +374,14 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.toggle_room(Rooms.SILENT_ROOM) def toggle_room(self, room): - if self.connected and not self.dirty: - self.parrot.room = room - self.dirty = True - self.read_sound_effect_room() - self.dirty = False + if self.connected: + if not self.dirty: + self.parrot.room = room + self.dirty = True + self.read_sound_effect_room() + self.dirty = False + else: + self.deactivate() def read_sound_effect_room(self): active_room = self.parrot.room @@ -397,6 +409,8 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.angle_120.set_sensitive(sound_effect) self.angle_150.set_sensitive(sound_effect) self.angle_180.set_sensitive(sound_effect) + else: + self.deactivate() def toggle_angle_30(self, widget): self.toggle_angle(30) @@ -417,11 +431,14 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.toggle_angle(180) def toggle_angle(self, angle): - if self.connected and not self.dirty: - self.parrot.angle = angle - self.dirty = True - self.read_sound_effect_angle() - self.dirty = False + if self.connected: + if not self.dirty: + self.parrot.angle = angle + self.dirty = True + self.read_sound_effect_angle() + self.dirty = False + else: + self.deactivate() def read_sound_effect_angle(self): active_angle = self.parrot.angle -- cgit v1.2.1 From da45da83c9d487e7b8ff8dca059b43f7769975b6 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 13:09:28 +0200 Subject: Remove default repeating of default argument. --- ParrotZikTray | 58 +++++++++++++++++++++++++--------------------------------- 1 file changed, 25 insertions(+), 33 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 5d9325c..3b61754 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -235,21 +235,20 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): def __init__(self, indicator): self.dirty = False super(ParrotZikVersion2Interface, self).__init__(indicator) - self.noise_cancelation = MenuItem("Noise Cancellation", None, - sensitive=True, visible=False) + self.noise_cancelation = MenuItem("Noise Cancellation", None, visible=False) self.noise_cancelation_submenu = Menu() self.noise_cancelation.set_submenu(self.noise_cancelation_submenu) self.noise_cancelation_enabled = MenuItem("Enabled", self.toggleANC, - sensitive=False, checkitem=True) + checkitem=True) self.noise_cancelation_mode0 = MenuItem("Mode0", self.toggledummy, - sensitive=False, checkitem=True) + checkitem=True) self.noise_cancelation_mode1 = MenuItem("Mode1", self.toggledummy, - sensitive=False, checkitem=True) + checkitem=True) self.noise_cancelation_mode2 = MenuItem("Mode2", self.toggledummy, - sensitive=False, checkitem=True) + checkitem=True) self.noise_cancelation_mode3 = MenuItem("Mode3", self.toggledummy, - sensitive=False, checkitem=True) + checkitem=True) self.noise_cancelation_submenu.append(self.noise_cancelation_enabled) self.noise_cancelation_submenu.append(self.noise_cancelation_mode0) self.noise_cancelation_submenu.append(self.noise_cancelation_mode1) @@ -257,14 +256,14 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.noise_cancelation_submenu.append(self.noise_cancelation_mode3) self.room_sound_effect = MenuItem( - "Room Sound Effect", None, sensitive=True, checkitem=False, visible=False) + "Room Sound Effect", None, visible=False) self.room_sound_effect_submenu = Menu() self.room_sound_effect.set_submenu(self.room_sound_effect_submenu) self.room_sound_effect_enabled = MenuItem( - "Enabled", self.toggle_room_sound_effect, sensitive=True, checkitem=True) - self.rooms = MenuItem("Rooms", None, sensitive=True, checkitem=False) - self.angle = MenuItem("Angle", None, sensitive=True, checkitem=False) + "Enabled", self.toggle_room_sound_effect, checkitem=True) + self.rooms = MenuItem("Rooms", None, checkitem=False) + self.angle = MenuItem("Angle", None, checkitem=False) self.room_sound_effect_submenu.append(self.room_sound_effect_enabled) self.room_sound_effect_submenu.append(self.rooms) self.room_sound_effect_submenu.append(self.angle) @@ -272,15 +271,14 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.rooms_submenu = Menu() self.rooms.set_submenu(self.rooms_submenu) - self.concert_hall_mode = MenuItem("Concert Hall", - self.toggle_concert_hall_mode, - sensitive=True, checkitem=True) - self.jazz_mode = MenuItem("Jazz Club", self.toggle_jazz_club_mode, - sensitive=True, checkitem=True) - self.living_mode = MenuItem("Libing Room", self.toggle_living_room_mode, - sensitive=True, checkitem=True) - self.silent_mode = MenuItem("Silent Room", self.toggle_silent_room_mode, - sensitive=True, checkitem=True) + self.concert_hall_mode = MenuItem( + "Concert Hall", self.toggle_concert_hall_mode, checkitem=True) + self.jazz_mode = MenuItem( + "Jazz Club", self.toggle_jazz_club_mode, checkitem=True) + self.living_mode = MenuItem( + "Libing Room", self.toggle_living_room_mode, checkitem=True) + self.silent_mode = MenuItem( + "Silent Room", self.toggle_silent_room_mode, checkitem=True) self.rooms_submenu.append(self.concert_hall_mode) self.rooms_submenu.append(self.jazz_mode) self.rooms_submenu.append(self.living_mode) @@ -288,18 +286,12 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.angle_submenu = Menu() self.angle.set_submenu(self.angle_submenu) - self.angle_30 = MenuItem("30", self.toggle_angle_30, sensitive=True, - checkitem=True) - self.angle_60 = MenuItem("60", self.toggle_angle_60, sensitive=True, - checkitem=True) - self.angle_90 = MenuItem("90", self.toggle_angle_90, sensitive=True, - checkitem=True) - self.angle_120 = MenuItem("120", self.toggle_angle_120, sensitive=True, - checkitem=True) - self.angle_150 = MenuItem("150", self.toggle_angle_150, sensitive=True, - checkitem=True) - self.angle_180 = MenuItem("180", self.toggle_angle_180, sensitive=True, - checkitem=True) + self.angle_30 = MenuItem("30", self.toggle_angle_30, checkitem=True) + self.angle_60 = MenuItem("60", self.toggle_angle_60, checkitem=True) + self.angle_90 = MenuItem("90", self.toggle_angle_90, checkitem=True) + self.angle_120 = MenuItem("120", self.toggle_angle_120, checkitem=True) + self.angle_150 = MenuItem("150", self.toggle_angle_150, checkitem=True) + self.angle_180 = MenuItem("180", self.toggle_angle_180, checkitem=True) self.angle_submenu.append(self.angle_30) self.angle_submenu.append(self.angle_60) self.angle_submenu.append(self.angle_90) @@ -308,7 +300,7 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.angle_submenu.append(self.angle_180) self.flight_mode = MenuItem("Flight Mode", self.toggle_flight_mode, - sensitive=True, checkitem=True, visible=False) + checkitem=True, visible=False) self.indicator.menu.append(self.room_sound_effect) self.indicator.menu.append(self.noise_cancelation) self.indicator.menu.append(self.flight_mode) -- cgit v1.2.1 From 8c69b3c2caf7703162a50696ac6ab70facca2154 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 13:18:42 +0200 Subject: Fix noise cancelation. --- ParrotZikTray | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 3b61754..61f76ab 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -338,8 +338,8 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): def toggleANC(self, widget): if self.connected: - self.parrot.noise_cancel = self.noise_cancelation.get_active() - self.noise_cancelation.set_active(self.parrot.noise_cancel) + self.parrot.noise_cancel = self.noise_cancelation_enabled.get_active() + self.noise_cancelation_enabled.set_active(self.parrot.noise_cancel) else: self.deactivate() -- cgit v1.2.1 From 42f14d48ddc26f1dc1a88a4f5b9ecb2d79028331 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 13:24:27 +0200 Subject: Make names more pythonic. --- ParrotZikTray | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 61f76ab..7056f92 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -101,7 +101,7 @@ class ParrotZikBaseInterface(object): visible=False) self.firmware_version = MenuItem("Firmware Version:", None, sensitive=False, visible=False) - self.auto_connection = MenuItem("Auto Connection", self.toggleAuto, + self.auto_connection = MenuItem("Auto Connection", self.toggle_auto_connection, checkitem=True, visible=False) self.indicator.menu.append(self.battery_level) self.indicator.menu.append(self.battery_state) @@ -143,7 +143,7 @@ class ParrotZikBaseInterface(object): self.indicator.menu.reposition() self.indicator.active_interface = None - def toggleAuto(self, widget): + def toggle_auto_connection(self, widget): if self.connected: self.parrot.auto_connect = self.auto_connection.get_active() self.auto_connection.set_active(self.parrot.auto_connect) @@ -179,12 +179,13 @@ class ParrotZikBaseInterface(object): class ParrotZikVersion1Interface(ParrotZikBaseInterface): def __init__(self, indicator): super(ParrotZikVersion1Interface, self).__init__(indicator) - self.noise_cancelation = MenuItem("Noise Cancellation", self.toggleANC, - checkitem=True, visible=False) - self.lou_reed_mode = MenuItem("Lou Reed Mode", self.toggleLouReedMode, + self.noise_cancelation = MenuItem( + "Noise Cancellation", self.toggle_noise_cancelation, + checkitem=True, visible=False) + self.lou_reed_mode = MenuItem("Lou Reed Mode", self.toggle_lou_reed_mode, checkitem=True, visible=False) self.concert_hall_mode = MenuItem( - "Concert Hall Mode", self.toggleParrotConcertHall, + "Concert Hall Mode", self.toggle_parrot_concert_hall, checkitem=True, visible=False) self.indicator.menu.append(self.noise_cancelation) self.indicator.menu.append(self.lou_reed_mode) @@ -206,14 +207,14 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): self.concert_hall_mode.hide() super(ParrotZikVersion1Interface, self).deactivate() - def toggleANC(self, widget): + def toggle_noise_cancelation(self, widget): if self.connected: - self.parrot.noise_cancel = self.noise_cancelation.get_active() - self.noise_cancelation.set_active(self.parrot.noise_cancel) + self.parrot.cancel_noise = self.noise_cancelation.get_active() + self.noise_cancelation.set_active(self.parrot.cancel_noise) else: self.deactivate() - def toggleLouReedMode(self, widget): + def toggle_lou_reed_mode(self, widget): if self.connected: self.parrot.lou_reed_mode = self.lou_reed_mode.get_active() self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) @@ -223,7 +224,7 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): else: self.deactivate() - def toggleParrotConcertHall(self, widget): + def toggle_parrot_concert_hall(self, widget): if self.connected: self.parrot.concert_hall = self.concert_hall_mode.get_active() self.concert_hall_mode.set_active(self.parrot.concert_hall) @@ -239,7 +240,7 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.noise_cancelation_submenu = Menu() self.noise_cancelation.set_submenu(self.noise_cancelation_submenu) - self.noise_cancelation_enabled = MenuItem("Enabled", self.toggleANC, + self.noise_cancelation_enabled = MenuItem("Enabled", self.toggle_noise_cancelation, checkitem=True) self.noise_cancelation_mode0 = MenuItem("Mode0", self.toggledummy, checkitem=True) @@ -310,7 +311,7 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.flight_mode.show() self.room_sound_effect.show() super(ParrotZikVersion2Interface, self).activate(parrot) - self.noise_cancelation_enabled.set_active(self.parrot.noise_cancel) + self.noise_cancelation_enabled.set_active(self.parrot.cancel_noise) self.flight_mode.set_active(self.parrot.flight_mode) self.read_sound_effect_room() self.read_sound_effect_angle() @@ -336,10 +337,10 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.room_sound_effect.hide() super(ParrotZikVersion2Interface, self).deactivate() - def toggleANC(self, widget): + def toggle_noise_cancelation(self, widget): if self.connected: - self.parrot.noise_cancel = self.noise_cancelation_enabled.get_active() - self.noise_cancelation_enabled.set_active(self.parrot.noise_cancel) + self.parrot.cancel_noise = self.noise_cancelation_enabled.get_active() + self.noise_cancelation_enabled.set_active(self.parrot.cancel_noise) else: self.deactivate() -- cgit v1.2.1 From 9656058a351237bbfdba4f9f93dae1bbf093d7e4 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 13:26:59 +0200 Subject: Ignore KeyboardInterrupt. --- ParrotZikTray | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 7056f92..faaa4a3 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -448,5 +448,8 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): if __name__ == "__main__": - indicator = ParrotZikIndicator() - indicator.main() + try: + indicator = ParrotZikIndicator() + indicator.main() + except KeyboardInterrupt: + pass -- cgit v1.2.1 From 43b6d6b941e57f9b073cc6c80ac7d840c3aaad21 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 13:44:05 +0200 Subject: Refactor. --- ParrotZikTray | 77 ++++++++++++++++++++++------------------------------------- 1 file changed, 28 insertions(+), 49 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index faaa4a3..6636a9e 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -1,4 +1,6 @@ #!/usr/bin/env python +import functools + import gtk import BluetoothPairedDevices @@ -234,7 +236,8 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): class ParrotZikVersion2Interface(ParrotZikBaseInterface): def __init__(self, indicator): - self.dirty = False + self.room_dirty = False + self.angle_dirty = False super(ParrotZikVersion2Interface, self).__init__(indicator) self.noise_cancelation = MenuItem("Noise Cancellation", None, visible=False) self.noise_cancelation_submenu = Menu() @@ -273,13 +276,13 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.rooms.set_submenu(self.rooms_submenu) self.concert_hall_mode = MenuItem( - "Concert Hall", self.toggle_concert_hall_mode, checkitem=True) + "Concert Hall", functools.partial(self.toggle_room, Rooms.CONCERT_HALL), checkitem=True) self.jazz_mode = MenuItem( - "Jazz Club", self.toggle_jazz_club_mode, checkitem=True) + "Jazz Club", functools.partial(self.toggle_room, Rooms.JAZZ_CLUB), checkitem=True) self.living_mode = MenuItem( - "Libing Room", self.toggle_living_room_mode, checkitem=True) + "Living Room", functools.partial(self.toggle_room, Rooms.LIVING_ROOM), checkitem=True) self.silent_mode = MenuItem( - "Silent Room", self.toggle_silent_room_mode, checkitem=True) + "Silent Room", functools.partial(self.toggle_room, Rooms.SILENT_ROOM), checkitem=True) self.rooms_submenu.append(self.concert_hall_mode) self.rooms_submenu.append(self.jazz_mode) self.rooms_submenu.append(self.living_mode) @@ -287,12 +290,18 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.angle_submenu = Menu() self.angle.set_submenu(self.angle_submenu) - self.angle_30 = MenuItem("30", self.toggle_angle_30, checkitem=True) - self.angle_60 = MenuItem("60", self.toggle_angle_60, checkitem=True) - self.angle_90 = MenuItem("90", self.toggle_angle_90, checkitem=True) - self.angle_120 = MenuItem("120", self.toggle_angle_120, checkitem=True) - self.angle_150 = MenuItem("150", self.toggle_angle_150, checkitem=True) - self.angle_180 = MenuItem("180", self.toggle_angle_180, checkitem=True) + self.angle_30 = MenuItem( + "30", functools.partial(self.toggle_angle, 30), checkitem=True) + self.angle_60 = MenuItem( + "60", functools.partial(self.toggle_angle, 60), checkitem=True) + self.angle_90 = MenuItem( + "90", functools.partial(self.toggle_angle, 90), checkitem=True) + self.angle_120 = MenuItem( + "120", functools.partial(self.toggle_angle, 120), checkitem=True) + self.angle_150 = MenuItem( + "150", functools.partial(self.toggle_angle, 150), checkitem=True) + self.angle_180 = MenuItem( + "180", functools.partial(self.toggle_angle, 180), checkitem=True) self.angle_submenu.append(self.angle_30) self.angle_submenu.append(self.angle_60) self.angle_submenu.append(self.angle_90) @@ -354,25 +363,13 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): def toggledummy(self, widget): print(widget.get_name()) - def toggle_concert_hall_mode(self, widget): - self.toggle_room(Rooms.CONCERT_HALL) - - def toggle_jazz_club_mode(self, widget): - self.toggle_room(Rooms.JAZZ_CLUB) - - def toggle_living_room_mode(self, widget): - self.toggle_room(Rooms.LIVING_ROOM) - - def toggle_silent_room_mode(self, widget): - self.toggle_room(Rooms.SILENT_ROOM) - - def toggle_room(self, room): + def toggle_room(self, room, widget): if self.connected: - if not self.dirty: + if not self.room_dirty: self.parrot.room = room - self.dirty = True + self.room_dirty = True self.read_sound_effect_room() - self.dirty = False + self.room_dirty = False else: self.deactivate() @@ -405,31 +402,13 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): else: self.deactivate() - def toggle_angle_30(self, widget): - self.toggle_angle(30) - - def toggle_angle_60(self, widget): - self.toggle_angle(60) - - def toggle_angle_90(self, widget): - self.toggle_angle(90) - - def toggle_angle_120(self, widget): - self.toggle_angle(120) - - def toggle_angle_150(self, widget): - self.toggle_angle(150) - - def toggle_angle_180(self, widget): - self.toggle_angle(180) - - def toggle_angle(self, angle): + def toggle_angle(self, angle, widget): if self.connected: - if not self.dirty: + if not self.angle_dirty: self.parrot.angle = angle - self.dirty = True + self.angle_dirty = True self.read_sound_effect_angle() - self.dirty = False + self.angle_dirty = False else: self.deactivate() -- cgit v1.2.1 From ac763c2f9e34cdb8e8cc24f96941459f3944011c Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 13:46:02 +0200 Subject: Refactor. --- ParrotZikTray | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 6636a9e..e30631f 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -243,16 +243,16 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.noise_cancelation_submenu = Menu() self.noise_cancelation.set_submenu(self.noise_cancelation_submenu) - self.noise_cancelation_enabled = MenuItem("Enabled", self.toggle_noise_cancelation, - checkitem=True) - self.noise_cancelation_mode0 = MenuItem("Mode0", self.toggledummy, - checkitem=True) - self.noise_cancelation_mode1 = MenuItem("Mode1", self.toggledummy, - checkitem=True) - self.noise_cancelation_mode2 = MenuItem("Mode2", self.toggledummy, - checkitem=True) - self.noise_cancelation_mode3 = MenuItem("Mode3", self.toggledummy, - checkitem=True) + self.noise_cancelation_enabled = MenuItem( + "Enabled", self.toggle_noise_cancelation, checkitem=True) + self.noise_cancelation_mode0 = MenuItem( + "Mode0", self.toggledummy, checkitem=True) + self.noise_cancelation_mode1 = MenuItem( + "Mode1", self.toggledummy, checkitem=True) + self.noise_cancelation_mode2 = MenuItem( + "Mode2", self.toggledummy, checkitem=True) + self.noise_cancelation_mode3 = MenuItem( + "Mode3", self.toggledummy, checkitem=True) self.noise_cancelation_submenu.append(self.noise_cancelation_enabled) self.noise_cancelation_submenu.append(self.noise_cancelation_mode0) self.noise_cancelation_submenu.append(self.noise_cancelation_mode1) -- cgit v1.2.1 From 7e32d6a1829b99eac6e0150dd4a80062801d6ffe Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 15:31:04 +0200 Subject: Add reading noise_control. --- ParrotZikTray | 75 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 24 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index e30631f..07b631a 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -5,6 +5,7 @@ import gtk import BluetoothPairedDevices from ParrotZik import BatteryStates +from ParrotZik import NoiseControlTypes from ParrotZik import connect from ParrotZik import Rooms from SysIndicator import MenuItem @@ -238,26 +239,37 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): def __init__(self, indicator): self.room_dirty = False self.angle_dirty = False + self.noise_cancelation_dirty = False super(ParrotZikVersion2Interface, self).__init__(indicator) - self.noise_cancelation = MenuItem("Noise Cancellation", None, visible=False) + self.noise_cancelation = MenuItem("Noise Control", None, visible=False) self.noise_cancelation_submenu = Menu() self.noise_cancelation.set_submenu(self.noise_cancelation_submenu) - self.noise_cancelation_enabled = MenuItem( - "Enabled", self.toggle_noise_cancelation, checkitem=True) - self.noise_cancelation_mode0 = MenuItem( - "Mode0", self.toggledummy, checkitem=True) - self.noise_cancelation_mode1 = MenuItem( - "Mode1", self.toggledummy, checkitem=True) - self.noise_cancelation_mode2 = MenuItem( - "Mode2", self.toggledummy, checkitem=True) - self.noise_cancelation_mode3 = MenuItem( - "Mode3", self.toggledummy, checkitem=True) - self.noise_cancelation_submenu.append(self.noise_cancelation_enabled) - self.noise_cancelation_submenu.append(self.noise_cancelation_mode0) - self.noise_cancelation_submenu.append(self.noise_cancelation_mode1) - self.noise_cancelation_submenu.append(self.noise_cancelation_mode2) - self.noise_cancelation_submenu.append(self.noise_cancelation_mode3) + self.noise_control_cancelation_max = MenuItem( + "Max Calcelation", functools.partial( + self.toggle_noise_cancelation, + NoiseControlTypes.NOISE_CONTROL_MAX), checkitem=True) + self.noise_control_cancelation_on = MenuItem( + "Normal Cancelation", functools.partial( + self.toggle_noise_cancelation, + NoiseControlTypes.NOISE_CONTROL_ON), checkitem=True) + self.noise_control_off = MenuItem( + "Off", functools.partial( + self.toggle_noise_cancelation, + NoiseControlTypes.NOISE_CONTROL_OFF), checkitem=True) + self.noise_control_street_mode = MenuItem( + "Street Mode", functools.partial( + self.toggle_noise_cancelation, + NoiseControlTypes.STREET_MODE), checkitem=True) + self.noise_control_street_mode_max = MenuItem( + "Street Mode Max", functools.partial( + self.toggle_noise_cancelation, + NoiseControlTypes.STREET_MODE_MAX), checkitem=True) + self.noise_cancelation_submenu.append(self.noise_control_cancelation_max) + self.noise_cancelation_submenu.append(self.noise_control_cancelation_on) + self.noise_cancelation_submenu.append(self.noise_control_off) + self.noise_cancelation_submenu.append(self.noise_control_street_mode) + self.noise_cancelation_submenu.append(self.noise_control_street_mode_max) self.room_sound_effect = MenuItem( "Room Sound Effect", None, visible=False) @@ -320,7 +332,7 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.flight_mode.show() self.room_sound_effect.show() super(ParrotZikVersion2Interface, self).activate(parrot) - self.noise_cancelation_enabled.set_active(self.parrot.cancel_noise) + self.read_noise_cancelation() self.flight_mode.set_active(self.parrot.flight_mode) self.read_sound_effect_room() self.read_sound_effect_angle() @@ -346,13 +358,6 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.room_sound_effect.hide() super(ParrotZikVersion2Interface, self).deactivate() - def toggle_noise_cancelation(self, widget): - if self.connected: - self.parrot.cancel_noise = self.noise_cancelation_enabled.get_active() - self.noise_cancelation_enabled.set_active(self.parrot.cancel_noise) - else: - self.deactivate() - def toggle_flight_mode(self, widget): if self.connected: self.parrot.flight_mode = self.flight_mode.get_active() @@ -425,6 +430,28 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): for angle, menu_item in angle_to_menuitem_map: menu_item.set_active(angle == active_angle) + def toggle_noise_cancelation(self, noise_calcelation, widget): + if self.connected: + if not self.noise_cancelation_dirty: + self.parrot.noise_control = noise_calcelation + self.noise_cancelation_dirty = True + self.read_noise_cancelation() + self.noise_cancelation_dirty = False + else: + self.deactivate() + + def read_noise_cancelation(self): + active_noise_control = self.parrot.noise_control + noise_control_to_menuitem_map = ( + (NoiseControlTypes.NOISE_CONTROL_MAX, self.noise_control_cancelation_max), + (NoiseControlTypes.NOISE_CONTROL_ON, self.noise_control_cancelation_on), + (NoiseControlTypes.NOISE_CONTROL_OFF, self.noise_control_off), + (NoiseControlTypes.STREET_MODE, self.noise_control_street_mode), + (NoiseControlTypes.STREET_MODE_MAX, self.noise_control_street_mode_max), + ) + for noise_control, menu_item in noise_control_to_menuitem_map: + menu_item.set_active(active_noise_control == noise_control) + if __name__ == "__main__": try: -- cgit v1.2.1 From 1bf1b662ee8ed729a67c9bf07d1b184691a86785 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 17:58:21 +0200 Subject: Read battery on connection. --- ParrotZikTray | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 07b631a..44a02d1 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -125,6 +125,7 @@ class ParrotZikBaseInterface(object): self.firmware_version.show() self.auto_connection.show() + self.read_battery() self.indicator.info_item.set_label("Connected to: " + self.parrot.friendly_name) self.firmware_version.set_label( @@ -154,6 +155,9 @@ class ParrotZikBaseInterface(object): self.deactivate() def refresh(self): + self.read_battery() + + def read_battery(self): if self.connected: battery_level = self.parrot.battery_level battery_state = self.parrot.battery_state -- cgit v1.2.1 From e3d2cb770e6e03513b6bf6ece70202c065279950 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 18:00:35 +0200 Subject: Show interface after data fetch. --- ParrotZikTray | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 44a02d1..52b8d12 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -120,19 +120,17 @@ class ParrotZikBaseInterface(object): def activate(self, parrot): self.parrot = parrot - self.battery_level.show() - self.battery_state.show() - self.firmware_version.show() - self.auto_connection.show() - self.read_battery() self.indicator.info_item.set_label("Connected to: " + self.parrot.friendly_name) self.firmware_version.set_label( "Firmware version: " + self.parrot.version) - self.auto_connection.set_active(self.parrot.auto_connect) + self.battery_level.show() + self.battery_state.show() + self.firmware_version.show() + self.auto_connection.show() self.indicator.active_interface = self self.indicator.menu.reposition() -- cgit v1.2.1 From 15948fd1d48c64fd7cc885ca0400bcd66daf3f13 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 22:01:33 +0200 Subject: Fix noise cancel in api version 1. --- ParrotZikTray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 52b8d12..373e9ee 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -202,7 +202,7 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): self.concert_hall_mode.show() super(ParrotZikVersion1Interface, self).activate(parrot) - self.noise_cancelation.set_active(self.parrot.noise_cancel) + self.noise_cancelation.set_active(self.parrot.cancel_noise) self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) self.concert_hall_mode.set_active(self.parrot.concert_hall) -- cgit v1.2.1 From 4c8ce6673e2efe96a36a2af2b774b3e43cc4a89c Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Sun, 14 Jun 2015 22:27:44 +0200 Subject: Add resouce manager layer. --- ParrotZikTray | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 373e9ee..6850a3f 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -5,6 +5,8 @@ import gtk import BluetoothPairedDevices from ParrotZik import BatteryStates +from ParrotZik import ParrotZikVersion1 +from ParrotZik import ParrotZikVersion2 from ParrotZik import NoiseControlTypes from ParrotZik import connect from ParrotZik import Rooms @@ -68,12 +70,12 @@ class ParrotZikIndicator(SysIndicator): mac = BluetoothPairedDevices.ParrotZikMac() if mac: self.info_item.set_label("Connecting") - parrot = connect(mac) - if parrot.api.sock: - if parrot.version.startswith('1'): - self.version_1_interface.activate(parrot) + resource_manager = connect(mac) + if resource_manager.sock: + if resource_manager.api_version.startswith('1'): + self.version_1_interface.activate(resource_manager) else: - self.version_2_interface.activate(parrot) + self.version_2_interface.activate(resource_manager) self.autorefresh(self) self.autorefresh.start(self, REFRESH_FREQUENCY) self.reconnect.stop() @@ -114,12 +116,12 @@ class ParrotZikBaseInterface(object): @property def connected(self): if self.parrot: - return self.parrot.api.sock + return self.parrot.resource_manager.sock else: return False - def activate(self, parrot): - self.parrot = parrot + def activate(self, resource_manager): + self.parrot = self.parrot_class(resource_manager) self.read_battery() self.indicator.info_item.set_label("Connected to: " + self.parrot.friendly_name) @@ -134,6 +136,10 @@ class ParrotZikBaseInterface(object): self.indicator.active_interface = self self.indicator.menu.reposition() + @property + def parrot_class(self): + raise NotImplementedError + def deactivate(self): self.parrot = None self.battery_level.hide() @@ -157,9 +163,9 @@ class ParrotZikBaseInterface(object): def read_battery(self): if self.connected: + self.parrot.refresh_battery() battery_level = self.parrot.battery_level battery_state = self.parrot.battery_state - if battery_state == BatteryStates.CHARGING: self.indicator.setIcon("zik-battery-charging") elif battery_level > 80: @@ -182,6 +188,8 @@ class ParrotZikBaseInterface(object): class ParrotZikVersion1Interface(ParrotZikBaseInterface): + parrot_class = ParrotZikVersion1 + def __init__(self, indicator): super(ParrotZikVersion1Interface, self).__init__(indicator) self.noise_cancelation = MenuItem( @@ -196,11 +204,11 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): self.indicator.menu.append(self.lou_reed_mode) self.indicator.menu.append(self.concert_hall_mode) - def activate(self, parrot): + def activate(self, resource_manager): self.noise_cancelation.show() self.lou_reed_mode.show() self.concert_hall_mode.show() - super(ParrotZikVersion1Interface, self).activate(parrot) + super(ParrotZikVersion1Interface, self).activate(resource_manager) self.noise_cancelation.set_active(self.parrot.cancel_noise) self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) @@ -238,6 +246,8 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): class ParrotZikVersion2Interface(ParrotZikBaseInterface): + parrot_class = ParrotZikVersion2 + def __init__(self, indicator): self.room_dirty = False self.angle_dirty = False @@ -329,11 +339,11 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.indicator.menu.append(self.noise_cancelation) self.indicator.menu.append(self.flight_mode) - def activate(self, parrot): + def activate(self, resource_manager): self.noise_cancelation.show() self.flight_mode.show() self.room_sound_effect.show() - super(ParrotZikVersion2Interface, self).activate(parrot) + super(ParrotZikVersion2Interface, self).activate(resource_manager) self.read_noise_cancelation() self.flight_mode.set_active(self.parrot.flight_mode) self.read_sound_effect_room() -- cgit v1.2.1 From ffa76dd958282735c1b39793351a075a3d1a64ac Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 01:10:40 +0200 Subject: Refactor. --- ParrotZikTray | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 6850a3f..e43ac90 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -3,12 +3,12 @@ import functools import gtk -import BluetoothPairedDevices +import bluetooth_paired_devices from ParrotZik import BatteryStates from ParrotZik import ParrotZikVersion1 from ParrotZik import ParrotZikVersion2 from ParrotZik import NoiseControlTypes -from ParrotZik import connect +from bluetooth_paired_devices import connect from ParrotZik import Rooms from SysIndicator import MenuItem from SysIndicator import Menu @@ -67,7 +67,7 @@ class ParrotZikIndicator(SysIndicator): else: self.reconnect.stop() else: - mac = BluetoothPairedDevices.ParrotZikMac() + mac = bluetooth_paired_devices.get_parrot_zik_mac() if mac: self.info_item.set_label("Connecting") resource_manager = connect(mac) -- cgit v1.2.1 From 8dd3e12ec52cf993856bc0ea3601cc1c07acce1b Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 01:52:50 +0200 Subject: Handle connection errors through Exceptions. --- ParrotZikTray | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index e43ac90..55713b3 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -67,22 +67,27 @@ class ParrotZikIndicator(SysIndicator): else: self.reconnect.stop() else: - mac = bluetooth_paired_devices.get_parrot_zik_mac() - if mac: - self.info_item.set_label("Connecting") - resource_manager = connect(mac) - if resource_manager.sock: - if resource_manager.api_version.startswith('1'): - self.version_1_interface.activate(resource_manager) - else: - self.version_2_interface.activate(resource_manager) - self.autorefresh(self) - self.autorefresh.start(self, REFRESH_FREQUENCY) - self.reconnect.stop() - else: - self.info_item.set_label("Failed to connect") + self.info("Trying to connect") + try: + resource_manager = connect() + except bluetooth_paired_devices.BluetoothIsNotOn: + self.info("Bluetooth is turned off") + except bluetooth_paired_devices.DeviceNotConnected: + self.info("Parrot Zik Not connected") + except bluetooth_paired_devices.ConnectionFailure: + self.info("Failed to connect") else: - self.info_item.set_label("Parrot Zik Not connected") + if resource_manager.api_version.startswith('1'): + self.version_1_interface.activate(resource_manager) + else: + self.version_2_interface.activate(resource_manager) + self.autorefresh(self) + self.autorefresh.start(self, REFRESH_FREQUENCY) + self.reconnect.stop() + + def info(self, message): + self.info_item.set_label(message) + print(message) @repeat def autorefresh(self): @@ -123,8 +128,7 @@ class ParrotZikBaseInterface(object): def activate(self, resource_manager): self.parrot = self.parrot_class(resource_manager) self.read_battery() - self.indicator.info_item.set_label("Connected to: " - + self.parrot.friendly_name) + self.indicator.info("Connected to: " + self.parrot.friendly_name) self.firmware_version.set_label( "Firmware version: " + self.parrot.version) self.auto_connection.set_active(self.parrot.auto_connect) -- cgit v1.2.1 From fde8202e397eff82993c738010e1519a00e7430d Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 02:59:24 +0200 Subject: Handle disconnection through exceptions. --- ParrotZikTray | 117 +++++++++++++++++++++++++++------------------------------- 1 file changed, 54 insertions(+), 63 deletions(-) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 55713b3..4c86adf 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -13,6 +13,7 @@ from ParrotZik import Rooms from SysIndicator import MenuItem from SysIndicator import Menu from SysIndicator import SysIndicator +import resource_manager REFRESH_FREQUENCY = 30000 RECONNECT_FREQUENCY = 5000 @@ -61,15 +62,11 @@ class ParrotZikIndicator(SysIndicator): @repeat def reconnect(self): if self.active_interface: - if not self.active_interface.connected: - self.info_item.set_label("Lost connection") - self.active_interface.deactivate() - else: - self.reconnect.stop() + self.reconnect.stop() else: self.info("Trying to connect") try: - resource_manager = connect() + manager = connect() except bluetooth_paired_devices.BluetoothIsNotOn: self.info("Bluetooth is turned off") except bluetooth_paired_devices.DeviceNotConnected: @@ -77,13 +74,18 @@ class ParrotZikIndicator(SysIndicator): except bluetooth_paired_devices.ConnectionFailure: self.info("Failed to connect") else: - if resource_manager.api_version.startswith('1'): - self.version_1_interface.activate(resource_manager) + if manager.api_version.startswith('1'): + interface = self.version_1_interface + else: + interface = self.version_2_interface + try: + interface.activate(manager) + except resource_manager.DeviceDisconnected: + interface.deactivate() else: - self.version_2_interface.activate(resource_manager) - self.autorefresh(self) - self.autorefresh.start(self, REFRESH_FREQUENCY) - self.reconnect.stop() + self.autorefresh(self) + self.autorefresh.start(self, REFRESH_FREQUENCY) + self.reconnect.stop() def info(self, message): self.info_item.set_label(message) @@ -118,21 +120,13 @@ class ParrotZikBaseInterface(object): self.indicator.menu.append(self.firmware_version) self.indicator.menu.append(self.auto_connection) - @property - def connected(self): - if self.parrot: - return self.parrot.resource_manager.sock - else: - return False - - def activate(self, resource_manager): - self.parrot = self.parrot_class(resource_manager) + def activate(self, manager): + self.parrot = self.parrot_class(manager) self.read_battery() self.indicator.info("Connected to: " + self.parrot.friendly_name) self.firmware_version.set_label( "Firmware version: " + self.parrot.version) self.auto_connection.set_active(self.parrot.auto_connect) - self.battery_level.show() self.battery_state.show() self.firmware_version.show() @@ -150,26 +144,29 @@ class ParrotZikBaseInterface(object): self.battery_state.hide() self.firmware_version.hide() self.auto_connection.hide() - self.indicator.setIcon("zik-audio-headset") - self.indicator.info_item.set_label("Parrot Zik Not connected..") self.indicator.menu.reposition() self.indicator.active_interface = None + self.indicator.setIcon("zik-audio-headset") + self.indicator.info('Lost Connection') def toggle_auto_connection(self, widget): - if self.connected: + try: self.parrot.auto_connect = self.auto_connection.get_active() self.auto_connection.set_active(self.parrot.auto_connect) - else: + except resource_manager.DeviceDisconnected: self.deactivate() def refresh(self): self.read_battery() def read_battery(self): - if self.connected: + try: self.parrot.refresh_battery() battery_level = self.parrot.battery_level battery_state = self.parrot.battery_state + except resource_manager.DeviceDisconnected: + self.deactivate() + else: if battery_state == BatteryStates.CHARGING: self.indicator.setIcon("zik-battery-charging") elif battery_level > 80: @@ -187,8 +184,6 @@ class ParrotZikBaseInterface(object): "State: " + BatteryStates.representation[battery_state]) self.battery_level.set_label( "Battery Level: " + str(battery_level)) - else: - self.deactivate() class ParrotZikVersion1Interface(ParrotZikBaseInterface): @@ -208,12 +203,11 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): self.indicator.menu.append(self.lou_reed_mode) self.indicator.menu.append(self.concert_hall_mode) - def activate(self, resource_manager): + def activate(self, manager): self.noise_cancelation.show() self.lou_reed_mode.show() self.concert_hall_mode.show() - super(ParrotZikVersion1Interface, self).activate(resource_manager) - + super(ParrotZikVersion1Interface, self).activate(manager) self.noise_cancelation.set_active(self.parrot.cancel_noise) self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) self.concert_hall_mode.set_active(self.parrot.concert_hall) @@ -225,27 +219,27 @@ class ParrotZikVersion1Interface(ParrotZikBaseInterface): super(ParrotZikVersion1Interface, self).deactivate() def toggle_noise_cancelation(self, widget): - if self.connected: + try: self.parrot.cancel_noise = self.noise_cancelation.get_active() self.noise_cancelation.set_active(self.parrot.cancel_noise) - else: + except resource_manager.DeviceDisconnected: self.deactivate() def toggle_lou_reed_mode(self, widget): - if self.connected: + try: self.parrot.lou_reed_mode = self.lou_reed_mode.get_active() self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) self.concert_hall_mode.set_active(self.parrot.concert_hall) self.concert_hall_mode.set_sensitive( not self.lou_reed_mode.get_active()) - else: + except resource_manager.DeviceDisconnected: self.deactivate() def toggle_parrot_concert_hall(self, widget): - if self.connected: + try: self.parrot.concert_hall = self.concert_hall_mode.get_active() self.concert_hall_mode.set_active(self.parrot.concert_hall) - else: + except resource_manager.DeviceDisconnected: self.deactivate() @@ -343,17 +337,17 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.indicator.menu.append(self.noise_cancelation) self.indicator.menu.append(self.flight_mode) - def activate(self, resource_manager): + def activate(self, manager): self.noise_cancelation.show() self.flight_mode.show() self.room_sound_effect.show() - super(ParrotZikVersion2Interface, self).activate(resource_manager) - self.read_noise_cancelation() + super(ParrotZikVersion2Interface, self).activate(manager) + self._read_noise_cancelation() self.flight_mode.set_active(self.parrot.flight_mode) - self.read_sound_effect_room() - self.read_sound_effect_angle() - + self._read_sound_effect_room() + self._read_sound_effect_angle() sound_effect = self.parrot.sound_effect + self.room_sound_effect_enabled.set_active(sound_effect) self.concert_hall_mode.set_sensitive(sound_effect) self.jazz_mode.set_sensitive(sound_effect) @@ -375,26 +369,23 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): super(ParrotZikVersion2Interface, self).deactivate() def toggle_flight_mode(self, widget): - if self.connected: + try: self.parrot.flight_mode = self.flight_mode.get_active() self.flight_mode.set_active(self.parrot.flight_mode) - else: + except resource_manager.DeviceDisconnected: self.deactivate() - def toggledummy(self, widget): - print(widget.get_name()) - def toggle_room(self, room, widget): - if self.connected: + try: if not self.room_dirty: self.parrot.room = room self.room_dirty = True - self.read_sound_effect_room() + self._read_sound_effect_room() self.room_dirty = False - else: + except resource_manager.DeviceDisconnected: self.deactivate() - def read_sound_effect_room(self): + def _read_sound_effect_room(self): active_room = self.parrot.room room_to_menuitem_map = ( (Rooms.CONCERT_HALL, self.concert_hall_mode), @@ -406,7 +397,7 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): menu_item.set_active(room == active_room) def toggle_room_sound_effect(self, widget): - if self.connected: + try: self.parrot.sound_effect = self.room_sound_effect_enabled.get_active() sound_effect = self.parrot.sound_effect self.room_sound_effect_enabled.set_active(sound_effect) @@ -420,20 +411,20 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): self.angle_120.set_sensitive(sound_effect) self.angle_150.set_sensitive(sound_effect) self.angle_180.set_sensitive(sound_effect) - else: + except resource_manager.DeviceDisconnected: self.deactivate() def toggle_angle(self, angle, widget): - if self.connected: + try: if not self.angle_dirty: self.parrot.angle = angle self.angle_dirty = True - self.read_sound_effect_angle() + self._read_sound_effect_angle() self.angle_dirty = False - else: + except resource_manager.DeviceDisconnected: self.deactivate() - def read_sound_effect_angle(self): + def _read_sound_effect_angle(self): active_angle = self.parrot.angle angle_to_menuitem_map = ( (30, self.angle_30), @@ -447,16 +438,16 @@ class ParrotZikVersion2Interface(ParrotZikBaseInterface): menu_item.set_active(angle == active_angle) def toggle_noise_cancelation(self, noise_calcelation, widget): - if self.connected: + try: if not self.noise_cancelation_dirty: self.parrot.noise_control = noise_calcelation self.noise_cancelation_dirty = True - self.read_noise_cancelation() + self._read_noise_cancelation() self.noise_cancelation_dirty = False - else: + except resource_manager.DeviceDisconnected: self.deactivate() - def read_noise_cancelation(self): + def _read_noise_cancelation(self): active_noise_control = self.parrot.noise_control noise_control_to_menuitem_map = ( (NoiseControlTypes.NOISE_CONTROL_MAX, self.noise_control_cancelation_max), -- cgit v1.2.1 From 3c471f39667477fcdd83efb44dad4fc3968ca535 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 03:06:49 +0200 Subject: Deactivation of interface starts reconnection. --- ParrotZikTray | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray index 4c86adf..d5b113c 100755 --- a/ParrotZikTray +++ b/ParrotZikTray @@ -1,5 +1,6 @@ #!/usr/bin/env python import functools +from threading import Lock import gtk @@ -23,22 +24,27 @@ class repeat(object): def __init__(self, f): self.f = f self.id = None + self.lock = Lock() def __call__(self, cls): self.f(cls) def start(self, cls, frequency): + self.lock.acquire() if not self.id: def run(): self.f(cls) return True self.id = gtk.timeout_add(frequency, run) + self.lock.release() def stop(self): + self.lock.acquire() if self.id: gtk.timeout_remove(self.id) self.id = None + self.lock.release() class ParrotZikIndicator(SysIndicator): @@ -148,6 +154,7 @@ class ParrotZikBaseInterface(object): self.indicator.active_interface = None self.indicator.setIcon("zik-audio-headset") self.indicator.info('Lost Connection') + self.indicator.reconnect.start(self.indicator, RECONNECT_FREQUENCY) def toggle_auto_connection(self, widget): try: -- cgit v1.2.1 From ac531e0ca0b17902821966530629e434d0cdf9f7 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 03:09:17 +0200 Subject: Make names more pythonic --- ParrotZikTray | 475 ---------------------------------------------------------- 1 file changed, 475 deletions(-) delete mode 100755 ParrotZikTray (limited to 'ParrotZikTray') diff --git a/ParrotZikTray b/ParrotZikTray deleted file mode 100755 index d5b113c..0000000 --- a/ParrotZikTray +++ /dev/null @@ -1,475 +0,0 @@ -#!/usr/bin/env python -import functools -from threading import Lock - -import gtk - -import bluetooth_paired_devices -from ParrotZik import BatteryStates -from ParrotZik import ParrotZikVersion1 -from ParrotZik import ParrotZikVersion2 -from ParrotZik import NoiseControlTypes -from bluetooth_paired_devices import connect -from ParrotZik import Rooms -from SysIndicator import MenuItem -from SysIndicator import Menu -from SysIndicator import SysIndicator -import resource_manager - -REFRESH_FREQUENCY = 30000 -RECONNECT_FREQUENCY = 5000 - - -class repeat(object): - def __init__(self, f): - self.f = f - self.id = None - self.lock = Lock() - - def __call__(self, cls): - self.f(cls) - - def start(self, cls, frequency): - self.lock.acquire() - if not self.id: - def run(): - self.f(cls) - return True - - self.id = gtk.timeout_add(frequency, run) - self.lock.release() - - def stop(self): - self.lock.acquire() - if self.id: - gtk.timeout_remove(self.id) - self.id = None - self.lock.release() - - -class ParrotZikIndicator(SysIndicator): - def __init__(self): - - self.menu = Menu() - - self.info_item = MenuItem("Parrot Zik Not connected", - None, sensitive=False) - self.menu.append(self.info_item) - - self.version_1_interface = ParrotZikVersion1Interface(self) - self.version_2_interface = ParrotZikVersion2Interface(self) - self.quit = MenuItem("Quit", gtk.main_quit, checkitem=True) - self.menu.append(self.quit) - - SysIndicator.__init__(self, icon="zik-audio-headset", menu=self.menu) - - self.active_interface = None - - @repeat - def reconnect(self): - if self.active_interface: - self.reconnect.stop() - else: - self.info("Trying to connect") - try: - manager = connect() - except bluetooth_paired_devices.BluetoothIsNotOn: - self.info("Bluetooth is turned off") - except bluetooth_paired_devices.DeviceNotConnected: - self.info("Parrot Zik Not connected") - except bluetooth_paired_devices.ConnectionFailure: - self.info("Failed to connect") - else: - if manager.api_version.startswith('1'): - interface = self.version_1_interface - else: - interface = self.version_2_interface - try: - interface.activate(manager) - except resource_manager.DeviceDisconnected: - interface.deactivate() - else: - self.autorefresh(self) - self.autorefresh.start(self, REFRESH_FREQUENCY) - self.reconnect.stop() - - def info(self, message): - self.info_item.set_label(message) - print(message) - - @repeat - def autorefresh(self): - if self.active_interface: - self.active_interface.refresh() - else: - self.reconnect.start(self, RECONNECT_FREQUENCY) - self.autorefresh.stop() - - def main(self): - self.reconnect.start(self, RECONNECT_FREQUENCY) - SysIndicator.main(self) - -class ParrotZikBaseInterface(object): - def __init__(self, indicator): - self.indicator = indicator - self.parrot = None - self.battery_level = MenuItem("Battery Level:", None, sensitive=False, - visible=False) - self.battery_state = MenuItem("Battery State:", None, sensitive=False, - visible=False) - self.firmware_version = MenuItem("Firmware Version:", None, - sensitive=False, visible=False) - self.auto_connection = MenuItem("Auto Connection", self.toggle_auto_connection, - checkitem=True, visible=False) - self.indicator.menu.append(self.battery_level) - self.indicator.menu.append(self.battery_state) - self.indicator.menu.append(self.firmware_version) - self.indicator.menu.append(self.auto_connection) - - def activate(self, manager): - self.parrot = self.parrot_class(manager) - self.read_battery() - self.indicator.info("Connected to: " + self.parrot.friendly_name) - self.firmware_version.set_label( - "Firmware version: " + self.parrot.version) - self.auto_connection.set_active(self.parrot.auto_connect) - self.battery_level.show() - self.battery_state.show() - self.firmware_version.show() - self.auto_connection.show() - self.indicator.active_interface = self - self.indicator.menu.reposition() - - @property - def parrot_class(self): - raise NotImplementedError - - def deactivate(self): - self.parrot = None - self.battery_level.hide() - self.battery_state.hide() - self.firmware_version.hide() - self.auto_connection.hide() - self.indicator.menu.reposition() - self.indicator.active_interface = None - self.indicator.setIcon("zik-audio-headset") - self.indicator.info('Lost Connection') - self.indicator.reconnect.start(self.indicator, RECONNECT_FREQUENCY) - - def toggle_auto_connection(self, widget): - try: - self.parrot.auto_connect = self.auto_connection.get_active() - self.auto_connection.set_active(self.parrot.auto_connect) - except resource_manager.DeviceDisconnected: - self.deactivate() - - def refresh(self): - self.read_battery() - - def read_battery(self): - try: - self.parrot.refresh_battery() - battery_level = self.parrot.battery_level - battery_state = self.parrot.battery_state - except resource_manager.DeviceDisconnected: - self.deactivate() - else: - if battery_state == BatteryStates.CHARGING: - self.indicator.setIcon("zik-battery-charging") - elif battery_level > 80: - self.indicator.setIcon("zik-battery-100") - elif battery_level > 60: - self.indicator.setIcon("zik-battery-080") - elif battery_level > 40: - self.indicator.setIcon("zik-battery-060") - elif battery_level > 20: - self.indicator.setIcon("zik-battery-040") - else: - self.indicator.setIcon("zik-battery-low") - - self.battery_state.set_label( - "State: " + BatteryStates.representation[battery_state]) - self.battery_level.set_label( - "Battery Level: " + str(battery_level)) - - -class ParrotZikVersion1Interface(ParrotZikBaseInterface): - parrot_class = ParrotZikVersion1 - - def __init__(self, indicator): - super(ParrotZikVersion1Interface, self).__init__(indicator) - self.noise_cancelation = MenuItem( - "Noise Cancellation", self.toggle_noise_cancelation, - checkitem=True, visible=False) - self.lou_reed_mode = MenuItem("Lou Reed Mode", self.toggle_lou_reed_mode, - checkitem=True, visible=False) - self.concert_hall_mode = MenuItem( - "Concert Hall Mode", self.toggle_parrot_concert_hall, - checkitem=True, visible=False) - self.indicator.menu.append(self.noise_cancelation) - self.indicator.menu.append(self.lou_reed_mode) - self.indicator.menu.append(self.concert_hall_mode) - - def activate(self, manager): - self.noise_cancelation.show() - self.lou_reed_mode.show() - self.concert_hall_mode.show() - super(ParrotZikVersion1Interface, self).activate(manager) - self.noise_cancelation.set_active(self.parrot.cancel_noise) - self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) - self.concert_hall_mode.set_active(self.parrot.concert_hall) - - def deactivate(self): - self.noise_cancelation.hide() - self.lou_reed_mode.hide() - self.concert_hall_mode.hide() - super(ParrotZikVersion1Interface, self).deactivate() - - def toggle_noise_cancelation(self, widget): - try: - self.parrot.cancel_noise = self.noise_cancelation.get_active() - self.noise_cancelation.set_active(self.parrot.cancel_noise) - except resource_manager.DeviceDisconnected: - self.deactivate() - - def toggle_lou_reed_mode(self, widget): - try: - self.parrot.lou_reed_mode = self.lou_reed_mode.get_active() - self.lou_reed_mode.set_active(self.parrot.lou_reed_mode) - self.concert_hall_mode.set_active(self.parrot.concert_hall) - self.concert_hall_mode.set_sensitive( - not self.lou_reed_mode.get_active()) - except resource_manager.DeviceDisconnected: - self.deactivate() - - def toggle_parrot_concert_hall(self, widget): - try: - self.parrot.concert_hall = self.concert_hall_mode.get_active() - self.concert_hall_mode.set_active(self.parrot.concert_hall) - except resource_manager.DeviceDisconnected: - self.deactivate() - - -class ParrotZikVersion2Interface(ParrotZikBaseInterface): - parrot_class = ParrotZikVersion2 - - def __init__(self, indicator): - self.room_dirty = False - self.angle_dirty = False - self.noise_cancelation_dirty = False - super(ParrotZikVersion2Interface, self).__init__(indicator) - self.noise_cancelation = MenuItem("Noise Control", None, visible=False) - self.noise_cancelation_submenu = Menu() - self.noise_cancelation.set_submenu(self.noise_cancelation_submenu) - - self.noise_control_cancelation_max = MenuItem( - "Max Calcelation", functools.partial( - self.toggle_noise_cancelation, - NoiseControlTypes.NOISE_CONTROL_MAX), checkitem=True) - self.noise_control_cancelation_on = MenuItem( - "Normal Cancelation", functools.partial( - self.toggle_noise_cancelation, - NoiseControlTypes.NOISE_CONTROL_ON), checkitem=True) - self.noise_control_off = MenuItem( - "Off", functools.partial( - self.toggle_noise_cancelation, - NoiseControlTypes.NOISE_CONTROL_OFF), checkitem=True) - self.noise_control_street_mode = MenuItem( - "Street Mode", functools.partial( - self.toggle_noise_cancelation, - NoiseControlTypes.STREET_MODE), checkitem=True) - self.noise_control_street_mode_max = MenuItem( - "Street Mode Max", functools.partial( - self.toggle_noise_cancelation, - NoiseControlTypes.STREET_MODE_MAX), checkitem=True) - self.noise_cancelation_submenu.append(self.noise_control_cancelation_max) - self.noise_cancelation_submenu.append(self.noise_control_cancelation_on) - self.noise_cancelation_submenu.append(self.noise_control_off) - self.noise_cancelation_submenu.append(self.noise_control_street_mode) - self.noise_cancelation_submenu.append(self.noise_control_street_mode_max) - - self.room_sound_effect = MenuItem( - "Room Sound Effect", None, visible=False) - self.room_sound_effect_submenu = Menu() - self.room_sound_effect.set_submenu(self.room_sound_effect_submenu) - - self.room_sound_effect_enabled = MenuItem( - "Enabled", self.toggle_room_sound_effect, checkitem=True) - self.rooms = MenuItem("Rooms", None, checkitem=False) - self.angle = MenuItem("Angle", None, checkitem=False) - self.room_sound_effect_submenu.append(self.room_sound_effect_enabled) - self.room_sound_effect_submenu.append(self.rooms) - self.room_sound_effect_submenu.append(self.angle) - - self.rooms_submenu = Menu() - self.rooms.set_submenu(self.rooms_submenu) - - self.concert_hall_mode = MenuItem( - "Concert Hall", functools.partial(self.toggle_room, Rooms.CONCERT_HALL), checkitem=True) - self.jazz_mode = MenuItem( - "Jazz Club", functools.partial(self.toggle_room, Rooms.JAZZ_CLUB), checkitem=True) - self.living_mode = MenuItem( - "Living Room", functools.partial(self.toggle_room, Rooms.LIVING_ROOM), checkitem=True) - self.silent_mode = MenuItem( - "Silent Room", functools.partial(self.toggle_room, Rooms.SILENT_ROOM), checkitem=True) - self.rooms_submenu.append(self.concert_hall_mode) - self.rooms_submenu.append(self.jazz_mode) - self.rooms_submenu.append(self.living_mode) - self.rooms_submenu.append(self.silent_mode) - - self.angle_submenu = Menu() - self.angle.set_submenu(self.angle_submenu) - self.angle_30 = MenuItem( - "30", functools.partial(self.toggle_angle, 30), checkitem=True) - self.angle_60 = MenuItem( - "60", functools.partial(self.toggle_angle, 60), checkitem=True) - self.angle_90 = MenuItem( - "90", functools.partial(self.toggle_angle, 90), checkitem=True) - self.angle_120 = MenuItem( - "120", functools.partial(self.toggle_angle, 120), checkitem=True) - self.angle_150 = MenuItem( - "150", functools.partial(self.toggle_angle, 150), checkitem=True) - self.angle_180 = MenuItem( - "180", functools.partial(self.toggle_angle, 180), checkitem=True) - self.angle_submenu.append(self.angle_30) - self.angle_submenu.append(self.angle_60) - self.angle_submenu.append(self.angle_90) - self.angle_submenu.append(self.angle_120) - self.angle_submenu.append(self.angle_150) - self.angle_submenu.append(self.angle_180) - - self.flight_mode = MenuItem("Flight Mode", self.toggle_flight_mode, - checkitem=True, visible=False) - self.indicator.menu.append(self.room_sound_effect) - self.indicator.menu.append(self.noise_cancelation) - self.indicator.menu.append(self.flight_mode) - - def activate(self, manager): - self.noise_cancelation.show() - self.flight_mode.show() - self.room_sound_effect.show() - super(ParrotZikVersion2Interface, self).activate(manager) - self._read_noise_cancelation() - self.flight_mode.set_active(self.parrot.flight_mode) - self._read_sound_effect_room() - self._read_sound_effect_angle() - sound_effect = self.parrot.sound_effect - - self.room_sound_effect_enabled.set_active(sound_effect) - self.concert_hall_mode.set_sensitive(sound_effect) - self.jazz_mode.set_sensitive(sound_effect) - self.living_mode.set_sensitive(sound_effect) - self.silent_mode.set_sensitive(sound_effect) - - self.angle_30.set_sensitive(sound_effect) - self.angle_60.set_sensitive(sound_effect) - self.angle_90.set_sensitive(sound_effect) - self.angle_120.set_sensitive(sound_effect) - self.angle_150.set_sensitive(sound_effect) - self.angle_180.set_sensitive(sound_effect) - - def deactivate(self): - self.noise_cancelation.hide() - self.concert_hall_mode.hide() - self.flight_mode.hide() - self.room_sound_effect.hide() - super(ParrotZikVersion2Interface, self).deactivate() - - def toggle_flight_mode(self, widget): - try: - self.parrot.flight_mode = self.flight_mode.get_active() - self.flight_mode.set_active(self.parrot.flight_mode) - except resource_manager.DeviceDisconnected: - self.deactivate() - - def toggle_room(self, room, widget): - try: - if not self.room_dirty: - self.parrot.room = room - self.room_dirty = True - self._read_sound_effect_room() - self.room_dirty = False - except resource_manager.DeviceDisconnected: - self.deactivate() - - def _read_sound_effect_room(self): - active_room = self.parrot.room - room_to_menuitem_map = ( - (Rooms.CONCERT_HALL, self.concert_hall_mode), - (Rooms.JAZZ_CLUB, self.jazz_mode), - (Rooms.LIVING_ROOM, self.living_mode), - (Rooms.SILENT_ROOM, self.silent_mode), - ) - for room, menu_item in room_to_menuitem_map: - menu_item.set_active(room == active_room) - - def toggle_room_sound_effect(self, widget): - try: - self.parrot.sound_effect = self.room_sound_effect_enabled.get_active() - sound_effect = self.parrot.sound_effect - self.room_sound_effect_enabled.set_active(sound_effect) - self.concert_hall_mode.set_sensitive(sound_effect) - self.jazz_mode.set_sensitive(sound_effect) - self.living_mode.set_sensitive(sound_effect) - self.silent_mode.set_sensitive(sound_effect) - self.angle_30.set_sensitive(sound_effect) - self.angle_60.set_sensitive(sound_effect) - self.angle_90.set_sensitive(sound_effect) - self.angle_120.set_sensitive(sound_effect) - self.angle_150.set_sensitive(sound_effect) - self.angle_180.set_sensitive(sound_effect) - except resource_manager.DeviceDisconnected: - self.deactivate() - - def toggle_angle(self, angle, widget): - try: - if not self.angle_dirty: - self.parrot.angle = angle - self.angle_dirty = True - self._read_sound_effect_angle() - self.angle_dirty = False - except resource_manager.DeviceDisconnected: - self.deactivate() - - def _read_sound_effect_angle(self): - active_angle = self.parrot.angle - angle_to_menuitem_map = ( - (30, self.angle_30), - (60, self.angle_60), - (90, self.angle_90), - (120, self.angle_120), - (150, self.angle_150), - (180, self.angle_180), - ) - for angle, menu_item in angle_to_menuitem_map: - menu_item.set_active(angle == active_angle) - - def toggle_noise_cancelation(self, noise_calcelation, widget): - try: - if not self.noise_cancelation_dirty: - self.parrot.noise_control = noise_calcelation - self.noise_cancelation_dirty = True - self._read_noise_cancelation() - self.noise_cancelation_dirty = False - except resource_manager.DeviceDisconnected: - self.deactivate() - - def _read_noise_cancelation(self): - active_noise_control = self.parrot.noise_control - noise_control_to_menuitem_map = ( - (NoiseControlTypes.NOISE_CONTROL_MAX, self.noise_control_cancelation_max), - (NoiseControlTypes.NOISE_CONTROL_ON, self.noise_control_cancelation_on), - (NoiseControlTypes.NOISE_CONTROL_OFF, self.noise_control_off), - (NoiseControlTypes.STREET_MODE, self.noise_control_street_mode), - (NoiseControlTypes.STREET_MODE_MAX, self.noise_control_street_mode_max), - ) - for noise_control, menu_item in noise_control_to_menuitem_map: - menu_item.set_active(active_noise_control == noise_control) - - -if __name__ == "__main__": - try: - indicator = ParrotZikIndicator() - indicator.main() - except KeyboardInterrupt: - pass -- cgit v1.2.1