From e1b3302dcb127b2020f7e7fa399942af6ec265d1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 11 Mar 2009 11:03:48 -0700 Subject: [PATCH] Implement #2036 (Add PDB support to the Stanza content server) --- src/calibre/__init__.py | 2 ++ src/calibre/library/server.py | 31 +++++++++++++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index 3bf1f03b42..214c52f14a 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -31,6 +31,8 @@ mimetypes.add_type('application/adobe-page-template+xml', '.xpgt') mimetypes.add_type('application/x-font-opentype', '.otf') mimetypes.add_type('application/x-font-truetype', '.ttf') mimetypes.add_type('application/oebps-package+xml', '.opf') +mimetypes.add_type('application/ereader', '.pdb') +guess_type = mimetypes.guess_type import cssutils cssutils.log.setLevel(logging.WARN) diff --git a/src/calibre/library/server.py b/src/calibre/library/server.py index ba81151517..a93f16d981 100644 --- a/src/calibre/library/server.py +++ b/src/calibre/library/server.py @@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en' HTTP server for remote access to the calibre database. ''' -import sys, textwrap, mimetypes, operator, os, re, logging +import sys, textwrap, operator, os, re, logging from itertools import repeat from logging.handlers import RotatingFileHandler from datetime import datetime @@ -18,7 +18,7 @@ from PyQt4.Qt import QImage, QApplication, QByteArray, Qt, QBuffer from calibre.constants import __version__, __appname__ from calibre.utils.genshi.template import MarkupTemplate -from calibre import fit_image +from calibre import fit_image, guess_type from calibre.resources import jquery, server_resources, build_time from calibre.library import server_config as config from calibre.library.database2 import LibraryDatabase2, FIELD_MAP @@ -77,7 +77,7 @@ class LibraryServer(object): urn:calibre:${record[FM['id']]} ${authors} ${record[FM['timestamp']].strftime('%Y-%m-%dT%H:%M:%S+00:00')} - + @@ -218,7 +218,7 @@ class LibraryServer(object): fmt = self.db.format(id, format, index_is_id=True, as_file=True, mode='rb') if fmt is None: raise cherrypy.HTTPError(404, 'book: %d does not have format: %s'%(id, format)) - mt = mimetypes.guess_type('dummy.'+format.lower())[0] + mt = guess_type('dummy.'+format.lower())[0] if mt is None: mt = 'application/octet-stream' cherrypy.response.headers['Content-Type'] = mt @@ -258,8 +258,9 @@ class LibraryServer(object): for record in iter(self.db): r = record[FIELD_MAP['formats']] r = r.upper() if r else '' - if 'EPUB' in r: - authors = ' & '.join([i.replace('|', ',') for i in record[FIELD_MAP['authors']].split(',')]) + if 'EPUB' in r or 'PDB' in r: + authors = ' & '.join([i.replace('|', ',') for i in + record[FIELD_MAP['authors']].split(',')]) extra = [] rating = record[FIELD_MAP['rating']] if rating > 0: @@ -270,12 +271,18 @@ class LibraryServer(object): extra.append('TAGS: %s
'%', '.join(tags.split(','))) series = record[FIELD_MAP['series']] if series: - extra.append('SERIES: %s [%d]
'%(series, record[FIELD_MAP['series_index']])) - books.append(self.STANZA_ENTRY.generate(authors=authors, - record=record, FM=FIELD_MAP, - port=self.opts.port, - extra = ''.join(extra), - ).render('xml').decode('utf8')) + extra.append('SERIES: %s [%d]
'%(series, + record[FIELD_MAP['series_index']])) + fmt = 'epub' if 'EPUB' in r else 'pdb' + mimetype = guess_type('dummy.'+fmt)[0] + books.append(self.STANZA_ENTRY.generate( + authors=authors, + record=record, FM=FIELD_MAP, + port=self.opts.port, + extra = ''.join(extra), + mimetype=mimetype, + fmt=fmt, + ).render('xml').decode('utf8')) updated = self.db.last_modified() cherrypy.response.headers['Last-Modified'] = self.last_modified(updated)