~ubuntu-branches/ubuntu/lucid/awn-extras-applets/lucid

« back to all changes in this revision

Viewing changes to applets/maintained/feeds/prefs.py

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne
  • Date: 2010-03-30 20:26:40 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20100330202640-vza3bdnv9gc9bg5z
Tags: 0.4.0~rc1-0ubuntu1
* New upstream release (rc1) (LP: #551309)
 - Stack applet close on click (LP: #261520)
* debian/patches/
 - 03-remove-cairo-menu-pref.patch: From upstream (r1244 + r1245 + r1252),
   remove menu entry for cairo-menu preferences, it's not implemented
   (LP: #511254)
 - 04-tomboy-threading-free.patch: From upstream (r1246), remove threading to
   make the applet working. 
* debian/*.install: Update installation location of comics and digital 
  applets.
* debian/control: 
 - Move digital applet from python to C, and add proper Replaces.
 - Add Replaces for awn-applets-c-core to handle migration from 0.3.2.2.
   (LP: #524559)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#! /usr/bin/python
2
2
#
3
 
# Copyright (c) 2009 Sharkbaitbobby <sharkbaitbobby+awn@gmail.com>
 
3
# Copyright (c) 2009, 2010 Sharkbaitbobby <sharkbaitbobby+awn@gmail.com>
4
4
#
5
5
# This library is free software; you can redistribute it and/or
6
6
# modify it under the terms of the GNU Lesser General Public
21
21
import os
22
22
import urllib
23
23
import urllib2
 
24
import time
24
25
 
25
26
import pygtk
26
27
pygtk.require('2.0')
104
105
        buttons_hbox.pack_end(add_button, False)
105
106
        buttons_hbox.pack_end(self.remove_button, False)
106
107
 
107
 
        show_favicons_check = gtk.CheckButton(_("_Show website icons in dialog"))
 
108
        show_favicons_check = gtk.CheckButton(_("_Show website icons"))
108
109
        if self.applet.client.get_bool(GROUP_DEFAULT, 'show_favicons'):
109
110
            show_favicons_check.set_active(True)
110
111
        show_favicons_check.connect('toggled', self.check_toggled, 'show_favicons')
249
250
            if isinstance(feed, classes.WebFeed):
250
251
                sensitive = True
251
252
 
252
 
            try:
253
 
                if feed.icon.find('gtk://') == 0:
254
 
                    pb = self.icon_theme.load_icon(feed.icon[6:], 16, 0)
255
 
                    pb = classes.get_16x16(pb)
256
 
 
257
 
                else:
258
 
                    pb = gtk.gdk.pixbuf_new_from_file_at_size(feed.icon, 16, 16)
259
 
            except:
 
253
            pb = self.applet.get_favicon(feed.icon)
 
254
            if pb == self.applet.web_image:
260
255
                pb = None
261
256
 
262
257
            title = [feed.title, _("Loading...")][feed.title == '']
336
331
 
337
332
        self.google_source = None
338
333
        for source in self.applet.feeds.values():
339
 
            if isinstance(source, classes.GoogleReader):
 
334
            if isinstance(source, classes.GoogleFeed):
340
335
                self.google_source = source
341
336
                break
342
337
 
 
338
        self.site_images = {}
 
339
 
343
340
        self.set_border_width(12)
344
341
        self.set_title(_("Add Feed"))
345
342
        self.set_icon_from_file(icon_path)
355
352
        pb = classes.get_16x16(pb)
356
353
 
357
354
        search_radio = gtk.RadioButton(None)
358
 
        search_radio.add(get_radio_hbox(pb, _("Search")))
 
355
        search_radio.add(self.get_radio_hbox(pb, _("Search")))
359
356
        if not self.google_source:
360
357
            search_radio.set_sensitive(False)
361
 
            search_radio.set_tooltip_text(_("You must sign in to Google Reader to search for feeds."))
 
358
            search_radio.set_tooltip_text(_("You must sign in to a Google service to search for feeds."))
362
359
 
363
360
        #Regular RSS/Atom feed
364
361
        try:
367
364
        except:
368
365
            pb = gtk.gdk.pixbuf_new_from_file_at_size(icon_path, 16, 16)
369
366
        webfeed_radio = gtk.RadioButton(search_radio, None)
370
 
        webfeed_radio.add(get_radio_hbox(pb, _("RSS/Atom")))
371
 
 
372
 
        #Google Reader
 
367
        webfeed_radio.add(self.get_radio_hbox(pb, _("RSS/Atom")))
 
368
 
 
369
        #Google (Reader and Wave)
 
370
        pb = self.applet.get_favicon('www.google.com', True)
 
371
 
 
372
        google_radio = gtk.RadioButton(search_radio, None)
 
373
        google_radio.add(self.get_radio_hbox(pb, classes.GoogleFeed.title, 'www.google.com'))
 
374
 
 
375
        #Google Reader (CheckButton)
373
376
        pb = get_greader_icon()
374
377
 
375
 
        greader_radio = gtk.RadioButton(search_radio, None)
376
 
        greader_radio.add(get_radio_hbox(pb, classes.GoogleReader.title))
 
378
        self.greader_check = gtk.CheckButton()
 
379
        self.greader_check.add(self.get_radio_hbox(pb, classes.GoogleReader.title, 'google-reader'))
 
380
        self.greader_check.set_active(True)
 
381
        self.greader_check.connect('toggled', self.check_toggled)
 
382
 
 
383
        #Google Wave
 
384
        pb = self.applet.get_favicon('wave.google.com', True)
 
385
 
 
386
        self.gwave_check = gtk.CheckButton()
 
387
        self.gwave_check.add(self.get_radio_hbox(pb, classes.GoogleWave.title, 'wave.google.com'))
 
388
        self.gwave_check.connect('toggled', self.check_toggled)
 
389
 
 
390
        google_vbox = gtk.VBox(False, 3)
 
391
        google_vbox.pack_start(self.greader_check, False)
 
392
        google_vbox.pack_start(self.gwave_check, False)
 
393
        google_vbox.show_all()
 
394
 
 
395
        self.google_align = gtk.Alignment(0.0, 0.0, 1.0, 0.0)
 
396
        self.google_align.set_padding(0, 0, 12, 0)
 
397
        self.google_align.add(google_vbox)
 
398
        self.google_align.set_no_show_all(True)
377
399
 
378
400
        #Reddit Inbox
379
 
        pb = get_favicon('www.reddit.com', self.applet)
 
401
        pb = self.applet.get_favicon('www.reddit.com', True)
380
402
 
381
403
        reddit_radio = gtk.RadioButton(search_radio, None)
382
 
        reddit_radio.add(get_radio_hbox(pb, classes.Reddit.title))
 
404
        reddit_radio.add(self.get_radio_hbox(pb, classes.Reddit.title, 'www.reddit.com'))
383
405
 
384
406
        #Twitter Timeline and/or Replies
385
407
        pb = gtk.gdk.pixbuf_new_from_file_at_size(twitter_path, 16, 16)
386
408
 
387
409
        twitter_radio = gtk.RadioButton(search_radio, None)
388
 
        twitter_radio.add(get_radio_hbox(pb, _("Twitter")))
 
410
        twitter_radio.add(self.get_radio_hbox(pb, _("Twitter")))
389
411
 
390
412
        self.twitter_timeline_check = gtk.CheckButton(_("Timeline"))
391
413
        self.twitter_timeline_check.set_active(True)
396
418
        self.twitter_replies_check.connect('toggled', self.check_toggled)
397
419
        self.twitter_replies_check.show()
398
420
 
399
 
        self.twitter_vbox = gtk.VBox(False, 3)
400
 
        self.twitter_vbox.pack_start(self.twitter_timeline_check, False)
401
 
        self.twitter_vbox.pack_start(self.twitter_replies_check, False)
402
 
        self.twitter_vbox.set_no_show_all(True)
 
421
        twitter_vbox = gtk.VBox(False, 3)
 
422
        twitter_vbox.pack_start(self.twitter_timeline_check, False)
 
423
        twitter_vbox.pack_start(self.twitter_replies_check, False)
 
424
        twitter_vbox.show_all()
 
425
 
 
426
        self.twitter_align = gtk.Alignment(0.0, 0.0, 1.0, 0.0)
 
427
        self.twitter_align.set_padding(0, 0, 12, 0)
 
428
        self.twitter_align.add(twitter_vbox)
 
429
        self.twitter_align.set_no_show_all(True)
403
430
 
404
431
        num = 0
405
 
        for radio in (search_radio, webfeed_radio, greader_radio, reddit_radio, twitter_radio):
406
 
            radio.connect('toggled', self.radio_toggled)
407
 
            radio.num = num
408
 
            source_vbox.pack_start(radio, False, False, 0)
409
 
 
410
 
            num += 1
411
 
 
412
 
        source_vbox.pack_start(self.twitter_vbox, False, False, 0)
 
432
        for widget in (search_radio, webfeed_radio, google_radio, self.google_align, reddit_radio,
 
433
            twitter_radio, self.twitter_align):
 
434
            if isinstance(widget, gtk.RadioButton):
 
435
                widget.connect('toggled', self.radio_toggled)
 
436
                widget.num = num
 
437
                num += 1
 
438
 
 
439
            source_vbox.pack_start(widget, False, False, 0)
413
440
 
414
441
        source_hbox = gtk.HBox(False, 6)
415
442
        source_hbox.pack_start(source_label, False, False)
576
603
 
577
604
        self.show_all()
578
605
 
 
606
        #Update any downloaded favicons if necessary
 
607
        for siteid in ('www.google.com', 'google-reader', 'wave.google.com', 'www.reddit.com'):
 
608
            self.applet.fetch_favicon(self.fetched_favicon, siteid, siteid)
 
609
 
 
610
    #The favicon was fetched
 
611
    def fetched_favicon(self, siteid, data):
 
612
        self.applet.favicons[siteid] = long(time.time())
 
613
 
 
614
        fp = open(os.path.join(cache_dir, siteid + '.ico'), 'w+')
 
615
        fp.write(data)
 
616
        fp.close()
 
617
 
 
618
        pb = self.applet.get_favicon(siteid, True)
 
619
 
 
620
        if siteid == 'google-reader':
 
621
            self.set_icon(pb)
 
622
 
 
623
        if siteid in self.site_images:
 
624
            self.site_images[siteid].set_from_pixbuf(pb)
 
625
 
579
626
    #Add button clicked
580
627
    def almost_add_feed(self, button):
581
628
        #URL for RSS/Atom
589
636
            username = self.user_entry.get_text()
590
637
            password = self.pass_entry.get_text()
591
638
 
 
639
            #Google
592
640
            if self.num == 2:
593
 
                self.applet.add_feed('google-reader-' + username, None, username, password)
594
 
 
595
 
            elif self.num == 3:
 
641
                if self.greader_check.get_active():
 
642
                    self.applet.add_feed('google-reader-' + username, None, username, password)
 
643
 
 
644
                if self.gwave_check.get_active():
 
645
                    self.applet.add_feed('google-wave-' + username, None, username, password)
 
646
 
 
647
            #Reddit
 
648
            if self.num == 3:
596
649
                self.applet.add_feed('reddit-' + username, None, username, password)
597
650
 
598
651
            elif self.num == 4:
621
674
        elif entry == self.url_entry:
622
675
            self.do_sensitive(self.add_button, (entry, ))
623
676
 
624
 
        #Google Reader or Reddit
625
 
        elif self.num in (2, 3):
 
677
        elif self.num == 2:
 
678
            self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
 
679
                (self.greader_check, self.gwave_check))
 
680
 
 
681
        elif self.num == 4:
 
682
            self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
 
683
                (self.twitter_timeline_check, self.twitter_replies_check))
 
684
 
 
685
        else:
626
686
            self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry))
627
687
 
628
 
        #Twitter
629
 
        elif self.num == 4:
630
 
            self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry), \
631
 
                (self.twitter_timeline_check, self.twitter_replies_check))
632
 
 
633
688
    def radio_toggled(self, radio):
634
689
        if not radio.get_active():
635
690
            return False
660
715
            self.user_hbox.show()
661
716
            self.pass_hbox.show()
662
717
 
663
 
            if self.num == 4:
664
 
                self.twitter_vbox.show()
665
 
 
666
 
                self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry), \
 
718
            if self.num == 2:
 
719
                self.google_align.show()
 
720
 
 
721
                self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
 
722
                    (self.greader_check, self.gwave_check))
 
723
 
 
724
            elif self.num == 4:
 
725
                self.twitter_align.show()
 
726
 
 
727
                self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
667
728
                    (self.twitter_timeline_check, self.twitter_replies_check))
668
729
 
669
730
            else:
670
731
                self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry))
671
732
 
672
733
    def check_toggled(self, check):
673
 
        if check in (self.twitter_timeline_check, self.twitter_replies_check):
674
 
            self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry), \
 
734
        if check in (self.greader_check, self.gwave_check):
 
735
            self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
 
736
                (self.greader_check, self.gwave_check))
 
737
 
 
738
        elif check in (self.twitter_timeline_check, self.twitter_replies_check):
 
739
            self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
675
740
                (self.twitter_timeline_check, self.twitter_replies_check))
676
741
 
677
742
    def close(self, button):
778
843
 
779
844
        self.results_sw.hide()
780
845
 
781
 
        self.twitter_vbox.hide()
 
846
        self.google_align.hide()
 
847
        self.twitter_align.hide()
782
848
 
783
849
    #All entries need to have non-empty text
784
850
    #At least one check needs to be active
799
865
 
800
866
        button.set_sensitive(False)
801
867
 
 
868
    def get_radio_hbox(self, pb, text, siteid=None):
 
869
        image = gtk.image_new_from_pixbuf(pb)
 
870
 
 
871
        if siteid is not None:
 
872
            self.site_images[siteid] = image
 
873
 
 
874
        label = gtk.Label(text)
 
875
 
 
876
        hbox = gtk.HBox(False, 3)
 
877
        hbox.pack_start(image, False)
 
878
        hbox.pack_start(label, False)
 
879
 
 
880
        return hbox
 
881
 
802
882
#Try the downloaded favicon first. If it doesn't work, use the blue RSS icon
803
883
def get_greader_icon():
804
884
    try:
808
888
 
809
889
    return pb
810
890
 
811
 
def get_favicon(siteid, applet):
812
 
    try:
813
 
        pb = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(cache_dir, siteid + '.ico'), 16, 16)
814
 
    except:
815
 
        pb = applet.web_image
816
 
 
817
 
    return pb
818
 
 
819
 
def get_radio_hbox(pb, txt):
820
 
    img = gtk.image_new_from_pixbuf(pb)
821
 
 
822
 
    label = gtk.Label(txt)
823
 
 
824
 
    hbox = gtk.HBox(False, 3)
825
 
    hbox.pack_start(img, False)
826
 
    hbox.pack_start(label, False)
827
 
 
828
 
    return hbox
829
 
 
830
891
def html_safe(s):
831
892
    s = s.replace('&', '&amp;').replace('<', '&lt;')
832
893
    s = s.replace('>', '&gt;').replace('"', '&quot;')