18436 PM making invalid assumptions about preferred pub
18445 PM reports error message when no publisher set on the system
--- 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