diff --git a/src/calibre/gui2/store/mobileread_plugin.py b/src/calibre/gui2/store/mobileread_plugin.py index 235b24e4eb..d8c8b540cf 100644 --- a/src/calibre/gui2/store/mobileread_plugin.py +++ b/src/calibre/gui2/store/mobileread_plugin.py @@ -19,18 +19,28 @@ from PyQt4.Qt import QUrl from calibre import browser from calibre.gui2 import open_url from calibre.gui2.store import StorePlugin +from calibre.gui2.store.basic_config import BasicStoreConfig from calibre.gui2.store.search_result import SearchResult +from calibre.gui2.store.web_store_dialog import WebStoreDialog from calibre.utils.config import DynamicConfig -class MobileReadStore(StorePlugin): +class MobileReadStore(BasicStoreConfig, StorePlugin): def genesis(self): self.config = DynamicConfig('store_' + self.name) self.rlock = RLock() def open(self, parent=None, detail_item=None, external=False): + settings = self.get_settings() url = 'http://www.mobileread.com/' - open_url(QUrl(detail_item if detail_item else url)) + + if external or settings.get(self.name + '_open_external', False): + open_url(QUrl(detail_item if detail_item else url)) + else: + d = WebStoreDialog(self.gui, url, parent, detail_item) + d.setWindowTitle(self.name) + d.set_tags(settings.get(self.name + '_tags', '')) + d = d.exec_() def search(self, query, max_results=10, timeout=60): books = self.get_book_list(timeout=timeout) diff --git a/src/calibre/gui2/store/web_control.py b/src/calibre/gui2/store/web_control.py index 8d0fa8a150..4ec40bcf69 100644 --- a/src/calibre/gui2/store/web_control.py +++ b/src/calibre/gui2/store/web_control.py @@ -7,6 +7,7 @@ __copyright__ = '2011, John Schember ' __docformat__ = 'restructuredtext en' import os +import urllib2 from cookielib import Cookie, CookieJar from urlparse import urlparse @@ -63,8 +64,19 @@ class NPWebView(QWebView): br = browser() br.set_cookiejar(cj) + r = br.open(url) + + basename = '' + disposition = r.info().get('Content-disposition', '') + if 'filename' in disposition: + if 'filename*=' in disposition: + basename = disposition.split('filename*=')[-1].split('\'\'')[-1] + else: + basename = disposition.split('filename=')[-1] + basename = urllib2.unquote(basename) + if not basename: + basename = r.geturl().split('/')[-1] - basename = br.open(url).geturl().split('/')[-1] ext = os.path.splitext(basename)[1][1:].lower() if ext not in BOOK_EXTENSIONS: home = os.path.expanduser('~') diff --git a/src/calibre/gui2/store_download.py b/src/calibre/gui2/store_download.py index ade8403254..e101badfb3 100644 --- a/src/calibre/gui2/store_download.py +++ b/src/calibre/gui2/store_download.py @@ -10,6 +10,7 @@ import cStringIO import os import shutil import time +import urllib2 from cookielib import CookieJar from contextlib import closing from threading import Thread @@ -153,7 +154,17 @@ class StoreDownloader(Thread): br.set_cookiejar(job.cookie_jar) with closing(br.open(url)) as r: - basename = r.geturl().split('/')[-1] + basename = '' + disposition = r.info().get('Content-disposition', '') + if 'filename' in disposition: + if 'filename*=' in disposition: + basename = disposition.split('filename*=')[-1].split('\'\'')[-1] + else: + basename = disposition.split('filename=')[-1] + basename = urllib2.unquote(basename) + if not basename: + basename = r.geturl().split('/')[-1] + tf = PersistentTemporaryFile(suffix=basename) tf.write(r.read()) job.tmp_file_name = tf.name