lib/folders.py
branchxbelweb
changeset 53 e80160a19653
parent 52 fe0d02f344cb
child 54 f74bad856bce
--- a/lib/folders.py	Sun Oct 26 22:56:49 2003 -0500
+++ b/lib/folders.py	Mon Oct 27 02:26:39 2003 -0500
@@ -18,16 +18,23 @@
 		return keyword
    return -1
 
+def sort_kw_with_removed(l, r):
+	result = l['removed'] - r['removed']
+	if result == 0:
+		result = l['count'] - r['count']
+	return -int(result)
+
 def output(prefs, folder, parents, children, bookmarks, keywords):
     tmpl = Template("folders.tmpl", prefs)
     tmpl.set('Parents', parents)
     tmpl.set('folder', folder['id'])
     tmpl.set('name', folder['name'])
-    tmpl.set('total', len(bookmarks))
+    tmpl.set('total', folder['count'])
+    tmpl.set('subtotal', len(bookmarks))
     bookmarks.sort(lambda l,r: cmp(l['name'],r['name']))
     tmpl.set('Bookmarks', bookmarks)
     tmpl.set('Subfolders', children)
-    keywords = sort_keywords(keywords[1:], prefs)
+    keywords.sort(sort_kw_with_removed)
     tmpl.set('Keywords', keywords)
     print tmpl.process()
 
@@ -39,29 +46,32 @@
    	if form.has_key('action'):
 		do_folder_action(db, form, folder)
     parents = db.get_folder_parents_and_self(folder)
+    parents.reverse()
     children = db.get_subfolders(folder)
     selection = map(lambda e: e['keyword'], parents)
     exclusion = map(lambda e: e['keyword'], children)
-    parents.reverse()
-    folder = parents.pop()
-    bookmarks = db.select_bookmarks(selection)
-    selected_keywords = set_selection(db,
-		map(lambda e: e[0], bookmarks),
-		selection)
+    folders_keywords = []
+    for parent in parents:
+	folders_keywords.append(parent['keyword'])
+	parent['count'] = db.get_bookmarks_count(folders_keywords)
+    for child in children:
+	folders_keywords.append(child['keyword'])
+	# This is really selection, not folders_keywords
+	child['count'] = db.get_bookmarks_count(selection + [child['keyword']])
+    bookmarks = map(lambda bk: bk[0], db.select_bookmarks(selection))
+    allkw = db.get_keywords(bookmarks)
     keywords = []
-    subfolders = []
-    folders_keywords = selection +exclusion
-    for keyword in selected_keywords:
-    	if keyword['id'] not in folders_keywords:
-		keywords.append(keyword)
-    	for child in children:
-		if child['keyword'] == keyword['id']:
-			child['count'] = keyword['count']
-			subfolders.append(child)
-			children.remove(child)
-			break
+    for keyword in allkw:
+	if keyword[0] not in folders_keywords:
+		kw = { 'id': keyword[0], 'keyword': keyword[1] }
+		kwsel = selection + [kw['id']]
+		kw['count'] = db.get_bookmarks_count(kwsel)
+		kw['removed'] = db.get_bookmarks_count(kwsel, exclusion)
+		keywords.append(kw)
+    del allkw, folders_keywords
     bookmarks = db.select_bookmarks(selection, exclusion)
     if len(bookmarks) <> 0:
    	bookmarks = db.get_bookmarks(map(lambda bk: bk[0], bookmarks))
     	bookmarks = map(lambda bk: bk.dict(), bookmarks)
-    output(prefs, folder, parents, subfolders, bookmarks, keywords)
+    output(prefs, parents.pop(), parents, children, bookmarks, keywords)
+