This file is a part of Bookmarks database and Internet robot.
"""
-__version__ = "$Revision$"[11:-2]
-__revision__ = "$Id$"[5:-2]
-__date__ = "$Date$"[7:-2]
__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2000-2011 PhiloSoft Design"
+__copyright__ = "Copyright (C) 2000-2023 PhiloSoft Design"
__license__ = "GNU GPL"
+__all__ = ['storage_flad']
+
+
import string
from m_lib.flad import fladm
from bkmk_objects import Folder, Bookmark, Ruler, Walker
class storage_flad(Walker):
- filename = "bookmarks_db.flad"
-
- def __init__(self):
- self.first_object = 1
-
- def root_folder(self, f):
- header = string.replace(f.header, ".", ".\n")
- header = string.replace(header, "<", "\n<", 3)[1:]
- header_file = open("header", 'w')
- header_file.write(header + "\n")
- header_file.write('<H1>%s</H1>\n\n' % f.name)
- if f.comment: header_file.write('<DD>%s\n' % f.comment)
- header_file.close()
-
- def start_folder(self, f, level):
- self.outfile.write("""
+ filename = "bookmarks_db.flad"
+
+ def __init__(self):
+ self.first_object = 1
+
+ def root_folder(self, f):
+ header = string.replace(f.header, ".", ".\n")
+ header = string.replace(header, "<", "\n<", 3)[1:]
+ header_file = open("header", 'w')
+ header_file.write(header + "\n")
+ header_file.write('<H1>%s</H1>\n\n' % f.name)
+ if f.comment: header_file.write('<DD>%s\n' % f.comment)
+ header_file.close()
+
+ def start_folder(self, f, level):
+ self.outfile.write("""
Level: %d
Folder: %s
AddDate: %s
LastModified: %s
""" % (level, f.name, f.add_date, f.comment, f.last_modified or ''))
- def bookmark(self, b, level):
- self.outfile.write("""
+ def bookmark(self, b, level):
+ self.outfile.write("""
Level: %d
Title: %s
URL: %s
Icon: %s
Charset: %s
""" % (level+1, b.name, b.href, b.add_date, b.last_visit, b.last_modified,
- b.keyword, b.comment.replace('\n', "\\n"),
- b.icon_href or '', b.icon or '', b.charset or ''))
-
-
- def ruler(self, r, level):
- self.outfile.write("\nLevel: %s\nRuler: YES\n" % (level+1))
-
-
- def store(self, root_folder):
- self.outfile = open(self.filename, 'w')
- root_folder.walk_depth(self)
- self.outfile.close()
-
-
- def unindent(self, old_level, new_level):
- while old_level > new_level:
- old_level = old_level - 1
- del self.folder_stack[-1]
-
- if self.folder_stack:
- self.current_folder = self.folder_stack[-1]
- else:
- self.current_folder = None
-
- def load(self):
- bookmarks_db = fladm.load_from_file(self.filename, fladm.check_record, ["Level"])
-
- root_folder = Folder()
- self.folder_stack = [root_folder]
- self.current_folder = root_folder
-
- header_file = open("header", 'r')
- header = header_file.read()
- header_file.close()
-
- header = string.split(header, "\n")
- root_folder.header = string.join(header[:5], '')
- root_folder.name = header[5][4:-5]
- root_folder.comment = string.join(header[7:], '')[4:]
-
- save_level = 0
- got_folder = 1 # Start as if we already have one folder
-
- for record in bookmarks_db:
- level = int(record["Level"])
-
- if level == save_level:
- pass
- elif level == save_level + 1:
- if not got_folder:
- raise ValueError, "indent without folder"
- elif level <= save_level - 1:
- self.unindent(save_level, level)
- else:
- raise ValueError, "new level (%d) too big; must be %d - %d" % (level, save_level-1, save_level+1)
-
- save_level = level
- got_folder = record.has_key("Folder") # Test here to save got_folder for next loop
-
- if record.has_key("URL"):
- comment = record["Comment"].replace("\\n", '\n')
- bookmark = Bookmark(record["URL"], record["AddDate"],
- record["LastVisit"], record["LastModified"],
- record["Keyword"], comment)
- bookmark.name = record["Title"]
- self.current_folder.append(bookmark)
-
- elif record.has_key("Folder"):
- folder = Folder(record["AddDate"], record["Comment"], record["LastModified"])
- folder.name = record["Folder"]
- self.current_folder.append(folder)
- self.folder_stack.append(folder)
- self.current_folder = folder
-
- elif record.has_key("Ruler"):
- self.current_folder.append(Ruler())
-
- else:
- raise KeyError, "neither \"URL\" nor \"Folder\" nor \"Ruler\" in record " + str(record)
-
- if save_level >= 0:
- self.unindent(save_level, 0)
- else:
- raise ValueError, "new level (%d) too little - must be >= 0" % save_level
-
- return root_folder
+ b.keyword, b.comment.replace('\n', "\\n"),
+ b.icon_href or '', b.icon or '', b.charset or ''))
+
+ def ruler(self, r, level):
+ self.outfile.write("\nLevel: %s\nRuler: YES\n" % (level+1))
+
+ def store(self, root_folder):
+ self.outfile = open(self.filename, 'w')
+ root_folder.walk_depth(self)
+ self.outfile.close()
+
+ def unindent(self, old_level, new_level):
+ while old_level > new_level:
+ old_level = old_level - 1
+ del self.folder_stack[-1]
+
+ if self.folder_stack:
+ self.current_folder = self.folder_stack[-1]
+ else:
+ self.current_folder = None
+
+ def load(self):
+ bookmarks_db = fladm.load_from_file(self.filename, fladm.check_record, ["Level"])
+
+ root_folder = Folder()
+ self.folder_stack = [root_folder]
+ self.current_folder = root_folder
+
+ header_file = open("header", 'r')
+ header = header_file.read()
+ header_file.close()
+
+ header = string.split(header, "\n")
+ root_folder.header = string.join(header[:5], '')
+ root_folder.name = header[5][4:-5]
+ root_folder.comment = string.join(header[7:], '')[4:]
+
+ save_level = 0
+ got_folder = 1 # Start as if we already have one folder
+
+ for record in bookmarks_db:
+ level = int(record["Level"])
+
+ if level == save_level:
+ pass
+ elif level == save_level + 1:
+ if not got_folder:
+ raise ValueError("indent without folder")
+ elif level <= save_level - 1:
+ self.unindent(save_level, level)
+ else:
+ raise ValueError("new level (%d) too big; must be %d - %d" % (level, save_level-1, save_level+1))
+
+ save_level = level
+ got_folder = record.has_key("Folder") # Test here to save got_folder for next loop
+
+ if record.has_key("URL"):
+ comment = record["Comment"].replace("\\n", '\n')
+ bookmark = Bookmark(
+ record["URL"], record["AddDate"],
+ record["LastVisit"], record["LastModified"],
+ record["Keyword"], comment)
+ bookmark.name = record["Title"]
+ self.current_folder.append(bookmark)
+
+ elif record.has_key("Folder"):
+ folder = Folder(record["AddDate"], record["Comment"], record["LastModified"])
+ folder.name = record["Folder"]
+ self.current_folder.append(folder)
+ self.folder_stack.append(folder)
+ self.current_folder = folder
+
+ elif record.has_key("Ruler"):
+ self.current_folder.append(Ruler())
+
+ else:
+ raise KeyError("neither \"URL\" nor \"Folder\" nor \"Ruler\" in record " + str(record))
+
+ if save_level >= 0:
+ self.unindent(save_level, 0)
+ else:
+ raise ValueError("new level (%d) too little - must be >= 0" % save_level)
+
+ return root_folder