X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/dbdd1449a656f4c62055926d1531be95c2e6e66b..3f7ea05878c9fa9ac9ff13211e48773ab6cf64eb:/src/catalogue/models/book.py diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index 02278de67..12fdb8d3d 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -81,6 +81,9 @@ class Book(models.Model): parent = models.ForeignKey('self', blank=True, null=True, related_name='children') ancestor = models.ManyToManyField('self', blank=True, editable=False, related_name='descendant', symmetrical=False) + cached_author = models.CharField(blank=True, max_length=240, db_index=True) + has_audience = models.BooleanField(default=False) + objects = models.Manager() tagged = managers.ModelTaggedItemManager(Tag) tags = managers.TagDescriptor(Tag) @@ -123,7 +126,7 @@ class Book(models.Model): return split_tags(self.tags.exclude(category__in=('set', 'theme'))) def author_unicode(self): - return self.tag_unicode('author') + return self.cached_author def translator(self): translators = self.extra_info.get('translators') @@ -136,6 +139,9 @@ class Book(models.Model): others = '' return ', '.join(u'\xa0'.join(reversed(translator.split(', ', 1))) for translator in translators) + others + def cover_source(self): + return self.extra_info.get('cover_source', self.parent.cover_source() if self.parent else '') + def save(self, force_insert=False, force_update=False, **kwargs): from sortify import sortify @@ -148,6 +154,9 @@ class Book(models.Model): author = u'' self.sort_key_author = author + self.cached_author = self.tag_unicode('author') + self.has_audience = 'audience' in self.extra_info + ret = super(Book, self).save(force_insert, force_update, **kwargs) return ret @@ -186,6 +195,9 @@ class Book(models.Model): else: return self.media.filter(type=type_).exists() + def has_audio(self): + return self.has_media('mp3') + def get_media(self, type_): if self.has_media(type_): if type_ in Book.formats: @@ -636,6 +648,13 @@ class Book(models.Model): else: return None + def fragment_data(self): + fragment = self.choose_fragment() + if fragment: + return {'title': fragment.book.pretty_title(), 'html': fragment.get_short_text()} + else: + return None + def update_popularity(self): count = self.tags.filter(category='set').values('user').order_by('user').distinct().count() try: