X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/c5ea139487880deff9b5929b91a7045f958d2cc4..afddfc678f3ec8bbb39ae6a7d4ccbc4d2007416f:/apps/catalogue/models.py diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index 84bcfd342..df7a79ece 100644 --- a/apps/catalogue/models.py +++ b/apps/catalogue/models.py @@ -17,7 +17,8 @@ from django.conf import settings from newtagging.models import TagBase, tags_updated from newtagging import managers -from catalogue.fields import JSONField +from catalogue.fields import JSONField, OverwritingFileField +from catalogue.utils import ExistingFile from librarian import dcparser, html, epub, NoDublinCore import mutagen @@ -176,14 +177,14 @@ def book_upload_path(ext=None, maxlen=100): name = slughifi(filename.split(".")[0]) else: name = slughifi(media.name) - return 'lektura/%s.%s' % (name[:maxlen-len('lektura/.%s' % ext)-4], ext) + return 'book/%s/%s.%s' % (ext, name[:maxlen-len('book/%s/.%s' % (ext, ext))-4], ext) return get_dynamic_path class BookMedia(models.Model): type = models.CharField(_('type'), choices=MEDIA_FORMATS, max_length="100") name = models.CharField(_('name'), max_length="100") - file = models.FileField(_('file'), upload_to=book_upload_path()) + file = OverwritingFileField(_('file'), upload_to=book_upload_path()) uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False) extra_info = JSONField(_('extra information'), default='{}', editable=False) book = models.ForeignKey('Book', related_name='media') @@ -198,6 +199,15 @@ class BookMedia(models.Model): verbose_name_plural = _('book media') def save(self, *args, **kwargs): + try: + old = BookMedia.objects.get(pk=self.pk) + except BookMedia.DoesNotExist, e: + pass + else: + # if name changed, change the file name, too + if self.name != old.name: + self.file.save(None, ExistingFile(self.file.path), save=False, leave=True) + super(BookMedia, self).save(*args, **kwargs) extra_info = self.get_extra_info_value() extra_info.update(self.read_meta()) @@ -210,12 +220,16 @@ class BookMedia(models.Model): Reads some metadata from the audiobook. """ - artist_name = director_name = '' + artist_name = director_name = project = funded_by = '' 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')) + project = ", ".join([t.data for t in audio.getall('PRIV') + if t.owner=='wolnelektury.pl?project']) + funded_by = ", ".join([t.data for t in audio.getall('PRIV') + if t.owner=='wolnelektury.pl?funded_by']) except: pass elif self.type == 'ogg': @@ -223,11 +237,14 @@ class BookMedia(models.Model): audio = mutagen.File(self.file.path) artist_name = ', '.join(audio.get('artist', [])) director_name = ', '.join(audio.get('conductor', [])) + project = ", ".join(audio.get('project', [])) + funded_by = ", ".join(audio.get('funded_by', [])) except: pass else: return {} - return {'artist_name': artist_name, 'director_name': director_name} + return {'artist_name': artist_name, 'director_name': director_name, + 'project': project, 'funded_by': funded_by} @staticmethod def read_source_sha1(filepath, filetype): @@ -239,7 +256,7 @@ class BookMedia(models.Model): try: audio = id3.ID3(filepath) return [t.data for t in audio.getall('PRIV') - if t.owner=='http://wolnelektury.pl?flac_sha1'][0] + if t.owner=='wolnelektury.pl?flac_sha1'][0] except: return None elif filetype == 'ogg':