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 import browser
from calibre.gui2 import open_url from calibre.gui2 import open_url
from calibre.gui2.store import StorePlugin 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.search_result import SearchResult
from calibre.gui2.store.web_store_dialog import WebStoreDialog
from calibre.utils.config import DynamicConfig from calibre.utils.config import DynamicConfig
class MobileReadStore(StorePlugin): class MobileReadStore(BasicStoreConfig, StorePlugin):
def genesis(self): def genesis(self):
self.config = DynamicConfig('store_' + self.name) self.config = DynamicConfig('store_' + self.name)
self.rlock = RLock() self.rlock = RLock()
def open(self, parent=None, detail_item=None, external=False): def open(self, parent=None, detail_item=None, external=False):
settings = self.get_settings()
url = 'http://www.mobileread.com/' 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): def search(self, query, max_results=10, timeout=60):
books = self.get_book_list(timeout=timeout) books = self.get_book_list(timeout=timeout)

View File

@ -7,6 +7,7 @@ __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os import os
import urllib2
from cookielib import Cookie, CookieJar from cookielib import Cookie, CookieJar
from urlparse import urlparse from urlparse import urlparse
@ -63,8 +64,19 @@ class NPWebView(QWebView):
br = browser() br = browser()
br.set_cookiejar(cj) 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() ext = os.path.splitext(basename)[1][1:].lower()
if ext not in BOOK_EXTENSIONS: if ext not in BOOK_EXTENSIONS:
home = os.path.expanduser('~') home = os.path.expanduser('~')

View File

@ -10,6 +10,7 @@ import cStringIO
import os import os
import shutil import shutil
import time import time
import urllib2
from cookielib import CookieJar from cookielib import CookieJar
from contextlib import closing from contextlib import closing
from threading import Thread from threading import Thread
@ -153,7 +154,17 @@ class StoreDownloader(Thread):
br.set_cookiejar(job.cookie_jar) br.set_cookiejar(job.cookie_jar)
with closing(br.open(url)) as r: 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 = PersistentTemporaryFile(suffix=basename)
tf.write(r.read()) tf.write(r.read())
job.tmp_file_name = tf.name job.tmp_file_name = tf.name