X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/65c9feda79d2b2c94cb7dcd561318a83fd796f0a..084f20588e607aa9ae3ed280b6a2f0349b6a3200:/src/catalogue/api/views.py?ds=sidebyside
diff --git a/src/catalogue/api/views.py b/src/catalogue/api/views.py
index ee9f07403..68626e6d6 100644
--- a/src/catalogue/api/views.py
+++ b/src/catalogue/api/views.py
@@ -11,6 +11,7 @@ from rest_framework.response import Response
from rest_framework import status
from api.handlers import read_tags
from api.utils import vary_on_auth
+from club.models import Membership
from .helpers import books_after, order_books
from . import serializers
from catalogue.forms import BookImportForm
@@ -71,6 +72,9 @@ class BookList(ListAPIView):
books = Book.objects.all()
books = order_books(books, new_api)
+ if not Membership.is_active_for(self.request.user):
+ books = books.exclude(preview=True)
+
if self.kwargs.get('top_level'):
books = books.filter(parent=None)
if self.kwargs.get('audiobooks'):
@@ -142,15 +146,23 @@ class BookDetail(RetrieveAPIView):
serializer_class = serializers.BookDetailSerializer
+@vary_on_auth # Because of embargo links.
class EbookList(BookList):
serializer_class = serializers.EbookSerializer
-@vary_on_auth # Because of 'liked'.
+@method_decorator(never_cache, name='dispatch')
class Preview(ListAPIView):
- queryset = Book.objects.filter(preview=True)
+ #queryset = Book.objects.filter(preview=True)
serializer_class = serializers.BookPreviewSerializer
+ def get_queryset(self):
+ qs = Book.objects.filter(preview=True)
+ # FIXME: temporary workaround for a problem with iOS app; see #3954.
+ if 'Darwin' in self.request.META['HTTP_USER_AGENT'] and 'debug' not in self.request.GET:
+ qs = qs.none()
+ return qs
+
@vary_on_auth # Because of 'liked'.
class FilterBookList(ListAPIView):
@@ -168,6 +180,8 @@ class FilterBookList(ListAPIView):
is_lektura = self.parse_bool(self.request.query_params.get('lektura'))
is_audiobook = self.parse_bool(self.request.query_params.get('audiobook'))
preview = self.parse_bool(self.request.query_params.get('preview'))
+ if not Membership.is_active_for(self.request.user):
+ preview = False
new_api = self.request.query_params.get('new_api')
after = self.request.query_params.get('after')