home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / deskbar-applet / handlers / desklicious.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-08-31  |  5.7 KB  |  131 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import os
  5. import cgi
  6. import os.path as os
  7. import deskbar
  8. import deskbar.Match as deskbar
  9. import deskbar.Handler as deskbar
  10. import gnomevfs
  11. import gtk
  12. import gconf
  13. from gettext import gettext as _
  14. import xml.dom.minidom as xml
  15. import urllib
  16. from deskbar.defs import VERSION
  17. GCONF_DELICIOUS_USER = deskbar.GCONF_DIR + '/desklicious/user'
  18. DEFAULT_QUERY_TAG = 'http://del.icio.us/rss/%s/%s'
  19. QUERY_DELAY = 1
  20.  
  21. def _check_requirements():
  22.     if not deskbar.GCONF_CLIENT.get_string(GCONF_DELICIOUS_USER):
  23.         return (deskbar.Handler.HANDLER_HAS_REQUIREMENTS, _('You need to configure your del.icio.us account.'), _on_config_account)
  24.     else:
  25.         return (deskbar.Handler.HANDLER_IS_CONFIGURABLE, _('You can modify your del.icio.us account.'), _on_config_account)
  26.  
  27. HANDLERS = {
  28.     'DeliciousHandler': {
  29.         'name': _('del.icio.us Bookmarks'),
  30.         'description': _('Search your del.icio.us bookmarks by tag name'),
  31.         'requirements': _check_requirements,
  32.         'version': VERSION } }
  33.  
  34. def _on_config_account(dialog):
  35.     dialog = gtk.Dialog(_('del.icio.us Account'), dialog, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
  36.     table = gtk.Table(rows = 2, columns = 2)
  37.     table.attach(gtk.Label(_('Enter your del.icio.us username below')), 0, 2, 0, 1)
  38.     user_entry = gtk.Entry()
  39.     t = deskbar.GCONF_CLIENT.get_string(GCONF_DELICIOUS_USER)
  40.     if t != None:
  41.         user_entry.set_text(t)
  42.     
  43.     table.attach(gtk.Label(_('Username: ')), 0, 1, 1, 2)
  44.     table.attach(user_entry, 1, 2, 1, 2)
  45.     table.show_all()
  46.     dialog.vbox.add(table)
  47.     response = dialog.run()
  48.     dialog.destroy()
  49.     if response == gtk.RESPONSE_ACCEPT and user_entry.get_text() != '':
  50.         deskbar.GCONF_CLIENT.set_string(GCONF_DELICIOUS_USER, user_entry.get_text())
  51.     
  52.  
  53.  
  54. class DeliciousMatch(deskbar.Match.Match):
  55.     
  56.     def __init__(self, handler, url = None, tags = None, author = None, **args):
  57.         deskbar.Match.Match.__init__(self, handler, **args)
  58.         self.url = url
  59.         self.tags = tags
  60.         self.author = author
  61.  
  62.     
  63.     def get_verb(self):
  64.         return "<b>%(name)s</b>\n<span size='small' foreground='grey'>%(tags)s</span>"
  65.  
  66.     
  67.     def get_name(self, text = None):
  68.         return {
  69.             'name': cgi.escape(self.name),
  70.             'tags': cgi.escape(' '.join(self.tags)) }
  71.  
  72.     
  73.     def action(self, text = None):
  74.         gnomevfs.url_show(self.url)
  75.  
  76.     
  77.     def get_category(self):
  78.         return 'web'
  79.  
  80.     
  81.     def get_hash(self, text = None):
  82.         return self.url
  83.  
  84.  
  85.  
  86. class DeliciousHandler(deskbar.Handler.AsyncHandler):
  87.     
  88.     def __init__(self):
  89.         deskbar.Handler.AsyncHandler.__init__(self, 'delicious.png')
  90.         self._delicious = DeliciousTagQueryEngine(self)
  91.  
  92.     
  93.     def query(self, tag):
  94.         self.check_query_changed(timeout = QUERY_DELAY)
  95.         self.check_query_changed()
  96.         print 'Asking del.icio.us tags for %s' % tag
  97.         posts = self._delicious.get_posts_by_tag(tag)
  98.         self.check_query_changed(timeout = QUERY_DELAY)
  99.         print 'Returning del.icio.us result', posts
  100.         return posts
  101.  
  102.  
  103.  
  104. class DeliciousTagQueryEngine:
  105.     
  106.     def __init__(self, handler):
  107.         '''We need use the globals DELICIOUS_USER and DELICIOUS_PASS'''
  108.         self.handler = handler
  109.         self._user = deskbar.GCONF_CLIENT.get_string(GCONF_DELICIOUS_USER)
  110.         deskbar.GCONF_CLIENT.notify_add(GCONF_DELICIOUS_USER, (lambda x, y, z, a: self.on_username_change(z.value)))
  111.  
  112.     
  113.     def on_username_change(self, value):
  114.         if value != None and value.type == gconf.VALUE_STRING:
  115.             self._user = value.get_string()
  116.         
  117.  
  118.     
  119.     def get_posts_by_tag(self, tag):
  120.         url = DEFAULT_QUERY_TAG % (urllib.quote_plus(self._user), urllib.quote_plus(tag))
  121.         stream = urllib.urlopen(url)
  122.         dom = xml.dom.minidom.parse(stream)
  123.         stream.close()
  124.         posts = []
  125.         for item in dom.getElementsByTagName('item'):
  126.             posts.append(DeliciousMatch(self.handler, name = item.getElementsByTagName('title')[0].firstChild.nodeValue, url = item.getElementsByTagName('link')[0].firstChild.nodeValue, tags = item.getElementsByTagName('dc:subject')[0].firstChild.nodeValue.split(' '), author = item.getElementsByTagName('dc:creator')[0].firstChild.nodeValue))
  127.         
  128.         return posts
  129.  
  130.  
  131.