From 15816210ca4b854b6806774859130b9c3c33128c Mon Sep 17 00:00:00 2001 From: John Schember Date: Sun, 27 Feb 2011 07:24:17 -0500 Subject: [PATCH] Fix saving to disk. Offer to save file to disk when user wants to download a non support ebook file. --- src/calibre/gui2/store/web_control.py | 25 ++++++++++++++++++++++--- src/calibre/gui2/store_download.py | 16 ++++++++++------ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/calibre/gui2/store/web_control.py b/src/calibre/gui2/store/web_control.py index bd8efbe588..0c9109b140 100644 --- a/src/calibre/gui2/store/web_control.py +++ b/src/calibre/gui2/store/web_control.py @@ -4,11 +4,14 @@ __license__ = 'GPL 3' __copyright__ = '2011, John Schember ' __docformat__ = 'restructuredtext en' +import os from cookielib import Cookie, CookieJar -from PyQt4.Qt import QWebView, QWebPage, QNetworkCookieJar, QNetworkRequest, QString +from PyQt4.Qt import QWebView, QWebPage, QNetworkCookieJar, QNetworkRequest, QString, \ + QFileDialog -from calibre import USER_AGENT +from calibre import USER_AGENT, browser +from calibre.ebooks import BOOK_EXTENSIONS class NPWebView(QWebView): @@ -37,7 +40,23 @@ class NPWebView(QWebView): return url = unicode(request.url().toString()) - self.gui.download_from_store(url, self.get_cookies()) + cj = self.get_cookies() + + br = browser() + br.set_cookiejar(cj) + + basename = br.open(url).geturl().split('/')[-1] + ext = os.path.splitext(basename)[1][1:].lower() + if ext not in BOOK_EXTENSIONS: + home = os.getenv('USERPROFILE') or os.getenv('HOME') + name = QFileDialog.getSaveFileName(self, + _('File is not a supported ebook type. Save to disk?'), + os.path.join(home, basename), + '*.*') + if name: + self.gui.download_from_store(url, cj, name, False) + else: + self.gui.download_from_store(url, cj) def ignore_ssl_errors(self, reply, errors): reply.ignoreSslErrors(errors) diff --git a/src/calibre/gui2/store_download.py b/src/calibre/gui2/store_download.py index 71378c173f..7b0d68d454 100644 --- a/src/calibre/gui2/store_download.py +++ b/src/calibre/gui2/store_download.py @@ -55,6 +55,11 @@ class StoreDownloadJob(BaseJob): self._log_file.close() self._log_file = None + try: + os.remove(self.tmp_file_name) + except: + pass + self.job_manager.changed_queue.put(self) def log_write(self, what): @@ -126,12 +131,8 @@ class StoreDownloader(Thread): br = browser() br.set_cookiejar(job.cookie_jar) - - basename = br.open(url).geturl().split('/')[-1] - ext = os.path.splitext(basename)[1][1:].lower() - if ext not in BOOK_EXTENSIONS: - raise Exception(_('Not a valid ebook format.')) + basename = br.open(url).geturl().split('/')[-1] tf = PersistentTemporaryFile(suffix=basename) with closing(br.open(url)) as f: tf.write(f.read()) @@ -142,6 +143,9 @@ class StoreDownloader(Thread): url, save_loc, add_to_lib = job.args if not add_to_lib and job.tmp_file_name: return + ext = os.path.splitext(job.tmp_file_name)[1][1:].lower() + if ext not in BOOK_EXTENSIONS: + raise Exception(_('Not a support ebook format.')) ext = os.path.splitext(job.tmp_file_name)[1][1:] @@ -156,7 +160,7 @@ class StoreDownloader(Thread): if not save_loc and job.tmp_file_name: return - shutil.copy(job.tmp_fie_name, save_loc) + shutil.copy(job.tmp_file_name, save_loc) def download_from_store(self, callback, db, cookie_jar, url='', save_as_loc='', add_to_lib=True): description = _('Downloading %s') % url