Mobileread: Basic config and open in embedded browser. Use Content-disposition header when avaliable to get filename.

This commit is contained in:
John Schember 2011-03-08 21:28:13 -05:00
parent 0002589104
commit f00ea5e7af
3 changed files with 37 additions and 4 deletions

View File

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

View File

@ -7,6 +7,7 @@ __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__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('~')

View File

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