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