Fix saving to disk. Offer to save file to disk when user wants to download a non support ebook file.

This commit is contained in:
John Schember 2011-02-27 07:24:17 -05:00
parent a097755a5c
commit 15816210ca
2 changed files with 32 additions and 9 deletions

View File

@ -4,11 +4,14 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>'
__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)

View File

@ -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