- Optional sort by last spoken

- Fixes #69
- Causes #73
This commit is contained in:
trigg 2020-10-05 14:47:03 +01:00
parent a4535ba807
commit 3e766aff66
3 changed files with 43 additions and 4 deletions

View file

@ -160,8 +160,12 @@ class DiscordConnector:
user["speaking"] = olduser["speaking"]
if "nick" not in user and "nick" in olduser:
user["nick"] = olduser["nick"]
if "lastspoken" not in user and "lastspoken" in olduser:
user["lastspoken"] = olduser["lastspoken"]
if olduser["avatar"] != user["avatar"]:
self.voice_overlay.delete_avatar(user["id"])
if "lastspoken" not in user: # Still nothing?
user["lastspoken"] = 0 # EEEEPOOCH EEEEEPOCH! BELIEVE MEEEE
self.userlist[user["id"]] = user
def on_message(self, message):
@ -205,6 +209,8 @@ class DiscordConnector:
# It's only possible to get alerts for the room you're in
self.set_channel(j["data"]["channel_id"])
self.userlist[j["data"]["user_id"]]["speaking"] = True
self.userlist[j["data"]["user_id"]]["lastspoken"] = time.time()
self.list_altered = True
self.set_in_room(j["data"]["user_id"], True)
elif j["evt"] == "SPEAKING_STOP":
self.list_altered = True

View file

@ -88,7 +88,10 @@ class VoiceOverlayWindow(OverlayWindow):
def set_highlight_self(self, highlight_self):
self.highlight_self = highlight_self
def set_order(self, i):
self.order = i
def set_icon_only(self, i):
self.icon_only = i
self.redraw()
@ -121,7 +124,12 @@ class VoiceOverlayWindow(OverlayWindow):
user["friendlyname"] = user["nick"]
else:
user["friendlyname"] = user["username"]
self.userlist.sort(key=lambda x: x["friendlyname"])
if self.order == 1: # ID Sort
self.userlist.sort(key=lambda x: x["id"])
elif self.order == 2: # Spoken sort
self.userlist.sort(key=lambda x: x["lastspoken"], reverse=True)
else: # Name sort
self.userlist.sort(key=lambda x: x["friendlyname"])
screen = self.get_screen()
c = screen.is_composited()
if not self.compositing == c:
@ -230,13 +238,14 @@ class VoiceOverlayWindow(OverlayWindow):
mute = False
deaf = False
alpha = 1.0
if "speaking" in user and user["speaking"]:
c = self.talk_col
if "mute" in user and user["mute"]:
mute = True
if "deaf" in user and user["deaf"]:
deaf = True
alpha = 0.5
if "speaking" in user and user["speaking"] and not deaf and not mute:
c = self.talk_col
pix = None
if user["id"] in self.avatars:
pix = self.avatars[user["id"]]

View file

@ -68,6 +68,7 @@ class VoiceSettingsWindow(SettingsWindow):
self.floating_y = config.getint("main", "floating_y", fallback=0)
self.floating_w = config.getint("main", "floating_w", fallback=400)
self.floating_h = config.getint("main", "floating_h", fallback=400)
self.order = config.getint("main", "order", fallback=0)
# Pass all of our config over to the overlay
self.overlay.set_align_x(self.align_x)
@ -86,6 +87,7 @@ class VoiceSettingsWindow(SettingsWindow):
self.overlay.set_monitor(self.get_monitor_index(self.monitor))
self.overlay.set_vert_edge_padding(self.vert_edge_padding)
self.overlay.set_horz_edge_padding(self.horz_edge_padding)
self.overlay.set_order(self.order)
self.overlay.set_floating(
self.floating, self.floating_x, self.floating_y, self.floating_w, self.floating_h)
@ -128,6 +130,7 @@ class VoiceSettingsWindow(SettingsWindow):
config.set("main", "floating_y", "%s" % (self.floating_y))
config.set("main", "floating_w", "%s" % (self.floating_w))
config.set("main", "floating_h", "%s" % (self.floating_h))
config.set("main", "order", "%s" % (self.order))
with open(self.configFile, 'w') as file:
config.write(file)
@ -281,6 +284,19 @@ class VoiceSettingsWindow(SettingsWindow):
icon_only.set_active(self.icon_only)
icon_only.connect("toggled", self.change_icon_only)
# Order avatars
order_label = Gtk.Label.new("Order Avatars By")
order_store = Gtk.ListStore(str)
order_store.append(["Alphabetically"])
order_store.append(["ID"])
order_store.append(["Last Spoken"])
order = Gtk.ComboBox.new_with_model(order_store)
order.set_active(self.order)
order.connect("changed", self.change_order)
rt = Gtk.CellRendererText()
order.pack_start(rt, True)
order.add_attribute(rt, "text", 0)
box.attach(font_label, 0, 0, 1, 1)
box.attach(font, 1, 0, 1, 1)
box.attach(bg_col_label, 0, 1, 1, 1)
@ -315,6 +331,8 @@ class VoiceSettingsWindow(SettingsWindow):
box.attach(highlight_self, 1, 17, 1, 1)
box.attach(icon_only_label, 0, 18, 1, 1)
box.attach(icon_only, 1, 18, 1, 1)
box.attach(order_label, 0, 19, 1, 1)
box.attach(order, 1, 19, 1, 1)
self.add(box)
@ -485,3 +503,9 @@ class VoiceSettingsWindow(SettingsWindow):
self.icon_only = button.get_active()
self.save_config()
def change_order(self, button):
self.overlay.set_order(button.get_active())
self.order = button.get_active()
self.save_config()