X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/9a8e8a433dfa6d7c3789f6d996fd2e122b461c08..1cd04c089c97bd20d66453089ed61b547d088cbe:/apps/catalogue/models.py diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index 483fddab0..4dde4e0d8 100644 --- a/apps/catalogue/models.py +++ b/apps/catalogue/models.py @@ -13,6 +13,7 @@ from newtagging import managers from catalogue.fields import JSONField from librarian import html, dcparser +from mutagen import id3 TAG_CATEGORIES = ( @@ -46,6 +47,8 @@ class Tag(TagBase): user = models.ForeignKey(User, blank=True, null=True) book_count = models.IntegerField(_('book count'), default=0, blank=False, null=False) + gazeta_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) def has_description(self): return len(self.description) > 0 @@ -87,6 +90,9 @@ class Book(models.Model): _short_html = models.TextField(_('short HTML'), editable=False) parent_number = models.IntegerField(_('parent number'), default=0) extra_info = JSONField(_('extra information')) + gazeta_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + # Formats xml_file = models.FileField(_('XML file'), upload_to=book_upload_path('xml'), blank=True) @@ -94,6 +100,8 @@ class Book(models.Model): pdf_file = models.FileField(_('PDF file'), upload_to=book_upload_path('pdf'), blank=True) odt_file = models.FileField(_('ODT file'), upload_to=book_upload_path('odt'), blank=True) txt_file = models.FileField(_('TXT file'), upload_to=book_upload_path('txt'), blank=True) + mp3_file = models.FileField(_('MP3 file'), upload_to=book_upload_path('mp3'), blank=True) + ogg_file = models.FileField(_('OGG file'), upload_to=book_upload_path('ogg'), blank=True) parent = models.ForeignKey('self', blank=True, null=True, related_name='children') @@ -117,17 +125,35 @@ class Book(models.Model): if self.html_file: formats.append(u'Czytaj online' % reverse('book_text', kwargs={'slug': self.slug})) if self.pdf_file: - formats.append(u'Plik PDF' % self.pdf_file.url) + formats.append(u'PDF' % self.pdf_file.url) if self.odt_file: - formats.append(u'Plik ODT' % self.odt_file.url) + formats.append(u'ODT' % self.odt_file.url) if self.txt_file: - formats.append(u'Plik TXT' % self.txt_file.url) + formats.append(u'TXT' % self.txt_file.url) + if self.mp3_file: + formats.append(u'MP3' % self.mp3_file.url) + if self.ogg_file: + formats.append(u'OGG' % self.ogg_file.url) self._short_html = unicode(render_to_string('catalogue/book_short.html', {'book': self, 'tags': tags, 'formats': formats})) self.save() return mark_safe(self._short_html) + def save(self, force_insert=False, force_update=False): + if self.mp3_file: + extra_info = self.get_extra_info_value() + extra_info.update(self.get_mp3_info()) + self.set_extra_info_value(extra_info) + return super(Book, self).save(force_insert, force_update) + + def get_mp3_info(self): + """Retrieves artist and director names from audio ID3 tags.""" + audio = id3.ID3(self.mp3_file.path) + artist_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE1')) + director_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE3')) + return {'artist_name': artist_name, 'director_name': director_name} + def has_description(self): return len(self.description) > 0 has_description.short_description = _('description') @@ -171,7 +197,7 @@ class Book(models.Model): book_shelves = list(book.tags.filter(category='set')) book.title = book_info.title - book.extra_info = book_info.to_dict() + book.set_extra_info_value(book_info.to_dict()) book._short_html = '' book.save() @@ -216,7 +242,9 @@ class Book(models.Model): book_descendants += list(child_book.children.all()) # Save XML and HTML files - book.xml_file.save('%s.xml' % book.slug, File(file(xml_file)), save=False) + if not isinstance(xml_file, File): + xml_file = File(file(xml_file)) + book.xml_file.save('%s.xml' % book.slug, xml_file, save=False) html_file = NamedTemporaryFile() if html.transform(book.xml_file.path, html_file):