From 5de66728072e29c385fd40eb8303af410be36bfc Mon Sep 17 00:00:00 2001 From: John Schember Date: Sat, 12 Mar 2011 14:40:41 -0500 Subject: [PATCH] Ensure filename is always set and report any errors while trying to get the filename from a url. --- src/calibre/__init__.py | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index f25a6341ca..4d3e5076f6 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -519,23 +519,28 @@ def get_download_filename(url, cookie_file=None): cj.load(cookie_file) br.set_cookiejar(cj) - with closing(br.open(url)) as r: - disposition = r.info().get('Content-disposition', '') - for p in disposition.split(';'): - if 'filename' in p: - if '*=' in disposition: - parts = disposition.split('*=')[-1] - filename = parts.split('\'')[-1] - else: - filename = disposition.split('=')[-1] - if filename[0] in ('\'', '"'): - filename = filename[1:] - if filename[-1] in ('\'', '"'): - filename = filename[:-1] - filename = urllib2_unquote(filename) - break - if not filename: - filename = r.geturl().split('/')[-1] + try: + with closing(br.open(url)) as r: + disposition = r.info().get('Content-disposition', '') + for p in disposition.split(';'): + if 'filename' in p: + if '*=' in disposition: + parts = disposition.split('*=')[-1] + filename = parts.split('\'')[-1] + else: + filename = disposition.split('=')[-1] + if filename[0] in ('\'', '"'): + filename = filename[1:] + if filename[-1] in ('\'', '"'): + filename = filename[:-1] + filename = urllib2_unquote(filename) + break + except: + import traceback + traceback.print_exc() + + if not filename: + filename = r.geturl().split('/')[-1] return filename