# -*- coding: utf-8 -*-
+import os.path
from django.db import models
+from time import sleep
from jsonfield.fields import JSONField
+from django.utils.encoding import force_bytes
from django.utils.translation import ugettext_lazy as _
from archive.constants import status
-from archive.settings import FILES_PATH, ADVERT, LICENSE, ORGANIZATION, PROJECT
+from archive.settings import FILES_SAVE_PATH, ADVERT, LICENSE, ORGANIZATION, PROJECT
+from archive.utils import OverwriteStorage, sha1_file
# Create your models here.
return self.name
+def source_upload_to(intance, filename):
+ return os.path.join(FILES_SAVE_PATH, filename) # FIXME: what about really long file names?
+
+
class Audiobook(models.Model):
- source_file = models.FileField(upload_to='archive/files', max_length=255,
+ source_file = models.FileField(upload_to=source_upload_to, max_length=255,
verbose_name=_('source file'), editable=False)
source_sha1 = models.CharField(max_length=40, editable=False)
title = models.CharField(max_length=255, verbose_name=_('title'))
+ part_name = models.CharField(max_length=255, verbose_name=_('part name'), help_text=_('eg. chapter in a novel'),
+ default='', blank=True)
+ index = models.IntegerField(verbose_name=_('index'), default=0)
+ parts_count = models.IntegerField(verbose_name=_('parts count'), default=1)
artist = models.CharField(max_length=255, verbose_name=_('artist'))
conductor = models.CharField(max_length=255, verbose_name=_('conductor'))
encoded_by = models.CharField(max_length=255, verbose_name=_('encoded by'))
mp3_status = models.SmallIntegerField(null=True, editable=False, choices=status.choices)
mp3_task = models.CharField(max_length=64, null=True, editable=False)
mp3_tags = JSONField(null=True, editable=False)
- mp3_file = models.FileField(null=True, upload_to='archive/final', editable=False)
+ mp3_file = models.FileField(null=True, upload_to='archive/final', storage=OverwriteStorage(), editable=False)
mp3_published_tags = JSONField(null=True, editable=False)
mp3_published = models.DateTimeField(null=True, editable=False)
ogg_status = models.SmallIntegerField(null=True, editable=False, choices=status.choices)
ogg_task = models.CharField(max_length=64, null=True, editable=False)
ogg_tags = JSONField(null=True, editable=False)
- ogg_file = models.FileField(null=True, upload_to='archive/final', editable=False)
+ ogg_file = models.FileField(null=True, upload_to='archive/final', storage=OverwriteStorage(), editable=False)
ogg_published_tags = JSONField(null=True, editable=False)
ogg_published = models.DateTimeField(null=True, editable=False)
def published(self):
return self.mp3_published and self.ogg_published
+ def get_source_sha1(self):
+ source_sha1 = self.source_sha1
+ if self.pk:
+ source_sha1 = type(self).objects.get(pk=self.pk).source_sha1
+ while source_sha1 == 'wait':
+ sleep(10)
+ if not source_sha1:
+ self.source_sha1 = 'wait'
+ if self.pk:
+ type(self).objects.filter(pk=self.pk).update(source_sha1='wait')
+ try:
+ f = open(force_bytes(self.source_file.path))
+ source_sha1 = sha1_file(f)
+ self.source_sha1 = source_sha1
+ if self.pk:
+ type(self).objects.filter(pk=self.pk).update(source_sha1=source_sha1)
+ except:
+ self.source_sha1 = ''
+ if self.pk:
+ type(self).objects.filter(pk=self.pk).update(source_sha1='')
+ return None
+ return source_sha1
+
+
def new_publish_tags(self):
title = self.title
if self.translator:
u" finansowanego przez %s" % self.project.sponsors if self.project.sponsors else "",
ADVERT)
- return {
+ tags = {
'album': PROJECT,
'albumartist': ORGANIZATION,
'artist': self.artist,
'license': LICENSE,
'organization': ORGANIZATION,
'title': title,
- 'flac_sha1': self.source_sha1,
+ #'flac_sha1': self.get_source_sha1(),
+ 'project': self.project.name,
+ 'funded_by': self.project.sponsors,
}
+ if self.source_sha1 and self.source_sha1 != 'wait':
+ tags['flac_sha1'] = self.source_sha1
+ return tags
+