X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/02fb0f76b6b1e69383b8fc61d3aa819d6598f9f8..d8c37344ee1994d4e9e567682cb798856cd38c77:/src/catalogue/models/book.py diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index 60ef5d53c..8b5ac637f 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -83,27 +83,32 @@ class Book(models.Model): null=True, blank=True, upload_to=_cover_upload_to, storage=bofh_storage, max_length=255) + cover_etag = models.CharField(max_length=255, editable=False, default='', db_index=True) # Cleaner version of cover for thumbs cover_thumb = EbookField( 'cover_thumb', _('cover thumbnail'), null=True, blank=True, upload_to=_cover_thumb_upload_to, max_length=255) + cover_thumb_etag = models.CharField(max_length=255, editable=False, default='', db_index=True) cover_api_thumb = EbookField( 'cover_api_thumb', _('cover thumbnail for mobile app'), null=True, blank=True, upload_to=_cover_api_thumb_upload_to, max_length=255) + cover_api_thumb_etag = models.CharField(max_length=255, editable=False, default='', db_index=True) simple_cover = EbookField( 'simple_cover', _('cover for mobile app'), null=True, blank=True, upload_to=_simple_cover_upload_to, max_length=255) + simple_cover_etag = models.CharField(max_length=255, editable=False, default='', db_index=True) cover_ebookpoint = EbookField( 'cover_ebookpoint', _('cover for Ebookpoint'), null=True, blank=True, upload_to=_cover_ebookpoint_upload_to, max_length=255) + cover_ebookpoint_etag = models.CharField(max_length=255, editable=False, default='', db_index=True) ebook_formats = constants.EBOOK_FORMATS formats = ebook_formats + ['html', 'xml'] @@ -198,6 +203,19 @@ class Book(models.Model): def cover_source(self): return self.get_extra_info_json().get('cover_source', self.parent.cover_source() if self.parent else '') + @property + def isbn_pdf(self): + return self.get_extra_info_json().get('isbn_pdf') + + @property + def isbn_epub(self): + return self.get_extra_info_json().get('isbn_epub') + + @property + def isbn_mobi(self): + return self.get_extra_info_json().get('isbn_mobi') + + def save(self, force_insert=False, force_update=False, **kwargs): from sortify import sortify @@ -229,6 +247,41 @@ class Book(models.Model): def gallery_url(self): return gallery_url(self.slug) + def get_first_text(self): + if self.html_file: + return self + child = self.children.all().order_by('parent_number').first() + if child is not None: + return child.get_first_text() + + def get_last_text(self): + if self.html_file: + return self + child = self.children.all().order_by('parent_number').last() + if child is not None: + return child.get_last_text() + + def get_prev_text(self): + if not self.parent: + return None + sibling = self.parent.children.filter(parent_number__lt=self.parent_number).order_by('-parent_number').first() + if sibling is not None: + return sibling.get_last_text() + return self.parent.get_prev_text() + + def get_next_text(self): + if not self.parent: + return None + sibling = self.parent.children.filter(parent_number__gt=self.parent_number).order_by('parent_number').first() + if sibling is not None: + return sibling.get_first_text() + return self.parent.get_next_text() + + def get_siblings(self): + if not self.parent: + return [] + return self.parent.children.all().order_by('parent_number') + @property def name(self): return self.title @@ -843,6 +896,8 @@ def add_file_fields(): blank=True, default='' ).contribute_to_class(Book, field_name) + if format_ != 'xml': + models.CharField(max_length=255, editable=False, default='', db_index=True).contribute_to_class(Book, f'{field_name}_etag') add_file_fields()