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>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os
from cookielib import Cookie, CookieJar 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): class NPWebView(QWebView):
@ -37,7 +40,23 @@ class NPWebView(QWebView):
return return
url = unicode(request.url().toString()) 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): def ignore_ssl_errors(self, reply, errors):
reply.ignoreSslErrors(errors) reply.ignoreSslErrors(errors)

View File

@ -55,6 +55,11 @@ class StoreDownloadJob(BaseJob):
self._log_file.close() self._log_file.close()
self._log_file = None self._log_file = None
try:
os.remove(self.tmp_file_name)
except:
pass
self.job_manager.changed_queue.put(self) self.job_manager.changed_queue.put(self)
def log_write(self, what): def log_write(self, what):
@ -126,12 +131,8 @@ class StoreDownloader(Thread):
br = browser() br = browser()
br.set_cookiejar(job.cookie_jar) 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) tf = PersistentTemporaryFile(suffix=basename)
with closing(br.open(url)) as f: with closing(br.open(url)) as f:
tf.write(f.read()) tf.write(f.read())
@ -142,6 +143,9 @@ class StoreDownloader(Thread):
url, save_loc, add_to_lib = job.args url, save_loc, add_to_lib = job.args
if not add_to_lib and job.tmp_file_name: if not add_to_lib and job.tmp_file_name:
return 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:] 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: if not save_loc and job.tmp_file_name:
return 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): def download_from_store(self, callback, db, cookie_jar, url='', save_as_loc='', add_to_lib=True):
description = _('Downloading %s') % url description = _('Downloading %s') % url