add mobi download
authorJan Szejko <janek37@gmail.com>
Thu, 15 Dec 2016 15:02:42 +0000 (16:02 +0100)
committerJan Szejko <janek37@gmail.com>
Thu, 15 Dec 2016 15:02:42 +0000 (16:02 +0100)
apps/catalogue/templates/catalogue/book_text.html
apps/catalogue/urls.py
apps/catalogue/views.py

index 83e4003..0444bcc 100644 (file)
@@ -154,14 +154,16 @@ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00000000', e
         <div class="col-md-4">
 <a class="btn btn-default" href="{% url 'catalogue_pdf' doc.pk revision.pk %}"
             data-toggle="tutorial" data-tutorial="2" data-placement="top"
-            data-content="{% trans "You can download and share a PDF version – and more formats in the future." %}"
-
+            data-content="{% trans "You can download and share a PDF version." %}"
 >{% trans "Download PDF" %}</a>
-<a class="btn btn-default" href="{% url 'catalogue_epub' doc.pk revision.pk %}"
-            data-toggle="tutorial" data-tutorial="2" data-placement="top"
-            data-content="{% trans "You can download and share a EPUB version – and more formats in the future." %}"
-
+          <a class="btn btn-default" href="{% url 'catalogue_epub' doc.pk revision.pk %}"
+            data-toggle="tutorial" data-tutorial="3" data-placement="top"
+            data-content="{% trans "You can also download an ebook version as EPUB…" %}"
 >{% trans "Download EPUB" %}</a>
+          <a class="btn btn-default" href="{% url 'catalogue_mobi' doc.pk revision.pk %}"
+            data-toggle="tutorial" data-tutorial="4" data-placement="top"
+            data-content="{% trans "…and MOBI." %}"
+>{% trans "Download MOBI" %}</a>
         </div>
     </div>
 </div>
index 148851b..6fd00bb 100644 (file)
@@ -36,4 +36,5 @@ urlpatterns = patterns(
     url(r'^(?P<pk>\d+)/rev(?P<rev_pk>\d+)/preview/$', 'book_html', {'preview': True}, name="catalogue_preview_rev"),
     url(r'^(?P<pk>\d+)/rev(?P<rev_pk>\d+)/pdf/$', 'book_pdf', name="catalogue_pdf"),
     url(r'^(?P<pk>\d+)/rev(?P<rev_pk>\d+)/epub/$', 'book_epub', name="catalogue_epub"),
+    url(r'^(?P<pk>\d+)/rev(?P<rev_pk>\d+)/mobi/$', 'book_mobi', name="catalogue_mobi"),
 )
index 1d1b36e..e3d98d8 100644 (file)
@@ -6,6 +6,8 @@
 import logging
 import os
 import shutil
+import subprocess
+from tempfile import NamedTemporaryFile
 
 from django.conf import settings
 from django.contrib import auth
@@ -250,6 +252,38 @@ def book_epub(request, pk, rev_pk):
     return serve_file(epub_file.get_filename(), '%d.epub' % doc.pk, 'application/epub+zip')
 
 
+@never_cache
+def book_mobi(request, pk, rev_pk):
+    from librarian.utils import Context
+    from librarian.document import Document as SST
+    from librarian.formats.epub import EpubFormat
+
+    doc = get_object_or_404(Document, pk=pk)
+    rev = get_object_or_404(Revision, pk=rev_pk)
+
+    sst = SST.from_string(rev.materialize())
+
+    ctx = Context(
+        files_path='http://%s/media/dynamic/uploads/%s/' % (request.get_host(), pk),
+        source_url='http://%s%s' % (request.get_host(), reverse('catalogue_html', args=[doc.pk])),
+    )
+    if doc.owner_organization is not None and doc.owner_organization.logo:
+        ctx.cover_logo = 'http://%s%s' % (request.get_host(), doc.owner_organization.logo.url)
+    try:
+        epub_file = EpubFormat(sst).build(ctx)
+    except BuildError as e:
+        from django.http import HttpResponse
+        return HttpResponse(content=force_str(e.message), content_type='text/plain', status='400')
+
+    output_file = NamedTemporaryFile(prefix='librarian', suffix='.mobi', delete=False)
+    output_file.close()
+    subprocess.check_call(
+        ['ebook-convert', epub_file.get_filename(), output_file.name, '--no-inline-toc'])
+
+    from catalogue.ebook_utils import serve_file
+    return serve_file(output_file.name, '%d.mobi' % doc.pk, 'application/epub+zip')
+
+
 # @never_cache
 # def revision(request, slug, chunk=None):
 #     try: