104
105
buttons_hbox.pack_end(add_button, False)
105
106
buttons_hbox.pack_end(self.remove_button, False)
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):
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)
258
pb = gtk.gdk.pixbuf_new_from_file_at_size(feed.icon, 16, 16)
253
pb = self.applet.get_favicon(feed.icon)
254
if pb == self.applet.web_image:
262
257
title = [feed.title, _("Loading...")][feed.title == '']
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
338
self.site_images = {}
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)
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."))
363
360
#Regular RSS/Atom feed
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")))
367
webfeed_radio.add(self.get_radio_hbox(pb, _("RSS/Atom")))
369
#Google (Reader and Wave)
370
pb = self.applet.get_favicon('www.google.com', True)
372
google_radio = gtk.RadioButton(search_radio, None)
373
google_radio.add(self.get_radio_hbox(pb, classes.GoogleFeed.title, 'www.google.com'))
375
#Google Reader (CheckButton)
373
376
pb = get_greader_icon()
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)
384
pb = self.applet.get_favicon('wave.google.com', True)
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)
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()
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)
379
pb = get_favicon('www.reddit.com', self.applet)
401
pb = self.applet.get_favicon('www.reddit.com', True)
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'))
384
406
#Twitter Timeline and/or Replies
385
407
pb = gtk.gdk.pixbuf_new_from_file_at_size(twitter_path, 16, 16)
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")))
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()
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()
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)
405
for radio in (search_radio, webfeed_radio, greader_radio, reddit_radio, twitter_radio):
406
radio.connect('toggled', self.radio_toggled)
408
source_vbox.pack_start(radio, False, False, 0)
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)
439
source_vbox.pack_start(widget, False, False, 0)
414
441
source_hbox = gtk.HBox(False, 6)
415
442
source_hbox.pack_start(source_label, False, False)
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)
610
#The favicon was fetched
611
def fetched_favicon(self, siteid, data):
612
self.applet.favicons[siteid] = long(time.time())
614
fp = open(os.path.join(cache_dir, siteid + '.ico'), 'w+')
618
pb = self.applet.get_favicon(siteid, True)
620
if siteid == 'google-reader':
623
if siteid in self.site_images:
624
self.site_images[siteid].set_from_pixbuf(pb)
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()
592
640
if self.num == 2:
593
self.applet.add_feed('google-reader-' + username, None, username, password)
641
if self.greader_check.get_active():
642
self.applet.add_feed('google-reader-' + username, None, username, password)
644
if self.gwave_check.get_active():
645
self.applet.add_feed('google-wave-' + username, None, username, password)
596
649
self.applet.add_feed('reddit-' + username, None, username, password)
598
651
elif self.num == 4:
621
674
elif entry == self.url_entry:
622
675
self.do_sensitive(self.add_button, (entry, ))
624
#Google Reader or Reddit
625
elif self.num in (2, 3):
678
self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
679
(self.greader_check, self.gwave_check))
682
self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
683
(self.twitter_timeline_check, self.twitter_replies_check))
626
686
self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry))
630
self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry), \
631
(self.twitter_timeline_check, self.twitter_replies_check))
633
688
def radio_toggled(self, radio):
634
689
if not radio.get_active():
660
715
self.user_hbox.show()
661
716
self.pass_hbox.show()
664
self.twitter_vbox.show()
666
self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry), \
719
self.google_align.show()
721
self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
722
(self.greader_check, self.gwave_check))
725
self.twitter_align.show()
727
self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry),
667
728
(self.twitter_timeline_check, self.twitter_replies_check))
670
731
self.do_sensitive(self.add_button, (self.user_entry, self.pass_entry))
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))
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))
677
742
def close(self, button):
800
866
button.set_sensitive(False)
868
def get_radio_hbox(self, pb, text, siteid=None):
869
image = gtk.image_new_from_pixbuf(pb)
871
if siteid is not None:
872
self.site_images[siteid] = image
874
label = gtk.Label(text)
876
hbox = gtk.HBox(False, 3)
877
hbox.pack_start(image, False)
878
hbox.pack_start(label, False)
802
882
#Try the downloaded favicon first. If it doesn't work, use the blue RSS icon
803
883
def get_greader_icon():
811
def get_favicon(siteid, applet):
813
pb = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(cache_dir, siteid + '.ico'), 16, 16)
815
pb = applet.web_image
819
def get_radio_hbox(pb, txt):
820
img = gtk.image_new_from_pixbuf(pb)
822
label = gtk.Label(txt)
824
hbox = gtk.HBox(False, 3)
825
hbox.pack_start(img, False)
826
hbox.pack_start(label, False)
830
891
def html_safe(s):
831
892
s = s.replace('&', '&').replace('<', '<')
832
893
s = s.replace('>', '>').replace('"', '"')