Fix case for URL schemes, better error message (bug 276)

Allow URL schemes like "Http://" and show better error
messages when adding URLs with unknown schemes.

Thanks to R. Bell for reporting this error on garage.maemo.org.
This commit is contained in:
Thomas Perl 2008-12-23 20:17:52 +01:00
parent 3e342347a8
commit 6cead6d94d
2 changed files with 36 additions and 23 deletions

View File

@ -1413,22 +1413,13 @@ class gPodder(GladeWidget):
self.add_new_channel(result)
def add_new_channel(self, result=None, ask_download_new=True, quiet=False, block=False, authentication_tokens=None):
result = util.normalize_feed_url( result)
waitdlg = gtk.MessageDialog(self.gPodder, 0, gtk.MESSAGE_INFO, gtk.BUTTONS_NONE)
waitdlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
waitdlg.set_title(_('Downloading episode list'))
waitdlg.set_markup('<b><big>%s</big></b>' % waitdlg.get_title())
waitdlg.format_secondary_text(_('Please wait while I am downloading episode information for %s') % result)
waitpb = gtk.ProgressBar()
if block:
waitdlg.vbox.add(waitpb)
waitdlg.show_all()
waitdlg.set_response_sensitive(gtk.RESPONSE_CANCEL, False)
(scheme, rest) = result.split('://', 1)
result = util.normalize_feed_url(result)
if not result:
title = _('URL scheme not supported')
message = _('gPodder currently only supports URLs starting with <b>http://</b>, <b>feed://</b> or <b>ftp://</b>.')
cute_scheme = saxutils.escape(scheme)+'://'
title = _('%s URLs are not supported') % cute_scheme
message = _('gPodder does not understand the URL you supplied.')
self.show_message( message, title)
return
@ -1446,6 +1437,17 @@ class gPodder(GladeWidget):
waitdlg.destroy()
return
waitdlg = gtk.MessageDialog(self.gPodder, 0, gtk.MESSAGE_INFO, gtk.BUTTONS_NONE)
waitdlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
waitdlg.set_title(_('Downloading episode list'))
waitdlg.set_markup('<b><big>%s</big></b>' % waitdlg.get_title())
waitdlg.format_secondary_text(_('Please wait while I am downloading episode information for %s') % result)
waitpb = gtk.ProgressBar()
if block:
waitdlg.vbox.add(waitpb)
waitdlg.show_all()
waitdlg.set_response_sensitive(gtk.RESPONSE_CANCEL, False)
self.entryAddChannel.set_text(_('Downloading feed...'))
self.entryAddChannel.set_sensitive(False)
self.btnAddChannel.set_sensitive(False)

View File

@ -103,7 +103,7 @@ def make_directory( path):
return True
def normalize_feed_url( url):
def normalize_feed_url(url):
"""
Converts any URL to http:// or ftp:// so that it can be
used with "wget". If the URL cannot be converted (invalid
@ -117,26 +117,37 @@ def normalize_feed_url( url):
simply assume the user intends to add a http:// feed.
"""
if not url or len( url) < 8:
if not url or len(url) < 8:
return None
# Assume HTTP for URLs without scheme
if not '://' in url:
url = 'http://' + url
if url.startswith('itms://'):
# The scheme of the URL should be all-lowercase
(scheme, rest) = url.split('://', 1)
scheme = scheme.lower()
# Remember to parse iTunes XML for itms:// URLs
do_parse_itunes_xml = (scheme == 'itms')
# feed://, itpc:// and itms:// are really http://
if scheme in ('feed', 'itpc', 'itms'):
scheme = 'http'
# Re-assemble our URL
url = scheme + '://' + rest
# If we had an itms:// URL, parse XML
if do_parse_itunes_xml:
url = parse_itunes_xml(url)
# Links to "phobos.apple.com"
url = itunes_discover_rss(url)
if url is None:
return None
if url.startswith( 'http://') or url.startswith( 'https://') or url.startswith( 'ftp://'):
if scheme in ('http', 'https', 'ftp'):
return url
if url.startswith('feed://') or url.startswith('itpc://'):
return 'http://' + url[7:]
return None