]> git.phdru.name Git - bookmarks_db.git/blobdiff - sort_db.py
Version 3.3.1.
[bookmarks_db.git] / sort_db.py
diff --git a/sort_db.py b/sort_db.py
new file mode 100755 (executable)
index 0000000..60e3d41
--- /dev/null
@@ -0,0 +1,117 @@
+#! /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()