X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/9a8e8a433dfa6d7c3789f6d996fd2e122b461c08..94bfc24e8c353a678b72f37c86adf9a4a7a78ffd:/apps/catalogue/models.py diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index 483fddab0..ad56496f2 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 = ( @@ -94,6 +95,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') @@ -128,6 +131,20 @@ class Book(models.Model): 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 +188,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()