--- /dev/null
+#! /usr/local/bin/python -O
+"""
+ Run through the bookmarks database and set names to titles from an external file
+
+ Written by BroytMann, May 2003 - May 2003. Copyright (C) 2003 PhiloSoft Design
+"""
+
+
+import sys
+
+
+def run():
+ from getopt import getopt
+ optlist, args = getopt(sys.argv[1:], "s")
+
+ report_stats = 1
+
+ for _opt, _arg in optlist:
+ if _opt == '-s':
+ report_stats = 0
+ try:
+ del _opt, _arg
+ except NameError:
+ pass
+
+ if report_stats:
+ print "BroytMann set-title-list, Copyright (C) 2003 PhiloSoft Design"
+
+ if len(args) <> 1:
+ sys.stderr.write("Usage: set-title-list [-s] title_list_file\n")
+ sys.exit(1)
+
+ # Read the external file with titles and build a mapping (URL => title)
+ titles_dict = {}
+
+ URL = None
+ title = None
+
+ title_list_file = open(args[0], 'r')
+ for line in title_list_file:
+ line = line[:-1] # strip trailing newline
+ if URL is None:
+ URL = line
+
+ elif title is None:
+ title = line
+
+ elif line: # the third line in every 3 lines must be empty
+ raise ValueError, "line is not empty for URL `%s', title `%s': line `%s'" % (URL, title, line)
+
+ else: # We've got 3 lines - add new entry to the mapping
+ if titles_dict.has_key(URL):
+ if title <> titles_dict[URL]:
+ raise ValueError, "titles are not identical for URL `%s': `%s' <> `%s'" % (URL, title, titles_dict[URL])
+
+ else:
+ titles_dict[URL] = title
+
+ # reset
+ URL = None
+ title = None
+
+ title_list_file.close()
+
+
+ from storage import storage
+ storage = storage()
+
+ if report_stats:
+ sys.stdout.write("Loading %s: " % storage.filename)
+ sys.stdout.flush()
+
+ root_folder = storage.load()
+ from bkmk_objects import make_linear
+ make_linear(root_folder)
+ objects = len(root_folder.linear)
+
+ if report_stats:
+ print "Ok"
+
+
+ # Run through the list of objects and check URLs/titles
+ changed = 0
+ for object_no in range(objects):
+ object = root_folder.linear[object_no]
+
+ if object.isBookmark:
+ URL = object.href
+ if titles_dict.has_key(URL):
+ name = titles_dict[URL]
+ if object.name <> name:
+ object.name = name
+ changed += 1
+
+
+ if changed and report_stats:
+ sys.stdout.write("Saving %s: " % storage.filename)
+ sys.stdout.flush()
+
+ if not changed and report_stats:
+ sys.stdout.write("No need to save data\n")
+ sys.stdout.flush()
+
+ if changed:
+ storage.store(root_folder)
+
+ if changed and report_stats:
+ print "Ok"
+ print objects, "objects passed"
+ print changed, "objects changed"
+
+
+if __name__ == '__main__':
+ run()