18436 PM making invalid assumptions about preferred pub
authorJohn Rice <john.rice@oracle.com>
Tue, 31 May 2011 15:22:20 +0100
changeset 2387 6a57682e2017
parent 2386 3cacbeb76ed5
child 2388 aa600f1de478
18436 PM making invalid assumptions about preferred pub 18445 PM reports error message when no publisher set on the system
src/gui/modules/misc.py
src/gui/modules/repository.py
src/gui/modules/startpage.py
src/packagemanager.py
--- a/src/gui/modules/misc.py	Fri May 27 13:27:03 2011 -0700
+++ b/src/gui/modules/misc.py	Tue May 31 15:22:20 2011 +0100
@@ -119,11 +119,12 @@
         names = []
         #Names with embedded commas, the default name separator, need to
         #be quoted to be treated as a single name
-        for name in prop_sig_req_names:
-                if name.split(",", 1) == 2:
-                        names.append("\"%s\"" % name)
-                else:
-                        names.append(name)
+        if prop_sig_req_names:
+                for name in prop_sig_req_names:
+                        if name.split(",", 1) == 2:
+                                names.append("\"%s\"" % name)
+                        else:
+                                names.append(name)
         sig_policy = {}
         sig_policy[SIG_POLICY_IGNORE] = False
         sig_policy[SIG_POLICY_VERIFY] = False
--- a/src/gui/modules/repository.py	Fri May 27 13:27:03 2011 -0700
+++ b/src/gui/modules/repository.py	Tue May 31 15:22:20 2011 +0100
@@ -34,8 +34,6 @@
 PUBCERT_NOTSET_HASH = "HASH-NOTSET" #No L10N required
 PUBCERT_NOTAVAILABLE = _("Not available")
 
-PREFERRED_PRIORITY = 0
-
 import sys
 import os
 import pango
@@ -529,8 +527,10 @@
         def __fetch_pub_signature_policy(self):
                 pub = self.repository_modify_publisher
                 prop_sig_pol = pub.signature_policy.name
-                prop_sig_req_names = \
-                        pub.properties[gui_misc.PROP_SIGNATURE_REQUIRED_NAMES]
+                prop_sig_req_names = None
+                if gui_misc.PROP_SIGNATURE_REQUIRED_NAMES in pub.properties:
+                        prop_sig_req_names = \
+                                pub.properties[gui_misc.PROP_SIGNATURE_REQUIRED_NAMES]
                 return gui_misc.create_sig_policy_from_property(
                     prop_sig_pol, prop_sig_req_names)
 
@@ -1266,6 +1266,8 @@
                                 model.insert(j, publisher_row)
 
                 self.w_publishers_treeview.set_model(sorted_model)
+                if len(sorted_model) == 0:
+                        self.__set_empty_pub_list()
 
                 if restore_changes:
                         if self.new_pub:
@@ -1279,6 +1281,14 @@
                                             selected_rows[1][0])
                                         selection.select_path(selected_rows[1][0])
 
+        def __set_empty_pub_list(self):
+                details_buffer = self.w_manage_publishers_details.get_buffer()
+                details_buffer.set_text("")
+                self.w_manage_modify_btn.set_sensitive(False)
+                self.w_manage_remove_btn.set_sensitive(False)
+                self.w_manage_up_btn.set_sensitive(False)
+                self.w_manage_down_btn.set_sensitive(False)
+
         def __select_last_publisher(self):
                 sorted_model = self.w_publishers_treeview.get_model()
                 itr = sorted_model.get_iter_first()
@@ -1599,10 +1609,10 @@
                 model = filtered_model.get_model()
                 itr = model.get_iter(path)
                 if itr == None:
-                        return
-                preferred = 0 == model.get_value(itr,
-                    enumerations.PUBLISHER_PRIORITY_CHANGED)
-                if preferred:
+                        self.w_manage_modify_btn.set_sensitive(False)
+                        self.w_manage_remove_btn.set_sensitive(False)
+                        self.w_manage_up_btn.set_sensitive(False)
+                        self.w_manage_down_btn.set_sensitive(False)
                         return
                 pub = model.get_value(itr, enumerations.PUBLISHER_OBJECT)
                 if pub.sys_pub:
@@ -1616,24 +1626,27 @@
         @staticmethod
         def __is_at_least_one_entry(treeview):
                 model = treeview.get_model()
