Skip to content

Commit 70cca98

Browse files
committed
categorized module menu by location of module
1 parent 4078647 commit 70cca98

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

aw_qt/manager.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def __init__(self, name: str, testing: bool = False) -> None:
8484
self.name = name
8585
self.started = False # Should be True if module is supposed to be running, else False
8686
self.testing = testing
87+
self.location = "system" if _is_system_module(name) else "bundled"
8788
self._process = None # type: Optional[subprocess.Popen]
8889
self._last_process = None # type: Optional[subprocess.Popen]
8990

@@ -168,12 +169,7 @@ def __init__(self, testing: bool = False) -> None:
168169

169170
def discover_modules(self):
170171
# These should always be bundled with aw-qt
171-
found_modules = {
172-
"aw-server",
173-
"aw-watcher-afk",
174-
"aw-watcher-window"
175-
}
176-
found_modules |= set(_discover_modules_bundled())
172+
found_modules = set(_discover_modules_bundled())
177173
found_modules |= set(_discover_modules_system())
178174
found_modules ^= {"aw-qt"} # Exclude self
179175

aw_qt/trayicon.py

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import webbrowser
55
import os
66
import subprocess
7+
from collections import defaultdict
78

89
from PyQt5 import QtCore
910
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QMessageBox, QMenu, QWidget, QPushButton
@@ -93,12 +94,18 @@ def show_module_failed_dialog(module):
9394
box.show()
9495

9596
def rebuild_modules_menu():
96-
for module in modulesMenu.actions():
97-
name = module.text()
98-
alive = self.manager.modules[name].is_alive()
99-
module.setChecked(alive)
100-
# print(module.text(), alive)
97+
for action in modulesMenu.actions():
98+
if action.isEnabled():
99+
name = action.module.name
100+
alive = self.manager.modules[name].is_alive()
101+
action.setChecked(alive)
102+
# print(module.text(), alive)
101103

104+
# TODO: Do it in a better way, singleShot isn't pretty...
105+
QtCore.QTimer.singleShot(2000, rebuild_modules_menu)
106+
QtCore.QTimer.singleShot(2000, rebuild_modules_menu)
107+
108+
def check_module_status():
102109
unexpected_exits = self.manager.get_unexpected_stops()
103110
if unexpected_exits:
104111
for module in unexpected_exits:
@@ -107,22 +114,34 @@ def rebuild_modules_menu():
107114

108115
# TODO: Do it in a better way, singleShot isn't pretty...
109116
QtCore.QTimer.singleShot(2000, rebuild_modules_menu)
110-
111-
QtCore.QTimer.singleShot(2000, rebuild_modules_menu)
117+
QtCore.QTimer.singleShot(2000, check_module_status)
112118

113119
def _build_modulemenu(self, moduleMenu):
114120
moduleMenu.clear()
115121

116122
def add_module_menuitem(module):
117-
ac = moduleMenu.addAction(module.name, lambda: module.toggle())
123+
title = module.name
124+
ac = moduleMenu.addAction(title, lambda: module.toggle())
125+
# Kind of nasty, but a quick way to affiliate the module to the menu action for when it needs updating
126+
ac.module = module
118127
ac.setCheckable(True)
119128
ac.setChecked(module.is_alive())
120129

121-
add_module_menuitem(self.manager.modules["aw-server"])
130+
modules_by_location = defaultdict(lambda: list())
131+
for module in sorted(self.manager.modules.values(), key=lambda m: m.name):
132+
modules_by_location[module.location].append(module)
133+
134+
for location, modules in sorted(modules_by_location.items(), key=lambda kv: kv[0]):
135+
header = moduleMenu.addAction(location)
136+
header.setEnabled(False)
137+
138+
# Always show aw-server first
139+
if "aw-server" in (m.name for m in modules):
140+
add_module_menuitem(self.manager.modules["aw-server"])
122141

123-
for module_name in sorted(self.manager.modules.keys()):
124-
if module_name != "aw-server":
125-
add_module_menuitem(self.manager.modules[module_name])
142+
for module in sorted(modules, key=lambda m: m.name):
143+
if module.name != "aw-server":
144+
add_module_menuitem(self.manager.modules[module.name])
126145

127146

128147
def exit_dialog():

0 commit comments

Comments
 (0)