X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/c2e8051452fa55db096553cbe5ae622fc363d481..b89ddf83530285bc57f8c176089cbb769ffe953b:/src/catalogue/models/bookmedia.py?ds=sidebyside diff --git a/src/catalogue/models/bookmedia.py b/src/catalogue/models/bookmedia.py index d1f2bf04d..14483eb83 100644 --- a/src/catalogue/models/bookmedia.py +++ b/src/catalogue/models/bookmedia.py @@ -13,7 +13,13 @@ from catalogue.fields import OverwriteStorage def _file_upload_to(i, _n): - return 'book/%(ext)s/%(name)s.%(ext)s' % {'ext': i.ext(), 'name': slugify(i.name)} + name = i.book.slug + if i.index: + name += f'_{i.index:03d}' + if i.part_name: + name += f'_' + slugify(i.part_name) + ext = i.ext() + return f'book/{ext}/{name}.{ext}' class BookMedia(models.Model): @@ -32,15 +38,17 @@ class BookMedia(models.Model): index = models.IntegerField(_('index'), default=0) file = models.FileField(_('file'), max_length=600, upload_to=_file_upload_to, storage=OverwriteStorage()) uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False, db_index=True) + project_description = models.CharField(max_length=2048, blank=True) + project_icon = models.CharField(max_length=2048, blank=True) extra_info = models.TextField(_('extra information'), default='{}', editable=False) book = models.ForeignKey('Book', models.CASCADE, related_name='media') source_sha1 = models.CharField(null=True, blank=True, max_length=40, editable=False) def __str__(self): - return "%s (%s)" % (self.name, self.file.name.split("/")[-1]) + return self.file.name.split("/")[-1] class Meta: - ordering = ('type', 'name') + ordering = ('type', 'index') verbose_name = _('book media') verbose_name_plural = _('book media') app_label = 'catalogue' @@ -90,12 +98,13 @@ class BookMedia(models.Model): import mutagen from mutagen import id3 - artist_name = director_name = project = funded_by = '' + artist_name = director_name = project = funded_by = license = '' if self.type == 'mp3': try: audio = id3.ID3(self.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')) + license = ', '.join(tag.url for tag in audio.getall('WCOP')) project = ", ".join([ t.data.decode('utf-8') for t in audio.getall('PRIV') if t.owner == 'wolnelektury.pl?project']) @@ -109,6 +118,7 @@ class BookMedia(models.Model): audio = mutagen.File(self.file.path) artist_name = ', '.join(audio.get('artist', [])) director_name = ', '.join(audio.get('conductor', [])) + license = ', '.join(audio.get('license', [])) project = ", ".join(audio.get('project', [])) funded_by = ", ".join(audio.get('funded_by', [])) except (MutagenError, AttributeError): @@ -116,7 +126,7 @@ class BookMedia(models.Model): else: return {} return {'artist_name': artist_name, 'director_name': director_name, - 'project': project, 'funded_by': funded_by} + 'project': project, 'funded_by': funded_by, 'license': license} def ext(self): return self.formats[self.type].ext