Convert the prefs editor to the action library.
from templates import Template
from keywords import set_selection, sort_keywords
from __future__ import nested_scopes
def do_folder_action(db, form, folder):
if form['action'].value == 'add':
if form.has_key('sel'):
keyword = int(form['sel'].value)
db.add_folder(keyword, folder)
print "<em>Folder successfully add.</em>"
return keyword
elif form['action'].value == 'delete':
if form.has_key('delete'):
keyword = int(form['delete'].value)
db.remove_folders(keyword)
print "<em>Folder successfully remove.</em>"
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, status, status_msg):
tmpl = Template("folders.tmpl", prefs, status, status_msg)
tmpl.set('Parents', parents)
tmpl.set('folder', folder['id'])
tmpl.set('name', folder['name'])
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(sort_kw_with_removed)
tmpl.set('Keywords', keywords)
print tmpl.process()
def do_folders(db, prefs, form, status, status_msg):
folder = 0
if form:
if form.has_key('folder'):
folder = int(form['folder'].value)
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)
folders_keywords = []
for parent in parents:
folders_keywords.append(parent['keyword'])
parent['count'] = db.get_bookmarks_count(folders_keywords)[0][1]
children_keywords = db.get_bookmarks_count(selection, [], exclusion)
for child in children:
folders_keywords.append(child['keyword'])
# This is really selection, not folders_keywords
child['count'] = 0
for kw in children_keywords:
if kw[0] == child['keyword']:
child['count'] = kw[1]
children_keywords.remove(kw)
break
del children_keywords
bookmarks = map(lambda bk: bk[0], db.select_bookmarks(selection))
allkw = filter(lambda kw: kw[0] not in folders_keywords,
db.get_keywords(bookmarks))
keywords = map(lambda kw: { 'id': kw[0], 'keyword': kw[1] }, allkw)
allkw = map(lambda kw: kw[0], allkw)
count = db.get_bookmarks_count(selection, [], allkw)
removed = db.get_bookmarks_count(selection, exclusion, allkw)
for kw in keywords:
kw['count'] = 0
kw['removed'] = 0
for cnt in count:
if kw['id'] == cnt[0]:
kw['count'] = cnt[1]
count.remove(cnt)
break
for cnt in removed:
if kw['id'] == cnt[0]:
kw['removed'] = cnt[1]
removed.remove(cnt)
break
del allkw, count, removed
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, parents.pop(), parents, children, bookmarks, keywords, status, status_msg)