[kupfer: 20/31] Rank favorites up and display a star



commit d759c0bb476180d9d818b8ae547eeab0364dc1d9
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Wed Dec 30 20:18:18 2009 +0100

    Rank favorites up and display a star

 kupfer/browser.py          |    3 +++
 kupfer/learn.py            |   17 ++++++++++++++---
 kupfer/plugin/favorites.py |    5 +++++
 3 files changed, 22 insertions(+), 3 deletions(-)
---
diff --git a/kupfer/browser.py b/kupfer/browser.py
index 7a95ab6..bede25a 100644
--- a/kupfer/browser.py
+++ b/kupfer/browser.py
@@ -16,6 +16,7 @@ from kupfer import data, icons, scheduler, relevance
 from kupfer import interface
 from kupfer import keybindings
 from kupfer import pretty
+from kupfer import learn
 
 
 _escape_table = {
@@ -192,6 +193,8 @@ class LeafModel (object):
 		info = u""
 		if hasattr(leaf, "has_content") and leaf.has_content():
 			info = content_mark
+		if learn.is_favorite(leaf):
+			info += u"\N{BLACK STAR}"
 		return info
 	def get_rank_str(self, rank):
 		# Display rank empty instead of 0 since it looks better
diff --git a/kupfer/learn.py b/kupfer/learn.py
index ce28a3d..c371615 100644
--- a/kupfer/learn.py
+++ b/kupfer/learn.py
@@ -63,6 +63,7 @@ class Learning (object):
 		return True
 
 _register = {}
+_favorites = set()
 
 def record_search_hit(obj, key=u""):
 	"""
@@ -80,19 +81,20 @@ def get_record_score(obj, key=u""):
 	bonus score is given for @key matches
 	"""
 	name = repr(obj)
+	fav = 20 * (name in _favorites)
 	if name not in _register:
-		return 0
+		return fav
 	mns = _register[name]
 	if not key:
 		cnt = mns.get_count()
-		return 50 * (1 - 1.0/(cnt + 1))
+		return fav + 50 * (1 - 1.0/(cnt + 1))
 
 	stats = mns.get_mnemonics()
 	closescr = sum(stats[m] for m in stats if m.startswith(key))
 	mnscore = 30 * (1 - 1.0/(closescr + 1))
 	exact = stats.get(key, 0)
 	mnscore += 50 * (1 - 1.0/(exact + 1))
-	return mnscore
+	return fav + mnscore
 
 def _prune_register():
 	"""
@@ -152,3 +154,12 @@ def finish():
 		_prune_register()
 	filepath = config.save_config_file(mnemonics_filename)
 	Learning._pickle_register(_register, filepath)
+
+def add_favorite(obj):
+	_favorites.add(repr(obj))
+
+def remove_favorite(obj):
+	_favorites.discard(repr(obj))
+
+def is_favorite(obj):
+	return repr(obj) in _favorites
diff --git a/kupfer/plugin/favorites.py b/kupfer/plugin/favorites.py
index 22616bf..f3ce588 100644
--- a/kupfer/plugin/favorites.py
+++ b/kupfer/plugin/favorites.py
@@ -4,6 +4,7 @@ import weakref
 from kupfer.objects import Leaf, Source, Action, PicklingHelperMixin
 from kupfer import utils, objects, pretty
 from kupfer import puid
+from kupfer import learn
 
 __kupfer_name__ = _("Favorites")
 __kupfer_sources__ = ("FavoritesSource", )
@@ -85,6 +86,7 @@ class FavoritesSource (Source, PicklingHelperMixin):
 		cls.instance._add(itm)
 
 	def _add(self, itm):
+		learn.add_favorite(itm)
 		self.favorites.append(itm)
 		self.references.append(puid.get_unique_id(itm))
 		self.mark_for_update()
@@ -101,6 +103,7 @@ class FavoritesSource (Source, PicklingHelperMixin):
 		cls.instance._remove(itm)
 
 	def _remove(self, itm):
+		learn.remove_favorite(itm)
 		self.favorites.remove(itm)
 		id_ = puid.get_unique_id(itm)
 		if id_ in self.references:
@@ -115,6 +118,8 @@ class FavoritesSource (Source, PicklingHelperMixin):
 
 	def get_items(self):
 		self._update_items()
+		for fav in self.favorites:
+			learn.add_favorite(fav)
 		return reversed(self.favorites)
 
 	def get_description(self):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]