from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse
+from django.http.response import HttpResponse
from django.utils.functional import lazy
from django.db import models
from piston.handler import AnonymousBaseHandler, BaseHandler
from catalogue.forms import BookImportForm
from catalogue.models import Book, Tag, BookMedia, Fragment, Collection
from catalogue.models.tag import prefetch_relations
+from catalogue.utils import is_subscribed
from picture.models import Picture
from picture.forms import PictureImportForm
book.cover, "139x193").url if book.cover else ''
@classmethod
- def cover_source_image(cls, book):
- url = book.cover_source()
- return url.rstrip('/') + '/file/'
+ def simple_thumb(cls, book):
+ return MEDIA_BASE + book.cover_api_thumb.url if book.cover_api_thumb else ''
+
+ @classmethod
+ def simple_cover(cls, book):
+ return MEDIA_BASE + book.simple_cover.url if book.simple_cover else ''
class BookDetailHandler(BaseHandler, BookDetails):
"""
allowed_methods = ['GET']
fields = ['title', 'parent', 'children'] + Book.formats + [
- 'media', 'url', 'cover', 'cover_thumb', 'fragment_data'] + [
+ 'media', 'url', 'cover', 'cover_thumb', 'simple_thumb', 'simple_cover', 'fragment_data', 'preview'] + [
category_plural[c] for c in book_tag_categories]
@piwik_track
"""
allowed_methods = ('GET',)
model = Book
- fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb', 'slug']
+ fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb', 'slug', 'simple_thumb']
@classmethod
def genres(cls, book):
return rc.NOT_FOUND
+class EpubHandler(BookDetailHandler):
+ def read(self, request, slug):
+ if not is_subscribed(request.user):
+ return rc.FORBIDDEN
+ try:
+ book = Book.objects.get(slug=slug)
+ except Book.DoesNotExist:
+ return rc.NOT_FOUND
+ response = HttpResponse(book.get_media('epub'))
+ return response
+
+
class EBooksHandler(AnonymousBooksHandler):
fields = ('author', 'href', 'title', 'cover') + tuple(Book.ebook_formats) + ('slug',)
class BookProxy(models.Model):
+ class Meta:
+ managed = False
+
def __init__(self, book, key):
self.book = book
self.key = key
class FilterBooksHandler(AnonymousBooksHandler):
fields = book_tag_categories + [
- 'href', 'title', 'url', 'cover', 'cover_thumb', 'slug', 'key', 'cover_source_image']
+ 'href', 'title', 'url', 'cover', 'cover_thumb', 'simple_thumb', 'slug', 'key']
+
+ def parse_bool(self, s):
+ if s in ('true', 'false'):
+ return s == 'true'
+ else:
+ return None
def read(self, request):
key_sep = '$'
search_string = request.GET.get('search')
- is_lektura = request.GET.get('lektura')
- is_audiobook = request.GET.get('audiobook')
+ is_lektura = self.parse_bool(request.GET.get('lektura'))
+ is_audiobook = self.parse_bool(request.GET.get('audiobook'))
+ preview = self.parse_bool(request.GET.get('preview'))
after = request.GET.get('after')
count = int(request.GET.get('count', 50))
- if is_lektura in ('true', 'false'):
- is_lektura = is_lektura == 'true'
- else:
- is_lektura = None
- if is_audiobook in ('true', 'false'):
- is_audiobook = is_audiobook == 'true'
books = Book.objects.distinct().order_by('slug')
if is_lektura is not None:
books = books.filter(has_audience=is_lektura)
books = books.filter(media__type='mp3')
else:
books = books.exclude(media__type='mp3')
+ if preview is not None:
+ books = books.filter(preview=preview)
for key in request.GET:
if key in category_singular:
category = category_singular[key]
setattr(BookDetails, plural, _tags_getter(singular))
setattr(BookDetails, singular, _tag_getter(singular))
+
add_tag_getters()
# add fields for files in Book
def _file_getter(book_format):
- field = "%s_file" % book_format
- @classmethod
- def get_file(cls, book):
- f = getattr(book, field)
- if f:
- return MEDIA_BASE + f.url
+ @staticmethod
+ def get_file(book):
+ f_url = book.media_url(book_format)
+ if f_url:
+ return MEDIA_BASE + f_url
else:
return ''
return get_file