--- /dev/null
+#! /usr/local/bin/python -O
+"""
+ Sort bookmarks DB according to a rule:
+ -a - by AddDate
+ -v - by LastVisit
+ -m - by LastModified
+ -z - by Size
+ -t - by LastTested
+ default is -m
+ -r - reverse the sort order
+
+ Written by BroytMann, Apr 2000. Copyright (C) 2000 PhiloSoft Design
+"""
+
+
+import sys
+
+
+class SortBy:
+ def __init__(self, sort_by):
+ self.sort_by = sort_by
+
+ def __call__(self, o1, o2):
+ try:
+ attr1 = int(getattr(o1, self.sort_by))
+ except (TypeError, AttributeError):
+ return 1
+
+ try:
+ attr2 = int(getattr(o2, self.sort_by))
+ except (TypeError, AttributeError):
+ return -1
+
+ return cmp(attr1, attr2)
+
+
+def walk_linear(linear, walker):
+ for object in linear:
+ if object.isBookmark:
+ walker.bookmark(object, 0)
+
+
+def run():
+ from getopt import getopt
+ optlist, args = getopt(sys.argv[1:], "avmztrs")
+
+ sort_by = "last_modified"
+ reverse = 0
+ report_stats = 1
+
+ for _opt, _arg in optlist:
+ if _opt == '-a':
+ sort_by = "add_date"
+ elif _opt == '-v':
+ sort_by = "last_visit"
+ elif _opt == '-m':
+ sort_by = "last_modified"
+ elif _opt == '-z':
+ sort_by = "size"
+ elif _opt == '-t':
+ sort_by = "last_tested"
+ elif _opt == '-r':
+ reverse = 1
+ elif _opt == '-s':
+ report_stats = 0
+ try:
+ del _opt, _arg
+ except NameError:
+ pass
+
+ from storage import storage
+ storage = storage()
+
+ if report_stats:
+ sys.stdout.write("Loading %s: " % storage.filename)
+ sys.stdout.flush()
+
+ root_folder = storage.load()
+
+ if report_stats:
+ print "Ok"
+ sys.stdout.write("Sorting (by %s): " % sort_by)
+ sys.stdout.flush()
+
+ from bkmk_objects import make_linear
+ make_linear(root_folder)
+
+ linear = root_folder.linear
+ del linear[0] # exclude root folder from sorting
+
+ by = SortBy(sort_by)
+ linear.sort(by)
+
+ from writers import writer
+ output_filename = "%s-sorted_by-%s" % (writer.filename, sort_by)
+
+ if reverse:
+ linear.reverse()
+ output_filename = output_filename + "-reverse"
+
+ if report_stats:
+ print "done"
+ sys.stdout.write("Writing %s: " % output_filename)
+ sys.stdout.flush()
+
+ outfile = open(output_filename, 'w')
+ writer = writer(outfile)
+ writer.root_folder(root_folder)
+ walk_linear(linear, writer)
+ outfile.close()
+
+ if report_stats:
+ print "Ok"
+
+
+if __name__ == '__main__':
+ run()