From: christian <na...@us...> - 2005-02-14 18:48:33
|
Update of /cvsroot/collective/ATBookmarks In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24982 Modified Files: ATBookmarks.py README.txt version.txt xbelplone.py Log Message: made xbel import work, updated i18n, README Index: xbelplone.py =================================================================== RCS file: /cvsroot/collective/ATBookmarks/xbelplone.py,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- xbelplone.py 11 Feb 2005 20:24:43 -0000 1.3 +++ xbelplone.py 14 Feb 2005 18:48:17 -0000 1.4 @@ -20,28 +20,29 @@ # Further information, usage examples and current versions may be found on # http://www.stud.uni-hamburg.de/users/lennart/projects/xbelmark/ -# 2004-11-22: Modified by Nate Aune <na...@ja...> to parse the description +# 2004-11-22: Modified by Nate Aune <na...@ja...> to parse the desc # of the bookmarks as well # # You might want to change the first line to adapt it to your local # python installation +#2005-02-11 Christian Ledermann +# cleaned up code to use it with plone + import sys, string, re, time, locale, getopt, random from xml.sax import make_parser, handler, SAXException from xml.sax.saxutils import * -extractMode = 0 -noIndexMode = 0 -noTopLinksMode = 0 + class Bookmark: - def __init__(self, id="", name="", url="", description=""): + def __init__(self, id="", name="", url="", desc=""): self.id = id self.name = name self.url = url - self.description = description + self.desc = desc def __cmp__(self, other): @@ -49,25 +50,24 @@ class Folder: - def __init__(self, id="", name ="" , description=""): + def __init__(self, id="", name ="" , desc=""): self.name = name self.id = id - self.description = description - #self.name = "" + self.desc = desc self.bookmarks = [] self.subfolders = [] - def addBookmark(self, id ="", name = "", url = "", description = ""): - b = Bookmark(id, name, url, description) + def addBookmark(self, id ="", name = "", url = "", desc = ""): + b = Bookmark(id, name, url, desc) self.bookmarks.append(b) return b - def addSubfolder(self, id="", name = "", description = ""): - f = Folder(id, name, description) + def addSubfolder(self, id="", name = "", desc = ""): + f = Folder(id, name, desc) self.subfolders.append(f) return f -class MyHandler(handler.ContentHandler): +class ImportHandler(handler.ContentHandler): def __init__(self): self.title = "" @@ -76,8 +76,6 @@ self.currentFolder = None self.currentBookmark = None - self.bookmarkCount = 0 - self.folderCount = 0 def mkBookmarkId(self, anchor): """ generate a Bookmarkid from uri """ @@ -108,17 +106,15 @@ bid = attrs["id"] else: bid = 'bmf_' + str(random.randint(1000,99999)) - self.currentFolder = self.currentFolder.addSubfolder(id = bid, name="name", description="desc") - self.folderCount += 1 + self.currentFolder = self.currentFolder.addSubfolder(id = bid, name="name", desc="no description") elif name == "bookmark" and attrs.has_key("href"): if attrs.has_key("id"): bid = attrs["id"] else: bid = self.mkBookmarkId(attrs["href"]) - self.currentBookmark = self.currentFolder.addBookmark(id=bid, url=attrs["href"], description="desc") - self.bookmarkCount += 1 - + self.currentBookmark = self.currentFolder.addBookmark(id=bid, url=attrs["href"], desc="no description") + elif name == "title": self.title = "" @@ -141,21 +137,18 @@ elif name == "desc": if not self.currentBookmark is None: - self.currentBookmark.description = self.correctCharset(self.desc) + self.currentBookmark.desc = self.correctCharset(self.desc) elif not self.currentFolder is None: - self.currentFolder.description = self.correctCharset(self.desc) + self.currentFolder.desc = self.correctCharset(self.desc) def characters(self, content): - self.title += content - + self.title += content + self.desc += content + def correctCharset(self, s): return unicode(s) #unicode(s.encode("iso8859-1"), "utf-8") - -def usage(): - print "%s [-e] [-i] [-h] [-t]\n -e Extract mode (disables HTML headers)\n -i No index mode\n -h Help mode\n -t No top links" % sys.argv[0] - def main(): pass Index: version.txt =================================================================== RCS file: /cvsroot/collective/ATBookmarks/version.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- version.txt 11 Feb 2005 20:24:43 -0000 1.5 +++ version.txt 14 Feb 2005 18:48:17 -0000 1.6 @@ -1 +1 @@ -1.02.31 +1.03 Index: README.txt =================================================================== RCS file: /cvsroot/collective/ATBookmarks/README.txt,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- README.txt 23 Nov 2004 21:01:13 -0000 1.8 +++ README.txt 14 Feb 2005 18:48:17 -0000 1.9 @@ -1,5 +1,7 @@ ATBookmarks -- Manage your Bookmarks online + Taking your bookmarks back where they belong: into the web ;) + Bookmarks have one major drawback. They are local to the machine. Active internet users using more then one PC/OS need to store and access their bookmarks online. Other Programs like del.icio.us , sitebar , stumbleupon or oneview address this issue as well and @@ -12,18 +14,14 @@ Prerequisites - * Zope 2.6.2+ (www.zope.org) (tested with Zope 2.7.1) + * Zope 2.6.2+ (www.zope.org) (tested with Zope 2.7.1, 2.7.3 ) * CMF 1.4.x+ (cmf.zope.org) (tested with cmf 1.4.4) - * Plone 2.0+ (www.plone.org) (tested with plone 2.0.3) + * Plone 2.0+ (www.plone.org) (tested with plone 2.0.3, 2.0.5) * ArcheTypes 1.2.5rc4+ (http://sourceforge.net/projects/archetypes/) - * ATContentTypes 0.2-rc3 (http://sourceforge.net/projects/collective/) - Only necessary for the XBEL import feature. If you want to make it backwards - compatible with old style CMF content types, the method to look at is - setRemoteUrl which only works with ATCT, not CMF. I only tested this product with Linux, but hopefully it will work on M$ windoze as well (feedback will be apreciated) @@ -88,9 +86,11 @@ Replace the Favorites folder with a BookmarkFolder - The Favorits Folder in Plone is a nice thing but not really of much use. In none of the Sites I have set up members are really using it. + The Favorits Folder in Plone is a nice thing but not really of much use. +In none of the Sites I have set up members are really using it. -If you want to replace that special folder with a BookmarkFolder all you have to do is to customize the 'addtoFavorites' Python Script and replace 'Folder' with 'BookmarkFolder' i.e:: +If you want to replace that special folder with a BookmarkFolder all you have to do is to +customize the 'addtoFavorites' Python Script and replace 'Folder' with 'BookmarkFolder' i.e:: if not hasattr(homeFolder, 'Favorites'): homeFolder.invokeFactory('BookmarkFolder', id='Favorites') @@ -105,14 +105,28 @@ your favorite browser by appending xbel e.g. (http://www.maenner-club.de/Links/xbel) to your BookmarkFolder url. -Import of existing Bookmarks +Firefox - Though import does not come out of the box with this product you can import -your existing bookmarks with ftp or webdav using: -http://plone.org/documentation/howto/BulkImportLinksFromYourBrowserIntoPlone + Bookmarks Synchronizer is a Mozilla Firefox extension that lets you connect to an FTP/HTTP +server and synchronize your bookmarks that are stored in an XML file. +Setup is easy; just write in your server address, username, password and a name for the +XML file (by default called xbel.xml). A pagetemplate xbel.xml is included in +ATBookmarks to get the maximum performance out of this product. +It has a cool auto-update feature so that when you start up Firefox, +it will download an XBEL file from a remote (or local) server. +It can easily be used with ATBookmarks (Download only, Upload TTP). +http://extensionroom.mozdev.org/more-info/booksync + +Import of existing Bookmarks + + You can import your bookmarks by simply uploading an xbel conformant bookmark file. +Bookmarks or bookmarkfolders without an id will get an automatically generated one. +Duplicate or otherwise illegal ids are silently ignored, so check if everthing went smooth. +This implies that you CANNOT update bookmarks by uploading your xbel file again. -For feedback, bugreports, help contact na...@ma..., please let me know when you use it on your site. +For feedback, bugreports, help contact na...@ma..., +please let me know when you use it on your site. License Index: ATBookmarks.py =================================================================== RCS file: /cvsroot/collective/ATBookmarks/ATBookmarks.py,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- ATBookmarks.py 11 Feb 2005 20:45:13 -0000 1.7 +++ ATBookmarks.py 14 Feb 2005 18:48:17 -0000 1.8 @@ -2,8 +2,8 @@ from Products.CMFCore import CMFCorePermissions from xml.sax import make_parser, handler, SAXException from xml.sax.saxutils import * -from xbelplone import MyHandler -import whrandom, string +from xbelplone import ImportHandler +import random, string from DateTime import DateTime """ @@ -83,7 +83,7 @@ def fromFile(self, stream): """ Import bookmarks from a file into this folder """ - m = MyHandler() + m = ImportHandler() parser = make_parser() parser.setContentHandler(m) parser.parse(stream) @@ -97,18 +97,24 @@ try: id = b.id except: - id = id = str(DateTime().strftime('%Y%m%d%H%M%S')) + "." +str(whrandom.random())[2:] + id = 'lnk_' + str(random.randint(1000,99999)) title=b.name url=b.url - description=b.description + description=b.desc try: ploneFolder.invokeFactory('Link', id=id, title=title, remote_url=url, description=description) except: pass for f in xbelFolder.subfolders: - ploneFolder.invokeFactory('BookmarkFolder', id=f.id, title=f.name, description=f.description) - folder = getattr(ploneFolder, f.id) - self.convertFolder(folder, f) + try: + ploneFolder.invokeFactory('BookmarkFolder', id=f.id, title=f.name, description=f.desc) + except: + pass + try: + folder = getattr(ploneFolder, f.id) + self.convertFolder(folder, f) + except: + pass registerType(BookmarkFolder) |