Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 20 additions & 30 deletions qui/tray/domains.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,6 @@
t = gettext.translation("desktop-linux-manager", fallback=True)
_ = t.gettext

STATE_DICTIONARY = {
"domain-pre-start": "Transient",
"domain-start": "Running",
"domain-start-failed": "Halted",
"domain-paused": "Paused",
"domain-unpaused": "Running",
"domain-shutdown": "Halted",
"domain-pre-shutdown": "Transient",
"domain-shutdown-failed": "Running",
}


class IconCache:
def __init__(self):
Expand Down Expand Up @@ -815,7 +804,12 @@ def update_state(self, state):
self.hide_spinner()
else:
self.show_spinner()
colormap = {"Paused": "grey", "Crashed": "red", "Transient": "red"}
colormap = {
"Paused": "grey",
"Crashed": "red",
"Starting": "red",
"Halting": "red",
}
if state in colormap:
self.name.label.set_markup(
f"<span color='{colormap[state]}'>{self.vm.name}</span>"
Expand Down Expand Up @@ -1072,16 +1066,14 @@ def add_domain_item(self, _submitter, event, vm, **_kwargs):
if vm.klass == "RemoteVM":
return

state = STATE_DICTIONARY.get(event)
if not state:
try:
state = vm.get_power_state()
except exc.QubesException:
# VM might have been already destroyed
if vm not in self.qapp.domains:
return
# or we might not have permission to access its power state
state = "Halted"
try:
state = vm.get_power_state()
except exc.QubesException:
# VM might have been already destroyed
if vm not in self.qapp.domains:
return
# or we might not have permission to access its power state
state = "NA"

domain_item = DomainMenuItem(vm, self, self.icon_cache, state=state)
if not event: # menu item creation at widget start; we can assume
Expand Down Expand Up @@ -1175,14 +1167,11 @@ def update_domain_item(self, vm, event, **kwargs):
return
item = self.menu_items[vm]

if event in STATE_DICTIONARY:
state = STATE_DICTIONARY[event]
else:
try:
state = vm.get_power_state()
except Exception: # pylint: disable=broad-except
# it's a fragile DispVM
state = "Transient"
try:
state = vm.get_power_state()
except Exception: # pylint: disable=broad-except
# it's a fragile DispVM
state = "NA"

item.update_state(state)

Expand Down Expand Up @@ -1349,6 +1338,7 @@ def key_event(self, _unused, event):
def main():
"""main function"""
qapp = qubesadmin.Qubes()
qapp.cache_enabled = True
dispatcher = qubesadmin.events.EventsDispatcher(qapp)
stats_dispatcher = qubesadmin.events.EventsDispatcher(
qapp, api_method="admin.vm.Stats"
Expand Down