X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/069d8476540f79fb4c37ccd219d6b794656baf0d..22f9e2afd2c1c82a804c183cbce4e6d0a00d829e:/apps/catalogue/models.py diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index 87c4fa6ee..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,12 +199,20 @@ 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()) self.set_extra_info_value(extra_info) self.source_sha1 = self.read_source_sha1(self.file.path, self.type) - print self.extra_info, self.source_sha1 return super(BookMedia, self).save(*args, **kwargs) def read_meta(self): @@ -211,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': @@ -224,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): @@ -240,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':