X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/7f95f426fe9d582ee5b33e73edc7ef7c78a82c12..dbb1ae2cf25105f7a3831961b08386a1326baef8:/apps/catalogue/models/book.py diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py index b17d29392..bd7d7e49a 100644 --- a/apps/catalogue/models/book.py +++ b/apps/catalogue/models/book.py @@ -27,6 +27,7 @@ class Book(models.Model): """Represents a book imported from WL-XML.""" title = models.CharField(_('title'), max_length=120) sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) + sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) common_slug = models.SlugField(_('slug'), max_length=120, db_index=True) @@ -43,6 +44,9 @@ class Book(models.Model): cover = EbookField('cover', _('cover'), upload_to=book_upload_path('jpg'), null=True, blank=True) + # Cleaner version of cover for thumbs + cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), + upload_to=book_upload_path('th.jpg'), null=True, blank=True) ebook_formats = constants.EBOOK_FORMATS formats = ebook_formats + ['html', 'xml'] @@ -74,6 +78,7 @@ class Book(models.Model): from sortify import sortify self.sort_key = sortify(self.title) + self.title = unicode(self.title) # ??? ret = super(Book, self).save(force_insert, force_update, **kwargs) @@ -123,7 +128,7 @@ class Book(models.Model): if self.has_media(type_): if type_ in Book.formats: return getattr(self, "%s_file" % type_) - else: + else: return self.media.filter(type=type_) else: return None @@ -135,7 +140,7 @@ class Book(models.Model): def get_ogg(self): return self.get_media("ogg") def get_daisy(self): - return self.get_media("daisy") + return self.get_media("daisy") def reset_short_html(self): if self.id is None: @@ -146,6 +151,14 @@ class Book(models.Model): for fragm in self.fragments.all().iterator(): fragm.reset_short_html() + try: + author = self.tags.filter(category='author')[0].sort_key + except IndexError: + author = u'' + type(self).objects.filter(pk=self.pk).update(sort_key_author=author) + + + def has_description(self): return len(self.description) > 0 has_description.short_description = _('description') @@ -309,7 +322,8 @@ class Book(models.Model): tasks.fix_tree_tags.delay(book) if 'cover' not in dont_build: book.cover.build_delay() - + book.cover_thumb.build_delay() + # No saves behind this point. if has_own_text: @@ -391,6 +405,7 @@ class Book(models.Model): if not self.cover_info(inherit=False): if 'cover' not in app_settings.DONT_BUILD: self.cover.build_delay() + self.cover_thumb.build_delay() for format_ in constants.EBOOK_FORMATS_WITH_COVERS: if format_ not in app_settings.DONT_BUILD: getattr(self, '%s_file' % format_).build_delay() @@ -414,7 +429,7 @@ class Book(models.Model): for category in tags: cat = [] for tag in tags[category]: - tag_info = {'slug': tag.slug} + tag_info = {'slug': tag.slug, 'name': tag.name} for lc, ln in settings.LANGUAGES: tag_name = getattr(tag, "name_%s" % lc) if tag_name: @@ -528,7 +543,7 @@ class Book(models.Model): """ # get relevant books and their tags objects = cls.tagged.with_all(tags) - parents = objects.filter(html_file='').only('slug') + parents = objects.exclude(children=None).only('slug') # eliminate descendants l_tags = Tag.objects.filter(category='book', slug__in=[book.book_tag_slug() for book in parents.iterator()]) @@ -551,7 +566,7 @@ class Book(models.Model): 'title', 'parent', 'slug') if filter: books = books.filter(filter).distinct() - + book_ids = set(b['pk'] for b in books.values("pk").iterator()) for book in books.iterator(): parent = book.parent_id @@ -567,7 +582,7 @@ class Book(models.Model): for tag in Tag.objects.filter(category='author').iterator(): books_by_author[tag] = [] - for book in books_by_parent.get(None,()): + for book in books_by_parent.get(None, ()): authors = list(book.tags.filter(category='author')) if authors: for author in authors: