X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/2e4e4c4a3b149116d81698b6666ce8b7ae22857c..dd85755df4e3ef8489a6fb2f71a65abf84b06739:/src/catalogue/models/book.py diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index 8c53d9c1a..068bae899 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -20,6 +20,7 @@ import jsonfield from fnpdjango.storage import BofhFileSystemStorage from ssify import flush_ssi_includes +from librarian.cover import WLCover from librarian.html import transform_abstrakt from newtagging import managers from catalogue import constants @@ -115,6 +116,8 @@ class Book(models.Model): html_built = django.dispatch.Signal() published = django.dispatch.Signal() + SORT_KEY_SEP = '$' + class AlreadyExists(Exception): pass @@ -136,6 +139,15 @@ class Book(models.Model): def authors(self): return self.tags.filter(category='author') + def epochs(self): + return self.tags.filter(category='epoch') + + def genres(self): + return self.tags.filter(category='genre') + + def kinds(self): + return self.tags.filter(category='kind') + def tag_unicode(self, category): relations = prefetched_relations(self, category) if relations: @@ -149,6 +161,15 @@ class Book(models.Model): def author_unicode(self): return self.cached_author + def kind_unicode(self): + return self.tag_unicode('kind') + + def epoch_unicode(self): + return self.tag_unicode('epoch') + + def genre_unicode(self): + return self.tag_unicode('genre') + def translator(self): translators = self.extra_info.get('translators') if not translators: @@ -184,12 +205,12 @@ class Book(models.Model): @permalink def get_absolute_url(self): - return 'catalogue.views.book_detail', [self.slug] + return 'book_detail', [self.slug] @staticmethod @permalink def create_url(slug): - return 'catalogue.views.book_detail', [slug] + return 'book_detail', [slug] def gallery_path(self): return gallery_path(self.slug) @@ -229,11 +250,9 @@ class Book(models.Model): return '%d:%02d:%02d' % (hours, minutes, seconds) def get_audio_length(self): - from mutagen.mp3 import MP3 total = 0 for media in self.get_mp3() or (): - audio = MP3(media.file.path) - total += audio.info.length + total += app_settings.GET_MP3_LENGTH(media.file.path) return int(total) def has_media(self, type_): @@ -782,6 +801,12 @@ class Book(models.Model): if likes(user, self): set_sets(user, self, []) + def full_sort_key(self): + return self.SORT_KEY_SEP.join((self.sort_key_author, self.sort_key, str(self.id))) + + def cover_color(self): + return WLCover.epoch_colors.get(self.extra_info.get('epoch'), '#000000') + def add_file_fields(): for format_ in Book.formats: