class MainWindow(widgets.SubmanBaseWidget): """ The new RHSM main window. """ widget_names = [ 'main_window', 'notebook', 'system_name_label', 'register_menu_item', 'unregister_menu_item', 'redeem_menu_item', 'settings_menu_item', 'repos_menu_item' ] gui_file = "mainwindow" def log_server_version(self, uep): server_versions = get_server_versions(uep) log.debug("Server Versions: %s" % server_versions) # Remove this from the GTK main loop return False def __init__(self, backend=None, facts=None, ent_dir=None, prod_dir=None, auto_launch_registration=False): super(MainWindow, self).__init__() self.backend = backend or Backend() self.identity = require(IDENTITY) self.facts = facts or Facts(self.backend.entitlement_dir, self.backend.product_dir) # We need to make sure facts are loaded immediately, some GUI operations # are done in separate threads, and if facts try to load in another # thread the virt guest detection code breaks due to hwprobe's use of # signals. self.facts.get_facts() log.debug("Client Versions: %s " % get_client_versions()) # Log the server version asynchronously ga_GLib.idle_add(self.log_server_version, self.backend.cp_provider.get_consumer_auth_cp()) settings = self.main_window.get_settings() # prevent gtk from trying to save a list of recently used files, which # as root, causes gtk warning: # "Attempting to set the permissions of `/root/.local/share/recently-used.xbel' # The __name__ use is just for the 'origin' value gtk uses to store # where a Gtk.Settings value was set. settings.set_long_property('gtk-recent-files-max-age', 0, "%s:%s" % (__name__, type(self).__name__)) self.product_dir = prod_dir or self.backend.product_dir self.entitlement_dir = ent_dir or self.backend.entitlement_dir self.system_facts_dialog = factsgui.SystemFactsDialog(self.facts) self.preferences_dialog = PreferencesDialog(self.backend, self._get_window()) self.repos_dialog = RepositoriesDialog(self.backend, self._get_window()) self.import_sub_dialog = ImportSubDialog() self.network_config_dialog = networkConfig.NetworkConfigDialog() self.network_config_dialog.saveButton.connect("clicked", self._config_changed) self.redeem_dialog = redeem.RedeemDialog(self.backend) self.installed_tab_icon = ga_Gtk.Image() self.installed_tab_icon.set_from_stock(ga_Gtk.STOCK_YES, ga_Gtk.IconSize.MENU) self.installed_tab = InstalledProductsTab(self.backend, self.facts, self.installed_tab_icon, self, ent_dir=self.entitlement_dir, prod_dir=self.product_dir) self.my_subs_tab = MySubscriptionsTab(self.backend, self.main_window, ent_dir=self.entitlement_dir, prod_dir=self.product_dir) self.all_subs_tab = AllSubscriptionsTab(self.backend, self.facts, self.main_window) hbox = ga_Gtk.HBox(spacing=6) hbox.pack_start(self.installed_tab_icon, False, False, 0) hbox.pack_start(ga_Gtk.Label(self.installed_tab.get_label()), False, False, 0) self.notebook.append_page(self.installed_tab.get_content(), hbox) hbox.show_all() self.notebook.append_page(self.my_subs_tab.get_content(), ga_Gtk.Label(self.my_subs_tab.get_label())) self.connect_signals({ "on_register_menu_item_activate": self._register_item_clicked, "on_unregister_menu_item_activate": self._unregister_item_clicked, "on_import_cert_menu_item_activate": self._import_cert_item_clicked, "on_view_facts_menu_item_activate": self._facts_item_clicked, "on_proxy_config_menu_item_activate": self._proxy_config_item_clicked, "on_redeem_menu_item_activate": self._redeem_item_clicked, "on_preferences_menu_item_activate": self._preferences_item_clicked, "on_repos_menu_item_activate": self._repos_item_clicked, "on_about_menu_item_activate": self._about_item_clicked, "on_getting_started_menu_item_activate": self._getting_started_item_clicked, "on_online_docs_menu_item_activate": self._online_docs_item_clicked, "on_quit_menu_item_activate": ga_Gtk.main_quit, }) # TODO: why is this defined in the init scope? # When something causes cert_sorter to upate it's state, refresh the gui # The cert directories being updated will cause this (either noticed # from a timer, or via cert_sort.force_cert_check). def on_cert_sorter_cert_change(): # Update installed products self.installed_tab.update_products() self.installed_tab._set_validity_status() # Update attached subs self.my_subs_tab.update_subscriptions() # Update main window self.refresh() # Reset repos dialog, see bz 1132919 self.repos_dialog = RepositoriesDialog(self.backend, self._get_window()) self.backend.cs.add_callback(on_cert_sorter_cert_change) self.main_window.show_all() # Check to see if already registered to old RHN/Spacewalk # and show dialog if so self._check_rhn_classic() # Update everything with compliance data self.backend.cs.notify() # managergui needs cert_sort.cert_monitor.run_check() to run # on a timer to detect cert changes from outside the gui # (via rhsmdd for example, or manually provisioned). ga_GLib.timeout_add(2000, self._on_cert_check_timer) if auto_launch_registration and not self.registered(): self._register_item_clicked(None) def registered(self): return self.identity.is_valid() def _on_cert_check_timer(self): self.backend.on_cert_check_timer() return True def _on_sla_back_button_press(self): self._perform_unregister() self._register_item_clicked(None) def _on_sla_cancel_button_press(self): self._perform_unregister() def on_registration_changed(self): # Show the All Subscriptions tab if registered, hide it otherwise: if self.registered() and self.notebook.get_n_pages() == 2: self.notebook.append_page( self.all_subs_tab.get_content(), ga_Gtk.Label(self.all_subs_tab.get_label())) elif not self.registered() and self.notebook.get_n_pages() == 3: self.notebook.set_current_page(0) self.notebook.remove_page(2) # we've unregistered, clear pools from all subscriptions tab # so it's correct if we reshow it self.all_subs_tab.sub_details.clear() self.all_subs_tab.clear_pools() self.installed_tab.set_registered(self.registered()) self._show_buttons() self._show_redemption_buttons() def refresh(self): """ Refresh the UI. """ # Always run on startup, when there is no last_uuid if not hasattr(self, 'last_uuid') or self.identity.uuid != self.last_uuid: self.last_uuid = self.identity.uuid self.on_registration_changed() self.all_subs_tab.refresh() self.installed_tab.refresh() self.my_subs_tab.refresh() def _get_window(self): """ Return the window containing this widget (might be different for firstboot). """ return self.main_window def _show_buttons(self): """ Renders the Tools buttons dynamically. """ is_registered = self.registered() if is_registered: #self.register_menu_item.hide() self.register_menu_item.set_sensitive(False) self.unregister_menu_item.set_sensitive(True) self.settings_menu_item.set_sensitive(True) # preferences else: self.register_menu_item.set_sensitive(True) self.unregister_menu_item.set_sensitive(False) self.settings_menu_item.set_sensitive(False) show_overrides = False try: cp = self.backend.cp_provider.get_consumer_auth_cp() # This can throw an exception if we cannot connect to the server, bz 1058374 show_overrides = is_registered and cp.supports_resource( 'content_overrides') except Exception, e: log.debug( "Failed to check if the server supports resource content_overrides" ) log.debug(e) if show_overrides: self.repos_menu_item.set_sensitive(True) else: self.repos_menu_item.set_sensitive(False)
class MainWindow(widgets.GladeWidget): """ The new RHSM main window. """ widget_names = ['main_window', 'notebook', 'system_name_label', 'register_menu_item', 'unregister_menu_item', 'redeem_menu_item', 'settings_menu_item'] def __init__(self, backend=None, facts=None, ent_dir=None, prod_dir=None, auto_launch_registration=False): super(MainWindow, self).__init__('mainwindow.glade') self.backend = backend or Backend() self.identity = require(IDENTITY) self.facts = facts or Facts(self.backend.entitlement_dir, self.backend.product_dir) # We need to make sure facts are loaded immediately, some GUI operations # are done in separate threads, and if facts try to load in another # thread the virt guest detection code breaks due to hwprobe's use of # signals. self.facts.get_facts() log.debug("Client Versions: %s " % get_client_versions()) log.debug("Server Versions: %s " % get_server_versions(self.backend.cp_provider.get_consumer_auth_cp())) self.product_dir = prod_dir or self.backend.product_dir self.entitlement_dir = ent_dir or self.backend.entitlement_dir self.system_facts_dialog = factsgui.SystemFactsDialog(self.backend, self.facts) self.registration_dialog = registergui.RegisterScreen(self.backend, self.facts, self._get_window()) self.preferences_dialog = PreferencesDialog(self.backend, self._get_window()) self.import_sub_dialog = ImportSubDialog() self.network_config_dialog = networkConfig.NetworkConfigDialog() self.network_config_dialog.xml.get_widget("closeButton").connect("clicked", self._config_changed) self.redeem_dialog = redeem.RedeemDialog(self.backend) self.installed_tab_icon = gtk.Image() self.installed_tab_icon.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_MENU) self.installed_tab = InstalledProductsTab(self.backend, self.facts, self.installed_tab_icon, self, ent_dir=self.entitlement_dir, prod_dir=self.product_dir) self.my_subs_tab = MySubscriptionsTab(self.backend, self.main_window, ent_dir=self.entitlement_dir, prod_dir=self.product_dir) self.all_subs_tab = AllSubscriptionsTab(self.backend, self.facts, self.main_window) hbox = gtk.HBox(spacing=6) hbox.pack_start(self.installed_tab_icon, False, False) hbox.pack_start(gtk.Label(self.installed_tab.get_label()), False, False) self.notebook.append_page(self.installed_tab.get_content(), hbox) hbox.show_all() self.notebook.append_page(self.my_subs_tab.get_content(), gtk.Label(self.my_subs_tab.get_label())) self.glade.signal_autoconnect({ "on_register_menu_item_activate": self._register_item_clicked, "on_unregister_menu_item_activate": self._unregister_item_clicked, "on_import_cert_menu_item_activate": self._import_cert_item_clicked, "on_view_facts_menu_item_activate": self._facts_item_clicked, "on_proxy_config_menu_item_activate": self._proxy_config_item_clicked, "on_redeem_menu_item_activate": self._redeem_item_clicked, "on_preferences_menu_item_activate": self._preferences_item_clicked, "on_about_menu_item_activate": self._about_item_clicked, "on_getting_started_menu_item_activate": self._getting_started_item_clicked, "on_online_docs_menu_item_activate": self._online_docs_item_clicked, "on_quit_menu_item_activate": gtk.main_quit, }) def on_cert_change(): # Update installed products self.installed_tab.update_products() self.installed_tab._set_validity_status() # Update attached subs self.my_subs_tab.update_subscriptions() # Update main window self.refresh() self.backend.cs.add_callback(on_cert_change) self.main_window.show_all() # Check to see if already registered to old RHN/Spacewalk # and show dialog if so self._check_rhn_classic() # Update everything with compliance data self.backend.cs.notify() if auto_launch_registration and not self.registered(): self._register_item_clicked(None) def registered(self): return self.identity.is_valid() def _on_sla_back_button_press(self): self._perform_unregister() self._register_item_clicked(None) def _on_sla_cancel_button_press(self): self._perform_unregister() def on_registration_changed(self): # Show the All Subscriptions tab if registered, hide it otherwise: if self.registered() and self.notebook.get_n_pages() == 2: self.notebook.append_page(self.all_subs_tab.get_content(), gtk.Label(self.all_subs_tab.get_label())) elif not self.registered() and self.notebook.get_n_pages() == 3: self.notebook.set_current_page(0) self.notebook.remove_page(2) # we've unregistered, clear pools from all subscriptions tab # so it's correct if we reshow it self.all_subs_tab.sub_details.clear() self.all_subs_tab.clear_pools() self.installed_tab.set_registered(self.registered()) self._show_buttons() self._show_redemption_buttons() def refresh(self): """ Refresh the UI. """ # Always run on startup, when there is no last_uuid if not hasattr(self, 'last_uuid') or self.identity.uuid != self.last_uuid: self.last_uuid = self.identity.uuid self.on_registration_changed() self.all_subs_tab.refresh() self.installed_tab.refresh() self.my_subs_tab.refresh() def _get_window(self): """ Return the window containing this widget (might be different for firstboot). """ return self.main_window def _show_buttons(self): """ Renders the Tools buttons dynamically. """ if self.registered(): self.register_menu_item.hide() self.unregister_menu_item.show() self.settings_menu_item.show() # preferences else: self.register_menu_item.show() self.unregister_menu_item.hide() self.settings_menu_item.hide() def _show_redemption_buttons(self): # Check if consumer can redeem a subscription - if an identity cert exists can_redeem = False if self.identity.uuid: try: consumer = self.backend.cp_provider.get_consumer_auth_cp().getConsumer(self.identity.uuid, None, None) can_redeem = consumer['canActivate'] except Exception: can_redeem = False if can_redeem: self.redeem_menu_item.show() else: self.redeem_menu_item.hide() def _register_item_clicked(self, widget): self.registration_dialog.show() def _preferences_item_clicked(self, widget): try: self.preferences_dialog.show() except Exception, e: handle_gui_exception(e, _("Error in preferences dialog." "Please see /var/log/rhsm/rhsm.log for more information."), self._get_window())
class MainWindow(widgets.SubmanBaseWidget): """ The new RHSM main window. """ widget_names = ['main_window', 'notebook', 'system_name_label', 'register_menu_item', 'unregister_menu_item', 'redeem_menu_item', 'settings_menu_item', 'repos_menu_item'] gui_file = "mainwindow" def log_server_version(self, uep): server_versions = get_server_versions(uep) log.debug("Server Versions: %s" % server_versions) # Remove this from the GTK main loop return False def __init__(self, backend=None, facts=None, ent_dir=None, prod_dir=None, auto_launch_registration=False): super(MainWindow, self).__init__() self.backend = backend or Backend() self.identity = require(IDENTITY) self.facts = facts or Facts(self.backend.entitlement_dir, self.backend.product_dir) # We need to make sure facts are loaded immediately, some GUI operations # are done in separate threads, and if facts try to load in another # thread the virt guest detection code breaks due to hwprobe's use of # signals. self.facts.get_facts() log.debug("Client Versions: %s " % get_client_versions()) # Log the server version asynchronously ga_GLib.idle_add(self.log_server_version, self.backend.cp_provider.get_consumer_auth_cp()) settings = self.main_window.get_settings() # prevent gtk from trying to save a list of recently used files, which # as root, causes gtk warning: # "Attempting to set the permissions of `/root/.local/share/recently-used.xbel' # The __name__ use is just for the 'origin' value gtk uses to store # where a Gtk.Settings value was set. settings.set_long_property('gtk-recent-files-max-age', 0, "%s:%s" % (__name__, type(self).__name__)) self.product_dir = prod_dir or self.backend.product_dir self.entitlement_dir = ent_dir or self.backend.entitlement_dir self.system_facts_dialog = factsgui.SystemFactsDialog(self.facts) self.preferences_dialog = PreferencesDialog(self.backend, self._get_window()) self.repos_dialog = RepositoriesDialog(self.backend, self._get_window()) self.import_sub_dialog = ImportSubDialog() self.network_config_dialog = networkConfig.NetworkConfigDialog() self.network_config_dialog.saveButton.connect("clicked", self._config_changed) self.redeem_dialog = redeem.RedeemDialog(self.backend) self.installed_tab_icon = ga_Gtk.Image() self.installed_tab_icon.set_from_stock(ga_Gtk.STOCK_YES, ga_Gtk.IconSize.MENU) self.installed_tab = InstalledProductsTab(self.backend, self.facts, self.installed_tab_icon, self, ent_dir=self.entitlement_dir, prod_dir=self.product_dir) self.my_subs_tab = MySubscriptionsTab(self.backend, self.main_window, ent_dir=self.entitlement_dir, prod_dir=self.product_dir) self.all_subs_tab = AllSubscriptionsTab(self.backend, self.facts, self.main_window) hbox = ga_Gtk.HBox(spacing=6) hbox.pack_start(self.installed_tab_icon, False, False, 0) hbox.pack_start(ga_Gtk.Label(self.installed_tab.get_label()), False, False, 0) self.notebook.append_page(self.installed_tab.get_content(), hbox) hbox.show_all() self.notebook.append_page(self.my_subs_tab.get_content(), ga_Gtk.Label(self.my_subs_tab.get_label())) self.connect_signals({ "on_register_menu_item_activate": self._register_item_clicked, "on_unregister_menu_item_activate": self._unregister_item_clicked, "on_import_cert_menu_item_activate": self._import_cert_item_clicked, "on_view_facts_menu_item_activate": self._facts_item_clicked, "on_proxy_config_menu_item_activate": self._proxy_config_item_clicked, "on_redeem_menu_item_activate": self._redeem_item_clicked, "on_preferences_menu_item_activate": self._preferences_item_clicked, "on_repos_menu_item_activate": self._repos_item_clicked, "on_about_menu_item_activate": self._about_item_clicked, "on_getting_started_menu_item_activate": self._getting_started_item_clicked, "on_online_docs_menu_item_activate": self._online_docs_item_clicked, "on_quit_menu_item_activate": ga_Gtk.main_quit, }) # TODO: why is this defined in the init scope? # When something causes cert_sorter to upate it's state, refresh the gui # The cert directories being updated will cause this (either noticed # from a timer, or via cert_sort.force_cert_check). def on_cert_sorter_cert_change(): # Update installed products self.installed_tab.update_products() self.installed_tab._set_validity_status() # Update attached subs self.my_subs_tab.update_subscriptions() # Update main window self.refresh() # Reset repos dialog, see bz 1132919 self.repos_dialog = RepositoriesDialog(self.backend, self._get_window()) self.backend.cs.add_callback(on_cert_sorter_cert_change) self.main_window.show_all() # Check to see if already registered to old RHN/Spacewalk # and show dialog if so self._check_rhn_classic() # Update everything with compliance data self.backend.cs.notify() # managergui needs cert_sort.cert_monitor.run_check() to run # on a timer to detect cert changes from outside the gui # (via rhsmdd for example, or manually provisioned). ga_GLib.timeout_add(2000, self._on_cert_check_timer) if auto_launch_registration and not self.registered(): self._register_item_clicked(None) def registered(self): return self.identity.is_valid() def _on_cert_check_timer(self): self.backend.on_cert_check_timer() return True def _on_sla_back_button_press(self): self._perform_unregister() self._register_item_clicked(None) def _on_sla_cancel_button_press(self): self._perform_unregister() def on_registration_changed(self): # Show the All Subscriptions tab if registered, hide it otherwise: if self.registered() and self.notebook.get_n_pages() == 2: self.notebook.append_page(self.all_subs_tab.get_content(), ga_Gtk.Label(self.all_subs_tab.get_label())) elif not self.registered() and self.notebook.get_n_pages() == 3: self.notebook.set_current_page(0) self.notebook.remove_page(2) # we've unregistered, clear pools from all subscriptions tab # so it's correct if we reshow it self.all_subs_tab.sub_details.clear() self.all_subs_tab.clear_pools() self.installed_tab.set_registered(self.registered()) self._show_buttons() self._show_redemption_buttons() def refresh(self): """ Refresh the UI. """ # Always run on startup, when there is no last_uuid if not hasattr(self, 'last_uuid') or self.identity.uuid != self.last_uuid: self.last_uuid = self.identity.uuid self.on_registration_changed() self.all_subs_tab.refresh() self.installed_tab.refresh() self.my_subs_tab.refresh() def _get_window(self): """ Return the window containing this widget (might be different for firstboot). """ return self.main_window def _show_buttons(self): """ Renders the Tools buttons dynamically. """ is_registered = self.registered() if is_registered: #self.register_menu_item.hide() self.register_menu_item.set_sensitive(False) self.unregister_menu_item.set_sensitive(True) self.settings_menu_item.set_sensitive(True) # preferences else: self.register_menu_item.set_sensitive(True) self.unregister_menu_item.set_sensitive(False) self.settings_menu_item.set_sensitive(False) show_overrides = False try: cp = self.backend.cp_provider.get_consumer_auth_cp() # This can throw an exception if we cannot connect to the server, bz 1058374 show_overrides = is_registered and cp.supports_resource('content_overrides') except Exception, e: log.debug("Failed to check if the server supports resource content_overrides") log.debug(e) if show_overrides: self.repos_menu_item.set_sensitive(True) else: self.repos_menu_item.set_sensitive(False)
class MainWindow(widgets.GladeWidget): """ The new RHSM main window. """ widget_names = [ 'main_window', 'notebook', 'system_name_label', 'register_menu_item', 'unregister_menu_item', 'redeem_menu_item', 'settings_menu_item' ] def __init__(self, backend=None, facts=None, ent_dir=None, prod_dir=None, auto_launch_registration=False): super(MainWindow, self).__init__('mainwindow.glade') self.backend = backend or Backend() self.identity = require(IDENTITY) self.facts = facts or Facts(self.backend.entitlement_dir, self.backend.product_dir) # We need to make sure facts are loaded immediately, some GUI operations # are done in separate threads, and if facts try to load in another # thread the virt guest detection code breaks due to hwprobe's use of # signals. self.facts.get_facts() log.debug("Client Versions: %s " % get_client_versions()) log.debug("Server Versions: %s " % get_server_versions( self.backend.cp_provider.get_consumer_auth_cp())) self.product_dir = prod_dir or self.backend.product_dir self.entitlement_dir = ent_dir or self.backend.entitlement_dir self.system_facts_dialog = factsgui.SystemFactsDialog( self.backend, self.facts) self.registration_dialog = registergui.RegisterScreen( self.backend, self.facts, self._get_window()) self.preferences_dialog = PreferencesDialog(self.backend, self._get_window()) self.import_sub_dialog = ImportSubDialog() self.network_config_dialog = networkConfig.NetworkConfigDialog() self.network_config_dialog.xml.get_widget("closeButton").connect( "clicked", self._config_changed) self.redeem_dialog = redeem.RedeemDialog(self.backend) self.installed_tab_icon = gtk.Image() self.installed_tab_icon.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_MENU) self.installed_tab = InstalledProductsTab(self.backend, self.facts, self.installed_tab_icon, self, ent_dir=self.entitlement_dir, prod_dir=self.product_dir) self.my_subs_tab = MySubscriptionsTab(self.backend, self.main_window, ent_dir=self.entitlement_dir, prod_dir=self.product_dir) self.all_subs_tab = AllSubscriptionsTab(self.backend, self.facts, self.main_window) hbox = gtk.HBox(spacing=6) hbox.pack_start(self.installed_tab_icon, False, False) hbox.pack_start(gtk.Label(self.installed_tab.get_label()), False, False) self.notebook.append_page(self.installed_tab.get_content(), hbox) hbox.show_all() self.notebook.append_page(self.my_subs_tab.get_content(), gtk.Label(self.my_subs_tab.get_label())) self.glade.signal_autoconnect({ "on_register_menu_item_activate": self._register_item_clicked, "on_unregister_menu_item_activate": self._unregister_item_clicked, "on_import_cert_menu_item_activate": self._import_cert_item_clicked, "on_view_facts_menu_item_activate": self._facts_item_clicked, "on_proxy_config_menu_item_activate": self._proxy_config_item_clicked, "on_redeem_menu_item_activate": self._redeem_item_clicked, "on_preferences_menu_item_activate": self._preferences_item_clicked, "on_about_menu_item_activate": self._about_item_clicked, "on_getting_started_menu_item_activate": self._getting_started_item_clicked, "on_online_docs_menu_item_activate": self._online_docs_item_clicked, "on_quit_menu_item_activate": gtk.main_quit, }) def on_cert_change(): # Update installed products self.installed_tab.update_products() self.installed_tab._set_validity_status() # Update attached subs self.my_subs_tab.update_subscriptions() # Update main window self.refresh() self.backend.cs.add_callback(on_cert_change) self.main_window.show_all() # Check to see if already registered to old RHN/Spacewalk # and show dialog if so self._check_rhn_classic() # Update everything with compliance data self.backend.cs.notify() if auto_launch_registration and not self.registered(): self._register_item_clicked(None) def registered(self): return self.identity.is_valid() def _on_sla_back_button_press(self): self._perform_unregister() self._register_item_clicked(None) def _on_sla_cancel_button_press(self): self._perform_unregister() def on_registration_changed(self): # Show the All Subscriptions tab if registered, hide it otherwise: if self.registered() and self.notebook.get_n_pages() == 2: self.notebook.append_page(self.all_subs_tab.get_content(), gtk.Label(self.all_subs_tab.get_label())) elif not self.registered() and self.notebook.get_n_pages() == 3: self.notebook.set_current_page(0) self.notebook.remove_page(2) # we've unregistered, clear pools from all subscriptions tab # so it's correct if we reshow it self.all_subs_tab.sub_details.clear() self.all_subs_tab.clear_pools() self.installed_tab.set_registered(self.registered()) self._show_buttons() self._show_redemption_buttons() def refresh(self): """ Refresh the UI. """ # Always run on startup, when there is no last_uuid if not hasattr(self, 'last_uuid') or self.identity.uuid != self.last_uuid: self.last_uuid = self.identity.uuid self.on_registration_changed() self.all_subs_tab.refresh() self.installed_tab.refresh() self.my_subs_tab.refresh() def _get_window(self): """ Return the window containing this widget (might be different for firstboot). """ return self.main_window def _show_buttons(self): """ Renders the Tools buttons dynamically. """ if self.registered(): self.register_menu_item.hide() self.unregister_menu_item.show() self.settings_menu_item.show() # preferences else: self.register_menu_item.show() self.unregister_menu_item.hide() self.settings_menu_item.hide() def _show_redemption_buttons(self): # Check if consumer can redeem a subscription - if an identity cert exists can_redeem = False if self.identity.uuid: try: consumer = self.backend.cp_provider.get_consumer_auth_cp( ).getConsumer(self.identity.uuid, None, None) can_redeem = consumer['canActivate'] except Exception: can_redeem = False if can_redeem: self.redeem_menu_item.show() else: self.redeem_menu_item.hide() def _register_item_clicked(self, widget): self.registration_dialog.show() def _preferences_item_clicked(self, widget): try: self.preferences_dialog.show() except Exception, e: handle_gui_exception( e, _("Error in preferences dialog." "Please see /var/log/rhsm/rhsm.log for more information."), self._get_window())