diff --git a/icons/scalable/qui-red-warn.svg b/icons/scalable/qui-red-warn.svg
new file mode 100755
index 00000000..448d9430
--- /dev/null
+++ b/icons/scalable/qui-red-warn.svg
@@ -0,0 +1,5 @@
+
diff --git a/qui/tray/updates.py b/qui/tray/updates.py
index 59032f53..daceb25a 100644
--- a/qui/tray/updates.py
+++ b/qui/tray/updates.py
@@ -17,11 +17,12 @@
import qubesadmin.events
import qui.utils
from qubesadmin import exc
+from qubes_config.widgets.utils import open_url_in_disposable
import gi # isort:skip
gi.require_version("Gtk", "3.0") # isort:skip
-from gi.repository import Gtk, Gio # isort:skip
+from gi.repository import Gtk, Gio, GLib # isort:skip
import gbulb
@@ -89,15 +90,38 @@ def __init__(self, app_name, qapp, dispatcher):
self.tray_menu = Gtk.Menu()
self.fullscreen_window_hack.show_for_widget(self.tray_menu)
+ # For those who never restart their PC, update EOL notifs every 6 hours
+ GLib.timeout_add_seconds(3600 * 6, self.check_vms_needing_update)
+
def run(self): # pylint: disable=arguments-differ
self.check_vms_needing_update()
self.connect_events()
self.update_indicator_state()
+ def obsolete_dom0(self, _event):
+ open_url_in_disposable(
+ "https://www.qubes-os.org/doc/supported-releases/",
+ self.qapp,
+ )
+
def setup_menu(self):
self.tray_menu.set_reserve_toggle_size(False)
+ if "dom0" in self.obsolete_vms:
+ self.tray_menu.append(
+ RunItem(
+ _(
+ ''
+ "Warning! "
+ "This release of Qubes OS is no longer supported!"
+ "\n"
+ "See officially supported releases"
+ ),
+ self.obsolete_dom0,
+ )
+ )
+
if self.vms_needing_update:
self.tray_menu.append(TextItem(_("Qube updates available!")))
self.tray_menu.append(
@@ -110,7 +134,7 @@ def setup_menu(self):
)
)
- if self.obsolete_vms:
+ if self.obsolete_vms and self.obsolete_vms != {"dom0"}:
self.tray_menu.append(
TextItem(_("Some qubes are no longer supported!"))
)
@@ -156,6 +180,7 @@ def check_vms_needing_update(self):
self.vms_needing_update.add(vm)
if not supported:
self.obsolete_vms.add(vm.name)
+ return True
def connect_events(self):
self.dispatcher.add_handler(
@@ -224,6 +249,8 @@ def feature_change(self, vm, event, feature, **_kwargs):
self.update_indicator_state()
def update_indicator_state(self):
+ if "dom0" in self.obsolete_vms:
+ self.widget_icon.set_from_icon_name("qui-red-warn")
if self.vms_needing_update or self.obsolete_vms:
self.widget_icon.set_visible(True)
else:
diff --git a/qui/utils.py b/qui/utils.py
index 59b00626..f203b15b 100644
--- a/qui/utils.py
+++ b/qui/utils.py
@@ -127,5 +127,5 @@ def check_support(vm) -> bool:
return True
except exc.QubesException:
return True
- eol = datetime.strptime(eol_string, "%Y-%m-%d")
+ eol = datetime.strptime(eol_string + " UTC", "%Y-%m-%d %Z")
return eol > datetime.now()
diff --git a/rpm_spec/qubes-desktop-linux-manager.spec.in b/rpm_spec/qubes-desktop-linux-manager.spec.in
index 30026f74..09173833 100644
--- a/rpm_spec/qubes-desktop-linux-manager.spec.in
+++ b/rpm_spec/qubes-desktop-linux-manager.spec.in
@@ -302,6 +302,7 @@ gtk-update-icon-cache %{_datadir}/icons/Adwaita &>/dev/null || :
/usr/share/icons/hicolor/scalable/apps/qui-domains-scalable.svg
/usr/share/icons/hicolor/scalable/apps/qui-disk-space.svg
/usr/share/icons/hicolor/scalable/apps/qui-disk-space-warn.svg
+/usr/share/icons/hicolor/scalable/apps/qui-red-warn.svg
/usr/share/icons/hicolor/scalable/apps/qui-updates.svg
/usr/share/icons/hicolor/scalable/apps/qui-updates-dark.svg
/usr/share/icons/hicolor/scalable/apps/qui-updates-light.svg