reenable pdf catalogue caching,
[wolnelektury.git] / apps / catalogue / views.py
index 90ef8c2..5f0b016 100644 (file)
@@ -83,34 +83,8 @@ def book_list(request, filter=None, template_name='catalogue/book_list.html'):
 
     form = forms.SearchForm()
 
-    books_by_parent = {}
-    books = models.Book.objects.all().order_by('parent_number', 'sort_key').only('title', 'parent', 'slug')
-    if filter:
-        books = books.filter(filter).distinct()
-        book_ids = set((book.pk for book in books))
-        for book in books:
-            parent = book.parent_id
-            if parent not in book_ids:
-                parent = None
-            books_by_parent.setdefault(parent, []).append(book)
-    else:
-        for book in books:
-            books_by_parent.setdefault(book.parent_id, []).append(book)
-
-    orphans = []
-    books_by_author = SortedDict()
+    books_by_author, orphans, books_by_parent = models.Book.book_list(filter)
     books_nav = SortedDict()
-    for tag in models.Tag.objects.filter(category='author'):
-        books_by_author[tag] = []
-
-    for book in books_by_parent.get(None,()):
-        authors = list(book.tags.filter(category='author'))
-        if authors:
-            for author in authors:
-                books_by_author[author].append(book)
-        else:
-            orphans.append(book)
-
     for tag in books_by_author:
         if books_by_author[tag]:
             books_nav.setdefault(tag.sort_key[0], []).append(tag)
@@ -606,7 +580,7 @@ def download_shelf(request, slug):
     if form.is_valid():
         formats = form.cleaned_data['formats']
     if len(formats) == 0:
-        formats = ['pdf', 'epub', 'odt', 'txt']
+        formats = ['pdf', 'epub', 'mobi', 'odt', 'txt']
 
     # Create a ZIP archive
     temp = tempfile.TemporaryFile()
@@ -617,6 +591,9 @@ def download_shelf(request, slug):
         if 'pdf' in formats and book.pdf_file:
             filename = book.pdf_file.path
             archive.write(filename, str('%s.pdf' % book.slug))
+        if 'mobi' in formats and book.mobi_file:
+            filename = book.mobi_file.path
+            archive.write(filename, str('%s.mobi' % book.slug))
         if book.root_ancestor not in already and 'epub' in formats and book.root_ancestor.epub_file:
             filename = book.root_ancestor.epub_file.path
             archive.write(filename, str('%s.epub' % book.root_ancestor.slug))
@@ -646,13 +623,15 @@ def shelf_book_formats(request, shelf):
     """
     shelf = get_object_or_404(models.Tag, slug=shelf, category='set')
 
-    formats = {'pdf': False, 'epub': False, 'odt': False, 'txt': False}
+    formats = {'pdf': False, 'epub': False, 'mobi': False, 'odt': False, 'txt': False}
 
     for book in collect_books(models.Book.tagged.with_all(shelf)):
         if book.pdf_file:
             formats['pdf'] = True
         if book.root_ancestor.epub_file:
             formats['epub'] = True
+        if book.mobi_file:
+            formats['mobi'] = True
         if book.txt_file:
             formats['txt'] = True
         for format in ('odt',):
@@ -776,10 +755,8 @@ def tag_info(request, id):
 
 def download_zip(request, format, slug):
     url = None
-    if format == 'pdf':
-        url = models.Book.zip_pdf()
-    elif format == 'epub':
-        url = models.Book.zip_epub()
+    if format in ('pdf', 'epub', 'mobi'):
+        url = models.Book.zip_format(format)
     elif format == 'audiobook' and slug is not None:
         book = models.Book.objects.get(slug=slug)
         url = book.zip_audiobooks()