X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/1b9cdd6220596c93a73c180249a10e6d6f9bd3e4..e6239f4e83a99503be4c09c329029df1d3f2b5b9:/src/catalogue/models/book.py diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index 8597eac75..e9050d0c4 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -7,6 +7,7 @@ from datetime import date, timedelta from random import randint import os.path import re +import requests from slugify import slugify from sortify import sortify from urllib.request import urlretrieve @@ -62,6 +63,8 @@ class Book(models.Model): preview_key = models.CharField(max_length=32, blank=True, null=True) findable = models.BooleanField('wyszukiwalna', default=True, db_index=True) can_sell = models.BooleanField('do sprzedaży', default=True) + can_sell_mp3 = models.BooleanField('do sprzedaży mp3', default=False) + isbn_mp3 = models.CharField('ISBN audiobooka', max_length=32, blank=True) # files generated during publication xml_file = fields.XmlField(storage=bofh_storage, with_etag=False) @@ -684,7 +687,7 @@ class Book(models.Model): @classmethod def from_text_and_meta(cls, raw_file, book_info, overwrite=False, dont_build=None, search_index=True, - remote_gallery_url=None, days=0, findable=True, logo=None, logo_mono=None, logo_alt=None, can_sell=None): + remote_gallery_url=None, days=0, findable=True, logo=None, logo_mono=None, logo_alt=None, can_sell=None, isbn_mp3=None): from catalogue import tasks if dont_build is None: @@ -741,6 +744,8 @@ class Book(models.Model): extra['logo_alt'] = logo_alt if can_sell is not None: book.can_sell = can_sell + if isbn_mp3 is not None: + book.isbn_mp3 = isbn_mp3 book.extra_info = json.dumps(extra) book.load_abstract() book.load_toc() @@ -801,7 +806,8 @@ class Book(models.Model): for format_ in constants.EBOOK_FORMATS_WITH_CHILDREN: if format_ not in dont_build: getattr(book, '%s_file' % format_).build_delay() - book.html_nonotes_file.build_delay() + if 'html_nonotes' not in dont_build: + book.html_nonotes_file.build_delay() if not settings.NO_SEARCH_INDEX and search_index and findable: tasks.index_book.delay(book.id) @@ -810,7 +816,8 @@ class Book(models.Model): child.parent_cover_changed() book.update_popularity() - tasks.update_references.delay(book.id) + if 'references' not in dont_build: + tasks.update_references.delay(book.id) cls.published.send(sender=cls, instance=book) return book @@ -906,6 +913,19 @@ class Book(models.Model): narrators.append(t) self.narrators.set(narrators) + def update_can_sell_mp3(self): + ret = True + for child in self.get_children(): + child.update_can_sell_mp3() + if not child.can_sell_mp3: + ret = False + if self.has_mp3_file(): + audio_items = requests.get(f'https://audio.wolnelektury.pl/archive/book/{self.slug}.json').json()['items'] + if not all(x['project']['can_sell'] for x in audio_items): + ret = False + self.can_sell_mp3 = ret + self.save(update_fields=['can_sell_mp3']) + @classmethod @transaction.atomic def repopulate_ancestors(cls):