+ # ugly ugly ugly
+ def has_mp3_file(self):
+ return bool(self.has_media("mp3"))
+ has_mp3_file.short_description = 'MP3'
+ has_mp3_file.boolean = True
+
+ def has_ogg_file(self):
+ return bool(self.has_media("ogg"))
+ has_ogg_file.short_description = 'OGG'
+ has_ogg_file.boolean = True
+
+ def has_daisy_file(self):
+ return bool(self.has_media("daisy"))
+ has_daisy_file.short_description = 'DAISY'
+ has_daisy_file.boolean = True
+
+ def wldocument(self, parse_dublincore=True):
+ from catalogue.import_utils import ORMDocProvider
+ from librarian.parser import WLDocument
+
+ return WLDocument.from_file(self.xml_file.path,
+ provider=ORMDocProvider(self),
+ parse_dublincore=parse_dublincore)
+
+ def build_cover(self, book_info=None):
+ """(Re)builds the cover image."""
+ from StringIO import StringIO
+ from django.core.files.base import ContentFile
+ from librarian.cover import WLCover
+
+ if book_info is None:
+ book_info = self.wldocument().book_info
+
+ cover = WLCover(book_info).image()
+ imgstr = StringIO()
+ cover.save(imgstr, 'png')
+ self.cover.save(None, ContentFile(imgstr.getvalue()))
+
+ def build_pdf(self, customizations=None, file_name=None):
+ """ (Re)builds the pdf file.
+ customizations - customizations which are passed to LaTeX class file.
+ file_name - save the pdf file under a different name and DO NOT save it in db.
+ """
+ from os import unlink
+ from django.core.files import File
+ from catalogue.utils import remove_zip
+
+ pdf = self.wldocument().as_pdf(customizations=customizations)
+
+ if file_name is None:
+ # we'd like to be sure not to overwrite changes happening while
+ # (timely) pdf generation is taking place (async celery scenario)
+ current_self = Book.objects.get(id=self.id)
+ current_self.pdf_file.save('%s.pdf' % self.slug,
+ File(open(pdf.get_filename())))
+ self.pdf_file = current_self.pdf_file
+
+ # remove cached downloadables
+ remove_zip(settings.ALL_PDF_ZIP)
+
+ for customized_pdf in get_existing_customized_pdf(self):
+ unlink(customized_pdf)
+ else:
+ print "saving %s" % file_name
+ print "to: %s" % DefaultStorage().path(file_name)
+ DefaultStorage().save(file_name, File(open(pdf.get_filename())))
+
+ def build_mobi(self):
+ """ (Re)builds the MOBI file.
+
+ """
+ from django.core.files import File
+ from catalogue.utils import remove_zip
+
+ mobi = self.wldocument().as_mobi()
+
+ self.mobi_file.save('%s.mobi' % self.slug, File(open(mobi.get_filename())))
+
+ # remove zip with all mobi files
+ remove_zip(settings.ALL_MOBI_ZIP)
+
+ def build_epub(self):
+ """(Re)builds the epub file."""
+ from django.core.files import File
+ from catalogue.utils import remove_zip