common_slug = models.SlugField('wspólny slug', max_length=120, db_index=True)
language = models.CharField('kod języka', max_length=3, db_index=True, default=app_settings.DEFAULT_LANGUAGE)
description = models.TextField('opis', blank=True)
+ license = models.CharField('licencja', max_length=255, blank=True, db_index=True)
abstract = models.TextField('abstrakt', blank=True)
toc = models.TextField('spis treści', blank=True)
created_at = models.DateTimeField('data utworzenia', auto_now_add=True, db_index=True)
# files generated during publication
xml_file = fields.XmlField(storage=bofh_storage, with_etag=False)
html_file = fields.HtmlField(storage=bofh_storage)
+ html_nonotes_file = fields.HtmlNonotesField(storage=bofh_storage)
fb2_file = fields.Fb2Field(storage=bofh_storage)
txt_file = fields.TxtField(storage=bofh_storage)
epub_file = fields.EpubField(storage=bofh_storage)
'okładka dla Ebookpoint')
ebook_formats = constants.EBOOK_FORMATS
- formats = ebook_formats + ['html', 'xml']
+ formats = ebook_formats + ['html', 'xml', 'html_nonotes']
parent = models.ForeignKey('self', models.CASCADE, blank=True, null=True, related_name='children')
ancestor = models.ManyToManyField('self', blank=True, editable=False, related_name='descendant', symmetrical=False)
tagged = managers.ModelTaggedItemManager(Tag)
tags = managers.TagDescriptor(Tag)
tag_relations = GenericRelation(Tag.intermediary_table_model)
+ translators = models.ManyToManyField(Tag, blank=True)
html_built = django.dispatch.Signal()
published = django.dispatch.Signal()
def genre_unicode(self):
return self.tag_unicode('genre')
- def translators(self):
- translators = self.get_extra_info_json().get('translators') or []
- return [
- '\xa0'.join(reversed(translator.split(', ', 1))) for translator in translators
- ]
-
def translator(self):
translators = self.get_extra_info_json().get('translators')
if not translators:
total += app_settings.GET_MP3_LENGTH(media.file.path)
return int(total)
+ def get_time(self):
+ return round(self.xml_file.size / 1000 * 40)
+
def has_media(self, type_):
if type_ in Book.formats:
return bool(getattr(self, "%s_file" % type_))
def html_url(self):
return self.media_url('html')
+ def html_nonotes_url(self):
+ return self.media_url('html_nonotes')
+
def pdf_url(self):
return self.media_url('pdf')
has_daisy_file.boolean = True
def has_sync_file(self):
- return self.has_media("sync")
+ return settings.FEATURE_SYNCHRO and self.has_media("sync")
def get_sync(self):
with self.get_media('sync').first().file.open('r') as f:
@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):
+ remote_gallery_url=None, days=0, findable=True, logo=None, logo_mono=None, logo_alt=None):
from catalogue import tasks
if dont_build is None:
book.findable = findable
book.language = book_info.language
book.title = book_info.title
+ book.license = book_info.license
if book_info.variant_of:
book.common_slug = book_info.variant_of.slug
else:
extra['logo'] = logo
if logo_mono:
extra['logo_mono'] = logo_mono
+ if logo_alt:
+ extra['logo_alt'] = logo_alt
book.extra_info = json.dumps(extra)
book.load_abstract()
book.load_toc()
meta_tags = Tag.tags_from_info(book_info)
- for tag in meta_tags:
- if not tag.for_books:
- tag.for_books = True
- tag.save()
-
- book.tags = set(meta_tags + book_shelves)
+ just_tags = [t for (t, rel) in meta_tags if not rel]
+ book.tags = set(just_tags + book_shelves)
book.save() # update sort_key_author
+ book.translators.set([t for (t, rel) in meta_tags if rel == 'translator'])
+
cover_changed = old_cover != book.cover_info()
obsolete_children = set(b for b in book.children.all()
if b not in children)
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 not settings.NO_SEARCH_INDEX and search_index and findable:
tasks.index_book.delay(book.id)