here is my second attempt for chromium bookmarks plugin.. :) I hope it's in time for version c17. -- Francesco Marella <francesco marella gmail com>
From 102785e4741b78c39d8380a940c92711e1681a48 Mon Sep 17 00:00:00 2001 From: Francesco Marella <francesco marella gmail com> Date: Fri, 23 Oct 2009 12:02:57 +0200 Subject: [PATCH] + chromium bookmarks plugin Index of Chromium Bookmarks --- kupfer/plugin/chromium.py | 48 ++++++++++++++++++++++++++++ kupfer/plugin/chromium_support.py | 62 +++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 0 deletions(-) create mode 100644 kupfer/plugin/chromium.py create mode 100644 kupfer/plugin/chromium_support.py diff --git a/kupfer/plugin/chromium.py b/kupfer/plugin/chromium.py new file mode 100644 index 0000000..62fa17c --- /dev/null +++ b/kupfer/plugin/chromium.py @@ -0,0 +1,48 @@ +import os + +from kupfer.objects import Leaf, Action, Source, AppLeafContentMixin +from kupfer.objects import UrlLeaf +from kupfer import plugin_support + +__kupfer_name__ = _("Chromium Bookmarks") +__kupfer_sources__ = ("BookmarksSource", ) +__kupfer_contents__ = ("BookmarksSource", ) +__description__ = _("Index of Chromium bookmarks") +__version__ = "" +__author__ = "Francesco Marella <francesco marella gmail com>" + +__kupfer_settings__ = plugin_support.PluginSettings( + plugin_support.SETTING_PREFER_CATALOG, +) + +class BookmarksSource (AppLeafContentMixin, Source): + appleaf_content_id = ("chromium-browser") + def __init__(self): + super(BookmarksSource, self).__init__(_("Chromium Bookmarks")) + + def _get_chromium_items(self, fpath): + """Parse Chromium' bookmarks backups""" + from chromium_support import get_bookmarks + self.output_debug("Parsing", fpath) + bookmarks = get_bookmarks(fpath) + for book in bookmarks: + yield UrlLeaf(book["url"], book["name"]) + + def get_items(self): + from chromium_support import get_chromium_home_file + fpath = get_chromium_home_file("Bookmarks") + if fpath: + try: + return self._get_chromium_items(fpath) + except Exception, exc: + self.output_error(exc) + + self.output_error("No Chromium bookmarks file found") + return [] + + def get_description(self): + return _("Index of Chromium bookmarks") + def get_icon_name(self): + return "chromium-browser" + def provides(self): + yield UrlLeaf diff --git a/kupfer/plugin/chromium_support.py b/kupfer/plugin/chromium_support.py new file mode 100644 index 0000000..675a0eb --- /dev/null +++ b/kupfer/plugin/chromium_support.py @@ -0,0 +1,62 @@ +# -*- coding: UTF-8 -*- + +from __future__ import with_statement +try: + import cjson + json_decoder = cjson.decode +except ImportError: + import json + json_decoder = json.loads +from os.path import join, expanduser, exists, basename + +def get_chromium_home_file(needed_file): + chromium_dir = expanduser("~/.config/chromium/Default/") + if not exists(chromium_dir): + # no break + return None + + return join(chromium_dir, needed_file) + +def get_bookmarks(bookmarks_file): + # construct and configure the parser + if not bookmarks_file: + return [] + + with open(bookmarks_file) as f: + content = f.read().decode("UTF-8") + root = json_decoder(content) + + # make a dictionary of unique bookmarks + bmap = {} + + def bmap_add(bmark, bmap): + if bmark["id"] not in bmap: + bmap[bmark["id"]] = bmark + + CONTAINER = "folder" + UNWANTED_SCHEME = ("data", "place", "javascript") + + def is_container(ch): + return ch["type"] == CONTAINER + def is_bookmark(ch): + return ch.get("url") + def is_good(ch): + return not ch["url"].split(":", 1)[0] in UNWANTED_SCHEME + + folders = [] + + # add some folders + folders.extend(root['roots']['bookmark_bar']['children']) + folders.extend(root['roots']['other']['children']) + + for item in folders: + if is_bookmark(item) and is_good(item): + bmap_add(item, bmap) + if is_container(item): + folders.extend(item["children"]) + + return bmap.values() + +if __name__ == "__main__": + fpath = get_chromium_home_file("Bookmarks") + print "Parsed # bookmarks:", len(list(get_bookmarks(fpath))) -- 1.6.3.3
Attachment:
signature.asc
Description: Questa =?ISO-8859-1?Q?=E8?= una parte del messaggio firmata digitalmente