sync data in api
authorRadek Czajka <rczajka@rczajka.pl>
Wed, 12 Nov 2025 11:13:42 +0000 (12:13 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Wed, 12 Nov 2025 11:13:42 +0000 (12:13 +0100)
src/catalogue/api/serializers.py
src/catalogue/api/urls2.py
src/catalogue/api/views.py
src/catalogue/models/book.py

index 609fa74..617ebe8 100644 (file)
@@ -169,7 +169,7 @@ class BookSerializer2(serializers.ModelSerializer):
             'cover_thumb', 'cover',
             'isbn_pdf', 'isbn_epub', 'isbn_mobi',
             'abstract',
             'cover_thumb', 'cover',
             'isbn_pdf', 'isbn_epub', 'isbn_mobi',
             'abstract',
-            'has_mp3_file',
+            'has_mp3_file', 'has_sync_file',
         ]
 
 class BookSerializer11Labs(serializers.ModelSerializer):
         ]
 
 class BookSerializer11Labs(serializers.ModelSerializer):
index ad96d7a..46f2a36 100644 (file)
@@ -28,6 +28,9 @@ urlpatterns = [
          ),
     path('books/<slug:slug>.json',
         views.BookJsonView.as_view()),
          ),
     path('books/<slug:slug>.json',
         views.BookJsonView.as_view()),
+    path('books/<slug:slug>/sync/',
+         views.BookSyncView.as_view()
+         ),
 
     path('suggested-tags/',
          piwik_track_view(views.SuggestedTags.as_view()),
 
     path('suggested-tags/',
          piwik_track_view(views.SuggestedTags.as_view()),
index ed5d10f..941b122 100644 (file)
@@ -251,6 +251,15 @@ class BookDetail2(RetrieveAPIView):
     serializer_class = serializers.BookSerializer2
 
 
     serializer_class = serializers.BookSerializer2
 
 
+class BookSyncView(RetrieveAPIView):
+    queryset = Book.objects.all()
+    lookup_field = 'slug'
+
+    def retrieve(self, request, *args, **kwargs):
+        instance = self.get_object()
+        return Response(json.loads(instance.get_sync()))
+
+    
 @vary_on_auth  # Because of embargo links.
 class EbookList(BookList):
     serializer_class = serializers.EbookSerializer
 @vary_on_auth  # Because of embargo links.
 class EbookList(BookList):
     serializer_class = serializers.EbookSerializer
@@ -546,6 +555,7 @@ class BookMediaView(ListAPIView):
 from .tojson import conv
 from lxml import etree
 from rest_framework.views import APIView
 from .tojson import conv
 from lxml import etree
 from rest_framework.views import APIView
+
 class BookJsonView(APIView):
     def get(self, request, slug):
         book = get_object_or_404(Book, slug=slug)
 class BookJsonView(APIView):
     def get(self, request, slug):
         book = get_object_or_404(Book, slug=slug)
index b2148e6..35ca3c1 100644 (file)
@@ -473,6 +473,8 @@ class Book(models.Model):
 
     
     def get_sync(self):
 
     
     def get_sync(self):
+        if not self.has_sync_file():
+            return '[]'
         with self.get_media('sync').first().file.open('r') as f:
             sync = f.read().split('\n')
         offset = float(sync[0])
         with self.get_media('sync').first().file.open('r') as f:
             sync = f.read().split('\n')
         offset = float(sync[0])