X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/ae60b2a3949e96357477cc04f90fd0873cee8a92..05e5b36046d980e84776978660f420b008db4879:/src/catalogue/fields.py diff --git a/src/catalogue/fields.py b/src/catalogue/fields.py index 42612522c..21d2bcf72 100644 --- a/src/catalogue/fields.py +++ b/src/catalogue/fields.py @@ -4,11 +4,12 @@ # from django.conf import settings from django.core.files import File +from django.core.files.storage import FileSystemStorage from django.db import models from django.db.models.fields.files import FieldFile from catalogue import app_settings from catalogue.constants import LANGUAGES_3TO2 -from catalogue.utils import remove_zip, truncate_html_words +from catalogue.utils import remove_zip, truncate_html_words, gallery_path, gallery_url from celery.task import Task, task from celery.utils.log import get_task_logger from waiter.utils import clear_cache @@ -117,7 +118,8 @@ class BuildTxt(BuildEbook): class BuildPdf(BuildEbook): @staticmethod def transform(wldoc, fieldfile): - return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, cover=True) + return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, cover=True, + ilustr_path=gallery_path(wldoc.book_info.url.slug)) def build(self, fieldfile): BuildEbook.build(self, fieldfile) @@ -129,7 +131,15 @@ class BuildPdf(BuildEbook): class BuildEpub(BuildEbook): @staticmethod def transform(wldoc, fieldfile): - return wldoc.as_epub(cover=True) + return wldoc.as_epub(cover=True, ilustr_path=gallery_path(wldoc.book_info.url.slug)) + + +@BuildEbook.register('mobi') +@task(ignore_result=True) +class BuildMobi(BuildEbook): + @staticmethod + def transform(wldoc, fieldfile): + return wldoc.as_mobi(cover=True, ilustr_path=gallery_path(wldoc.book_info.url.slug)) @BuildEbook.register('html') @@ -144,9 +154,7 @@ class BuildHtml(BuildEbook): book = fieldfile.instance - html_output = self.transform( - book.wldocument(parse_dublincore=False), - fieldfile) + html_output = self.transform(book.wldocument(parse_dublincore=False), fieldfile) # Delete old fragments, create from scratch if necessary. book.fragments.all().delete() @@ -210,6 +218,17 @@ class BuildHtml(BuildEbook): return True return False + @staticmethod + def transform(wldoc, fieldfile): + # ugly, but we can't use wldoc.book_info here + from librarian import DCNS + url_elem = wldoc.edoc.getroot().find('.//' + DCNS('identifier.url')) + if url_elem is None: + gallery = '' + else: + gallery = gallery_url(slug=url_elem.text.rsplit('/', 1)[1]) + return wldoc.as_html(options={'gallery': "'%s'" % gallery}) + @BuildEbook.register('cover_thumb') @task(ignore_result=True) @@ -220,6 +239,7 @@ class BuildCoverThumb(BuildEbook): return WLCover(wldoc.book_info, height=193).output_file() +# not used, but needed for migrations class OverwritingFieldFile(FieldFile): """ Deletes the old file before saving the new one. @@ -235,3 +255,10 @@ class OverwritingFieldFile(FieldFile): class OverwritingFileField(models.FileField): attr_class = OverwritingFieldFile + + +class OverwriteStorage(FileSystemStorage): + + def get_available_name(self, name, max_length=None): + self.delete(name) + return name