home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.5)
-
- import xml.sax as xml
- from os.path import join, expanduser, exists
- from gettext import gettext as _
- import gtk
- import deskbar
- import deskbar.Indexer as deskbar
- import deskbar.Handler as deskbar
- from deskbar.Watcher import FileWatcher
- from deskbar.BrowserMatch import get_url_host, is_preferred_browser, on_customize_search_shortcuts, on_entry_key_press, load_shortcuts
- from deskbar.BrowserMatch import BrowserSmartMatch, BrowserMatch
- from deskbar.defs import VERSION
-
- def _check_requirements():
- if is_preferred_browser('epiphany'):
- return (deskbar.Handler.HANDLER_IS_HAPPY, None, None)
- else:
- return (deskbar.Handler.HANDLER_IS_NOT_APPLICABLE, 'Epiphany is not your preferred browser, not using it.', None)
-
-
- def _check_requirements_search():
-
- callback = lambda dialog: on_customize_search_shortcuts(smart_bookmarks, shortcuts_to_smart_bookmarks_map)
- if is_preferred_browser('epiphany'):
- return (deskbar.Handler.HANDLER_IS_CONFIGURABLE, _('You can set shortcuts for your searches.'), callback)
- else:
- return (deskbar.Handler.HANDLER_IS_NOT_APPLICABLE, 'Epiphany is not your preferred browser, not using it.', None)
-
- HANDLERS = {
- 'EpiphanyBookmarksHandler': {
- 'name': _('Web Bookmarks'),
- 'description': _('Open your web bookmarks by name'),
- 'requirements': _check_requirements,
- 'version': VERSION },
- 'EpiphanyHistoryHandler': {
- 'name': _('Web History'),
- 'description': _('Open your web history by name'),
- 'requirements': _check_requirements,
- 'version': VERSION },
- 'EpiphanySearchHandler': {
- 'name': _('Web Searches'),
- 'description': _("Search the web via your browser's search settings"),
- 'requirements': _check_requirements_search,
- 'version': VERSION } }
- EPHY_BOOKMARKS_FILE = expanduser('~/.gnome2/epiphany/bookmarks.rdf')
- EPHY_HISTORY_FILE = expanduser('~/.gnome2/epiphany/ephy-history.xml')
- favicon_cache = None
- bookmarks = None
- smart_bookmarks = None
- shortcuts_to_smart_bookmarks_map = { }
-
- class EpiphanyHandler(deskbar.Handler.Handler):
-
- def __init__(self, watched_file, callback, icon = 'stock_bookmark'):
- deskbar.Handler.Handler.__init__(self, icon)
- self.watched_file = watched_file
- self.watch_callback = callback
-
-
- def initialize(self):
- global favicon_cache
- if favicon_cache == None:
- favicon_cache = EpiphanyFaviconCacheParser().get_cache()
-
- if not hasattr(self, 'watcher'):
- self.watcher = FileWatcher()
- self.watcher.connect(('changed',), (lambda watcher, f: self.watch_callback()))
-
- self.watcher.add(self.watched_file)
-
-
- def stop(self):
- if hasattr(self, 'watcher'):
- self.watcher.remove(self.watched_file)
- del self.watcher
-
-
-
-
- class EpiphanyBookmarksHandler(EpiphanyHandler):
-
- def __init__(self):
- EpiphanyHandler.__init__(self, (EPHY_BOOKMARKS_FILE,), (lambda : self._parse_bookmarks(True)))
-
-
- def initialize(self):
- EpiphanyHandler.initialize(self)
- self._parse_bookmarks()
-
-
- def _parse_bookmarks(self, force = False):
- global bookmarks, smart_bookmarks
- if force or bookmarks == None:
- parser = EpiphanyBookmarksParser(self, favicon_cache)
- bookmarks = parser.get_indexer()
- smart_bookmarks = parser.get_smart_bookmarks()
- load_shortcuts(smart_bookmarks, shortcuts_to_smart_bookmarks_map)
-
-
-
- def query(self, query):
- return bookmarks.look_up(query)[:deskbar.DEFAULT_RESULTS_PER_HANDLER]
-
-
-
- class EpiphanySearchHandler(EpiphanyBookmarksHandler):
-
- def __init__(self):
- EpiphanyBookmarksHandler.__init__(self)
-
-
- def on_key_press(self, query, shortcut):
- return on_entry_key_press(query, shortcut, shortcuts_to_smart_bookmarks_map)
-
-
- def query(self, query):
- x = query.find(' ')
- if x != -1:
- prefix = query[:x]
-
- try:
- b = shortcuts_to_smart_bookmarks_map[prefix]
- text = query[x + 1:]
- return [
- BrowserSmartMatch(b.get_handler(), b.name, b.url, prefix, b, icon = b.icon)]
- except KeyError:
- pass
- except:
- None<EXCEPTION MATCH>KeyError
-
-
- None<EXCEPTION MATCH>KeyError
- return smart_bookmarks
-
-
-
- class EpiphanyHistoryHandler(EpiphanyHandler):
-
- def __init__(self):
- EpiphanyHandler.__init__(self, EPHY_HISTORY_FILE, self._parse_history, 'epiphany-history.png')
- self._history = None
-
-
- def initialize(self):
- EpiphanyHandler.initialize(self)
- self._parse_history()
-
-
- def _parse_history(self):
- self._history = EpiphanyHistoryParser(self, favicon_cache).get_indexer()
-
-
- def query(self, query):
- return self._history.look_up(query)[:deskbar.DEFAULT_RESULTS_PER_HANDLER]
-
-
-
- class EpiphanyBookmarksParser(xml.sax.ContentHandler):
-
- def __init__(self, handler, cache):
- xml.sax.ContentHandler.__init__(self)
- self.handler = handler
- self.chars = ''
- self.title = None
- self.href = None
- self.smarthref = None
- self._indexer = deskbar.Indexer.Indexer()
- self._smart_bookmarks = []
- self._cache = cache
- self._index_bookmarks()
-
-
- def get_indexer(self):
- '''
- \t\tReturns a completed indexer with the contents of bookmark file
- \t\t'''
- return self._indexer
-
-
- def get_smart_bookmarks(self):
- '''
- \t\tReturn a list of EpiphanySmartMatch instances representing smart bookmarks
- \t\t'''
- return self._smart_bookmarks
-
-
- def _index_bookmarks(self):
- if exists(EPHY_BOOKMARKS_FILE):
- parser = xml.sax.make_parser()
- parser.setContentHandler(self)
- parser.parse(EPHY_BOOKMARKS_FILE)
-
-
-
- def characters(self, chars):
- self.chars = self.chars + chars
-
-
- def startElement(self, name, attrs):
- self.chars = ''
- if name == 'item':
- self.title = None
- self.href = None
- self.smarthref = None
-
-
-
- def endElement(self, name):
- if name == 'title':
- self.title = self.chars.encode('utf8')
- elif name == 'link':
- self.href = self.chars.encode('utf8')
- elif name == 'ephy:smartlink':
- self.smarthref = self.chars.encode('utf8')
- elif name == 'item':
- if self.href.startswith('javascript:'):
- return None
-
- icon = None
- host = get_url_host(self.href)
- if host in self._cache:
- icon = self._cache[host]
-
- bookmark = BrowserMatch(self.handler, self.title, self.href, icon = icon)
- if self.smarthref != None:
- bookmark = BrowserSmartMatch(self.handler, self.title, self.smarthref, icon = icon, bookmark = bookmark)
- self._smart_bookmarks.append(bookmark)
- else:
- self._indexer.add('%s %s' % (self.title, self.href), bookmark)
-
-
-
-
- class EpiphanyFaviconCacheParser(xml.sax.ContentHandler):
-
- def __init__(self):
- xml.sax.ContentHandler.__init__(self)
- self.ephy_dir = expanduser('~/.gnome2/epiphany')
- self.filename = join(self.ephy_dir, 'ephy-favicon-cache.xml')
- self.cache = None
- self.chars = ''
- self.url = None
- self.name = None
-
-
- def get_cache(self):
- '''
- \t\tReturns a dictionary of (host, favicon path) entries where
- \t\t host is the hostname, like google.com (without www)
- \t\t favicon path is the on-disk path to the favicon image file.
- \t\t'''
- if self.cache != None:
- return self.cache
-
- self.cache = { }
- if exists(self.filename):
- parser = xml.sax.make_parser()
- parser.setContentHandler(self)
- parser.parse(self.filename)
-
- return self.cache
-
-
- def characters(self, chars):
- self.chars = self.chars + chars
-
-
- def startElement(self, name, attrs):
- self.chars = ''
- if name == 'property' and attrs['id'] == '2':
- self.url = None
-
- if name == 'property' and attrs['id'] == '3':
- self.name = None
-
-
-
- def endElement(self, name):
- if name == 'property':
- if self.url == None:
- self.url = self.chars
- elif self.name == None:
- self.name = self.chars
-
- elif name == 'node':
- host = get_url_host(self.url)
- self.cache[host] = join(self.ephy_dir, 'favicon_cache', self.name.encode('utf8'))
-
-
-
-
- class EpiphanyHistoryParser(xml.sax.ContentHandler):
-
- def __init__(self, handler, cache):
- xml.sax.ContentHandler.__init__(self)
- self.handler = handler
- self._cache = cache
- self.url = None
- self.title = None
- self.icon = None
- self._id = None
- self._indexer = deskbar.Indexer.Indexer()
- self._index_history()
-
-
- def get_indexer(self):
- '''
- \t\tReturns a completed indexer with the contents of the history file
- \t\t'''
- return self._indexer
-
-
- def _index_history(self):
- if exists(EPHY_HISTORY_FILE):
- parser = xml.sax.make_parser()
- parser.setContentHandler(self)
-
- try:
- parser.parse(EPHY_HISTORY_FILE)
- except Exception:
- e = None
- print "Couldn't parse epiphany history file:", e
- except:
- None<EXCEPTION MATCH>Exception
-
-
- None<EXCEPTION MATCH>Exception
-
-
- def characters(self, chars):
- self.chars = self.chars + chars
-
-
- def startElement(self, name, attrs):
- self.chars = ''
- if name == 'property':
- self._id = attrs['id']
-
- if name == 'node':
- self.title = None
- self.url = None
- self.icon = None
-
-
-
- def endElement(self, name):
- if name == 'property':
- if self._id == '2':
- self.title = self.chars.encode('utf8')
- elif self._id == '3':
- self.url = self.chars.encode('utf8')
- elif self._id == '9':
- self.icon = self.chars.encode('utf8')
-
- elif name == 'node':
- icon = None
- if self.icon in self._cache:
- icon = self._cache[self.icon]
-
- item = BrowserMatch(self.handler, self.title, self.url, True, icon = icon)
- self._indexer.add('%s %s' % (self.title, self.url), item)
-
-
-
-