some cleanups in the main app
This commit is contained in:
parent
692ea58937
commit
dc8f8fa760
55
solaar.py
55
solaar.py
|
@ -21,9 +21,12 @@ from logitech.devices import *
|
||||||
#
|
#
|
||||||
|
|
||||||
APP_TITLE = 'Solaar'
|
APP_TITLE = 'Solaar'
|
||||||
|
_NO_DEVICES = 'No devices attached.'
|
||||||
|
_NO_RECEIVER = 'Unifying Receiver not found.'
|
||||||
|
_FOUND_RECEIVER = 'Unifying Receiver detected.'
|
||||||
|
|
||||||
_STATUS_TIMEOUT = 31 # seconds
|
_STATUS_TIMEOUT = 31 # seconds
|
||||||
_ICON_UPDATE_SLEEP = 13 # seconds
|
_ICON_UPDATE_SLEEP = 7 # seconds
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -53,12 +56,14 @@ class StatusThread(threading.Thread):
|
||||||
self.daemon = True
|
self.daemon = True
|
||||||
self.status_icon = status_icon
|
self.status_icon = status_icon
|
||||||
|
|
||||||
StatusThread.listener = None
|
self.last_receiver_status = None
|
||||||
StatusThread.devices = {}
|
self.listener = None
|
||||||
StatusThread.statuses = {}
|
self.devices = {}
|
||||||
|
self.statuses = {}
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
while True:
|
self.active = True
|
||||||
|
while self.active:
|
||||||
if self.listener is None:
|
if self.listener is None:
|
||||||
receiver = ur.open()
|
receiver = ur.open()
|
||||||
if receiver:
|
if receiver:
|
||||||
|
@ -67,22 +72,38 @@ class StatusThread(threading.Thread):
|
||||||
self.listener = EventsListener(receiver, self.events_callback)
|
self.listener = EventsListener(receiver, self.events_callback)
|
||||||
logging.info("started events listener %s", self.listener)
|
logging.info("started events listener %s", self.listener)
|
||||||
self.listener.start()
|
self.listener.start()
|
||||||
|
notify_desktop(1, _FOUND_RECEIVER)
|
||||||
|
self.last_receiver_status = 1
|
||||||
|
else:
|
||||||
|
if self.last_receiver_status != -1:
|
||||||
|
notify_desktop(-1, _NO_RECEIVER)
|
||||||
|
self.last_receiver_status = -1
|
||||||
elif not self.listener.active:
|
elif not self.listener.active:
|
||||||
logging.info("stopped events listener %s", self.listener)
|
logging.info("events listener %s stopped", self.listener)
|
||||||
self.listener = None
|
self.listener = None
|
||||||
self.devices.clear()
|
self.devices.clear()
|
||||||
self.statuses.clear()
|
self.statuses.clear()
|
||||||
|
notify_desktop(-1, _NO_RECEIVER)
|
||||||
|
self.last_receiver_status = -1
|
||||||
|
|
||||||
update_icon = True
|
if self.active:
|
||||||
if self.listener and self.devices:
|
update_icon = True
|
||||||
update_icon &= self.update_statuses()
|
if self.listener and self.devices:
|
||||||
|
update_icon &= self.update_old_statuses()
|
||||||
|
|
||||||
if update_icon:
|
if self.active and update_icon:
|
||||||
GObject.idle_add(self.update_status_icon)
|
GObject.idle_add(self.update_status_icon)
|
||||||
|
|
||||||
time.sleep(_ICON_UPDATE_SLEEP)
|
if self.active:
|
||||||
|
time.sleep(_ICON_UPDATE_SLEEP)
|
||||||
|
|
||||||
def update_statuses(self):
|
def stop(self):
|
||||||
|
self.active = False
|
||||||
|
if self.listener:
|
||||||
|
self.listener.stop()
|
||||||
|
ur.close(self.listener.receiver)
|
||||||
|
|
||||||
|
def update_old_statuses(self):
|
||||||
updated = False
|
updated = False
|
||||||
|
|
||||||
for devinfo in self.devices.values():
|
for devinfo in self.devices.values():
|
||||||
|
@ -156,14 +177,14 @@ class StatusThread(threading.Thread):
|
||||||
if status_text:
|
if status_text:
|
||||||
all_statuses.append(devinfo.name + ' ' + status_text)
|
all_statuses.append(devinfo.name + ' ' + status_text)
|
||||||
else:
|
else:
|
||||||
all_statuses.append(devinfo.name + ' present')
|
all_statuses.append(devinfo.name + ' found')
|
||||||
|
|
||||||
if all_statuses:
|
if all_statuses:
|
||||||
tooltip = '\n'.join(all_statuses)
|
tooltip = '\n'.join(all_statuses)
|
||||||
else:
|
else:
|
||||||
tooltip = 'No devices attached.'
|
tooltip = _NO_DEVICES
|
||||||
else:
|
else:
|
||||||
tooltip = 'Unifying Receiver not found.'
|
tooltip = _NO_RECEIVER
|
||||||
|
|
||||||
# logging.debug("tooltip %s", tooltip)
|
# logging.debug("tooltip %s", tooltip)
|
||||||
self.status_icon.set_tooltip_text(tooltip)
|
self.status_icon.set_tooltip_text(tooltip)
|
||||||
|
@ -177,5 +198,7 @@ if __name__ == '__main__':
|
||||||
status_icon.connect('popup_menu', Gtk.main_quit)
|
status_icon.connect('popup_menu', Gtk.main_quit)
|
||||||
|
|
||||||
GObject.threads_init()
|
GObject.threads_init()
|
||||||
StatusThread(status_icon).start()
|
status_thread = StatusThread(status_icon)
|
||||||
|
status_thread.start()
|
||||||
Gtk.main()
|
Gtk.main()
|
||||||
|
status_thread.stop()
|
||||||
|
|
Loading…
Reference in New Issue