-                if len(model) > 1:
+                if len(model) >= 1:
                         return True
                 return False
 
         def __enable_disable_remove_modify_btn(self, itr, model):
                 if itr == None:
+                        self.w_manage_modify_btn.set_sensitive(False)
+                        self.w_manage_remove_btn.set_sensitive(False)
+                        self.w_manage_up_btn.set_sensitive(False)
+                        self.w_manage_down_btn.set_sensitive(False)
                         return
                 remove_val = False
                 modify_val = False
                 if self.__is_at_least_one_entry(self.w_publishers_treeview):
+                        remove_val = True
+                        modify_val = True
                         pub = model.get_value(itr,
                                 enumerations.PUBLISHER_OBJECT)
-                        if not  pub.sys_pub:
-                                current_priority = model.get_value(itr,
-                                    enumerations.PUBLISHER_PRIORITY_CHANGED)
-                                if current_priority != PREFERRED_PRIORITY:
-                                        remove_val = True
-                                modify_val = True
+                        if pub.sys_pub:
+                                remove_val = False
+                                modify_val = False
                 self.w_manage_modify_btn.set_sensitive(modify_val)
                 self.w_manage_remove_btn.set_sensitive(remove_val)
 
@@ -1643,8 +1656,6 @@
                 sorted_size = len(self.w_publishers_treeview.get_model())
 
                 if itr:
