X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/dbb1ae2cf25105f7a3831961b08386a1326baef8..08433423130c027b64c87c13c1bb4d2390694263:/apps/catalogue/models/book.py diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py index bd7d7e49a..bab6f5878 100644 --- a/apps/catalogue/models/book.py +++ b/apps/catalogue/models/book.py @@ -8,21 +8,34 @@ from django.core.cache import get_cache from django.db import models from django.db.models import permalink import django.dispatch +from django.core.urlresolvers import reverse from django.utils.datastructures import SortedDict from django.utils.translation import ugettext_lazy as _ import jsonfield +from fnpdjango.storage import BofhFileSystemStorage from catalogue import constants from catalogue.fields import EbookField from catalogue.models import Tag, Fragment, BookMedia -from catalogue.utils import create_zip, split_tags, book_upload_path, related_tag_name +from catalogue.utils import create_zip, split_tags, related_tag_name from catalogue import app_settings from catalogue import tasks from newtagging import managers +bofh_storage = BofhFileSystemStorage() permanent_cache = get_cache('permanent') +def _cover_upload_to(i, n): + return 'book/cover/%s.jpg' % i.slug +def _cover_thumb_upload_to(i, n): + return 'book/cover_thumb/%s.jpg' % i.slug, +def _ebook_upload_to(upload_path): + def _upload_to(i, n): + return upload_path % i.slug + return _upload_to + + class Book(models.Model): """Represents a book imported from WL-XML.""" title = models.CharField(_('title'), max_length=120) @@ -43,10 +56,14 @@ class Book(models.Model): # files generated during publication cover = EbookField('cover', _('cover'), - upload_to=book_upload_path('jpg'), null=True, blank=True) + null=True, blank=True, + upload_to=_cover_upload_to, + storage=bofh_storage, max_length=255) # Cleaner version of cover for thumbs - cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), - upload_to=book_upload_path('th.jpg'), null=True, blank=True) + cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), + null=True, blank=True, + upload_to=_cover_thumb_upload_to, + max_length=255) ebook_formats = constants.EBOOK_FORMATS formats = ebook_formats + ['html', 'xml'] @@ -315,18 +332,16 @@ class Book(models.Model): if old_cover: notify_cover_changed.append(child) - # delete old fragments when overwriting - book.fragments.all().delete() - # Build HTML, fix the tree tags, build cover. - has_own_text = bool(book.html_file.build()) - tasks.fix_tree_tags.delay(book) + # No saves beyond this point. + + # Build cover. if 'cover' not in dont_build: book.cover.build_delay() book.cover_thumb.build_delay() - # No saves behind this point. - - if has_own_text: + # Build HTML and ebooks. + book.html_file.build_delay() + if not children: for format_ in constants.EBOOK_FORMATS_WITHOUT_CHILDREN: if format_ not in dont_build: getattr(book, '%s_file' % format_).build_delay() @@ -606,6 +621,14 @@ class Book(models.Model): audiences = sorted(set([self._audiences_pl.get(a, (99, a)) for a in audiences])) return [a[1] for a in audiences] + def stage_note(self): + stage = self.extra_info.get('stage') + if stage and stage < '0.4': + return (_('This work needs modernisation'), + reverse('infopage', args=['wymagajace-uwspolczesnienia'])) + else: + return None, None + def choose_fragment(self): tag = self.book_tag() fragments = Fragment.tagged.with_any([tag]) @@ -620,6 +643,11 @@ class Book(models.Model): # add the file fields for format_ in Book.formats: field_name = "%s_file" % format_ + upload_to = _ebook_upload_to('book/%s/%%s.%s' % (format_, format_)) EbookField(format_, _("%s file" % format_.upper()), - upload_to=book_upload_path(format_), - blank=True, default='').contribute_to_class(Book, field_name) + upload_to=upload_to, + storage=bofh_storage, + max_length=255, + blank=True, + default='' + ).contribute_to_class(Book, field_name)