-                        enabled = model.get_value(itr,
-                            enumerations.PUBLISHER_ENABLED)
                         current_priority = model.get_value(itr,
                             enumerations.PUBLISHER_PRIORITY_CHANGED)
                         is_sys_pub = model.get_value(itr,
@@ -1666,21 +1677,7 @@
                                 if prev_pub.sys_pub:
                                         prev_sys_pub = True
              
-                        if current_priority == PREFERRED_PRIORITY:
-                                up_enabled = False
-                                if next_sys_pub or is_sys_pub:
-                                        down_enabled = False
-                                else:
-                                        if next_itr:
-                                                down_enabled = model.get_value(
-                                                    next_itr, 
-                                                    enumerations.PUBLISHER_ENABLED)
-                        elif (current_priority == PREFERRED_PRIORITY + 1) and not enabled:
-                                up_enabled = False
-                                down_enabled = True
-                                if current_priority == sorted_size - 1:
-                                        down_enabled = False
-                        elif current_priority == sorted_size - 1:
+                        if current_priority == sorted_size - 1:
                                 up_enabled = True
                                 down_enabled = False
 
@@ -2375,6 +2372,8 @@
                                 row = sorted_path[0]-1
                                 if row >= 0:
                                         tsel.select_path((row,))
+                if len(sorted_model) == 0:
+                        self.__set_empty_pub_list()
 
         def __on_manage_move_up_clicked(self, widget):
                 before_name = None
@@ -2834,18 +2833,13 @@
         @staticmethod
         def __toggle_data_function(column, renderer, model, itr, data):
                 if itr:
-                        # Do not allow to remove the publisher of first priority search
-                        # or if it is a system publisher
+                        # Do not allow to remove the publisher if it is a system
+                        # publisher
                         val = True
-                        priority = model.get_value(itr, 
-                            enumerations.PUBLISHER_PRIORITY_CHANGED)
-                        if priority == PREFERRED_PRIORITY:
+                        pub = model.get_value(itr,
+                            enumerations.PUBLISHER_OBJECT)
+                        if pub.sys_pub:
                                 val = False
-                        else:
-                                pub = model.get_value(itr, 
-                                    enumerations.PUBLISHER_OBJECT)
-                                if pub.sys_pub:
-                                        val = False
                         renderer.set_property("sensitive", val)
 
         @staticmethod
--- a/src/gui/modules/startpage.py	Fri May 27 13:27:03 2011 -0700
+++ b/src/gui/modules/startpage.py	Tue May 31 15:22:20 2011 +0100
@@ -38,6 +38,8 @@
 import pkg.gui.misc as gui_misc
 import pkg.gui.parseqs as parseqs
 from pkg.client import global_settings
+import pkg.gui.enumerations as enumerations
+import pkg.gui.repository as repository
 
 logger = global_settings.logger
 
@@ -72,6 +74,9 @@
                                #Internal field: search all publishers installed
 INTERNAL_SEARCH_HELP = "search_help" # Internal field: display search help
 
+INTERNAL_SEARCH_MNG_PUBS = "search_mng_pubs"
+                                # Internal field: display Manage Publishers dialog
+
 FONTSIZE_H3_DEFAULT = 16        # Default H3 font size when display web page
 FONTSIZE_BODY_DEFAULT = 10      # Default Body font size when display web page
 
@@ -346,6 +351,21 @@
                         gui_misc.display_help("search-pkg")
                         return
 
+                if search_action and search_action == INTERNAL_SEARCH_MNG_PUBS:
+                        if handle_what == DISPLAY_LINK:
+                                return _("Display %(s1)sManage Publishers%(e1)s") % \
+                                        {"s1": s1, "e1": e1}
+                        self.parent.update_statusbar_message(
+                            _("Loading %(s1)sManage Publishers%(e1)s ...") %
+                            {"s1": s1, "e1": e1})
+
+                        repository.Repository(self.parent,
+                            self.parent.image_directory,
+                            action=enumerations.MANAGE_PUBLISHERS,
+                            main_window = self.parent.w_main_window,
+                            gconf = self.parent.gconf)
+                        return
+
                 # View Recent Search Results
                 if search_action and \
                         search_action.find(INTERNAL_SEARCH_VIEW_RESULTS) > -1:
@@ -479,7 +499,31 @@
 
                 self.__load_internal_page(self.cached_internal_stream)
 
+        def setup_search_all_no_pubs_page(self):
+                tbl_header = INFORMATION_TABLE_HEADER % {"base": START_PAGE_IMAGES_BASE,
+                    "prefix": self.image_prefix}
+                tbl_header += _("alt='[Information]' title='Information' ALIGN='bottom'>"
+                    "</TD><TD><h3><b>Search All Publishers</b></h3><TD></TD>"
+                    "</TR><TR><TD></TD><TD> There is nothing to search as there are no "
+                    "configured or enabled publishers.</TD></TR>"
+                    )
+
+                tbl_body = _("<TR><TD></TD><TD<TD></TD></TR><TR><TD></TD><TD<TD></TD>"
+                    "</TR><TR><TD></TD><TD<TD><b>Suggestions:</b><br></TD></TR>"
+                    "<TR><TD></TD><TD<TD>"
+                    )
+
+                tbl_body += _("<li style='padding-left:7px'>"
+                    "Add or enable publishers: <a href='pm?pm-action=internal&search="
+                    "%s'>Manage Publishers</a></li></TD></TR>") % INTERNAL_SEARCH_MNG_PUBS
+                tbl_footer = "</table>"
+                self.__load_internal_page(tbl_header + tbl_body + tbl_footer)
+
+
         def setup_search_all_page(self, publisher_list, publisher_all):
+                if not publisher_list:
+                        self.setup_search_all_no_pubs_page()
+                        return
                 tbl_header = INFORMATION_TABLE_HEADER % {"base": START_PAGE_IMAGES_BASE,
                     "prefix": self.image_prefix}
                 tbl_header += _("alt='[Information]' title='Information' ALIGN='bottom'>"
--- a/src/packagemanager.py	Fri May 27 13:27:03 2011 -0700
+++ b/src/packagemanager.py	Tue May 31 15:22:20 2011 +0100
@@ -88,6 +88,7 @@
 import pkg.client.progress as progress
 import pkg.client.api_errors as api_errors
 import pkg.client.api as api
+import pkg.client.publisher as publisher
 import pkg.portable as portable
 import pkg.fmri as fmri
 import pkg.nrlock as nrlock
@@ -3132,7 +3133,11 @@
                                    enumerations.REPOSITORY_PREFIX)
                 self.__disconnect_repository_model()
                 self.repositories_list = self.__get_new_repositories_liststore()
-                default_pub = api_o.get_highest_ranked_publisher().prefix
+                highest_ranked_pub = api_o.get_highest_ranked_publisher()
+                default_pub = None
+                if highest_ranked_pub != None and  \
+                        isinstance(highest_ranked_pub, publisher.Publisher):
+                        default_pub = highest_ranked_pub.prefix
                 if self.default_publisher != default_pub:
                         self.__clear_pkg_selections()
                         self.default_publisher = default_pub