forked from rc/aircox
admin
This commit is contained in:
@ -12,6 +12,7 @@ from django.utils.html import strip_tags
|
||||
|
||||
# extensions
|
||||
from taggit.managers import TaggableManager
|
||||
from sortedm2m.fields import SortedManyToManyField
|
||||
|
||||
import programs.settings as settings
|
||||
|
||||
@ -48,7 +49,7 @@ ugettext_lazy('second and fourth')
|
||||
ugettext_lazy('one on two')
|
||||
|
||||
|
||||
EventType = {
|
||||
DiffusionType = {
|
||||
'diffuse': 0x01 # the diffusion is planified or done
|
||||
, 'cancel': 0x03 # the diffusion has been canceled from grid; useful to give
|
||||
# the info to the users
|
||||
@ -107,10 +108,10 @@ class Metadata (Model):
|
||||
_('date')
|
||||
, default = timezone.datetime.now
|
||||
)
|
||||
public = models.BooleanField(
|
||||
_('public')
|
||||
private = models.BooleanField(
|
||||
_('private')
|
||||
, default = False
|
||||
, help_text = _('publication is public')
|
||||
, help_text = _('publication is private')
|
||||
)
|
||||
# FIXME: add a field to specify if the element should be listed or not
|
||||
meta = models.TextField(
|
||||
@ -250,6 +251,14 @@ class Track (Model):
|
||||
|
||||
|
||||
class SoundFile (Metadata):
|
||||
def get_upload_path (self, filename):
|
||||
if self.parent and self.parent.parent:
|
||||
path = self.parent.parent.path
|
||||
else:
|
||||
path = settings.AIRCOX_SOUNDFILE_DEFAULT_DIR
|
||||
return os.path.join(path, filename)
|
||||
|
||||
|
||||
parent = models.ForeignKey(
|
||||
'Episode'
|
||||
, verbose_name = _('episode')
|
||||
@ -258,7 +267,7 @@ class SoundFile (Metadata):
|
||||
)
|
||||
file = models.FileField( #FIXME: filefield
|
||||
_('file')
|
||||
, upload_to = lambda i, f: SoundFile.__upload_path(i,f)
|
||||
, upload_to = get_upload_path
|
||||
)
|
||||
duration = models.TimeField(
|
||||
_('duration')
|
||||
@ -297,14 +306,6 @@ class SoundFile (Metadata):
|
||||
super(SoundFile, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
def __upload_path (self, filename):
|
||||
if self.parent and self.parent.parent:
|
||||
path = self.parent.parent.path
|
||||
else:
|
||||
path = settings.AIRCOX_SOUNDFILE_DEFAULT_DIR
|
||||
return os.path.join(path, filename)
|
||||
|
||||
|
||||
def __str__ (self):
|
||||
return str(self.id) + ': ' + self.file.name
|
||||
|
||||
@ -482,11 +483,6 @@ class Program (Publication):
|
||||
, blank = True
|
||||
, null = True
|
||||
)
|
||||
non_stop = models.SmallIntegerField(
|
||||
_('non-stop priority')
|
||||
, help_text = _('this program can be used as non-stop')
|
||||
, default = -1
|
||||
)
|
||||
|
||||
@property
|
||||
def path (self):
|
||||
@ -526,10 +522,9 @@ class Episode (Publication):
|
||||
Program
|
||||
, verbose_name = _('parent')
|
||||
)
|
||||
tracks = models.ManyToManyField(
|
||||
tracks = SortedManyToManyField(
|
||||
Track
|
||||
, verbose_name = _('playlist')
|
||||
, blank = True
|
||||
, verbose_name = _('tracks')
|
||||
)
|
||||
|
||||
|
||||
@ -539,11 +534,11 @@ class Episode (Publication):
|
||||
|
||||
|
||||
|
||||
class Event (Model):
|
||||
class Diffusion (Model):
|
||||
"""
|
||||
Event logs and planifications.
|
||||
Diffusion logs and planifications.
|
||||
|
||||
An event is:
|
||||
A diffusion is:
|
||||
- scheduled: when it has been generated following programs' Schedule
|
||||
- planified: when it has been generated manually/ponctually or scheduled
|
||||
"""
|
||||
@ -556,23 +551,29 @@ class Event (Model):
|
||||
Program
|
||||
)
|
||||
type = models.SmallIntegerField(
|
||||
_('type')
|
||||
, choices = [ (y, x) for x,y in EventType.items() ]
|
||||
verbose_name = _('type')
|
||||
, choices = [ (y, x) for x,y in DiffusionType.items() ]
|
||||
)
|
||||
date = models.DateTimeField( _('date of event start') )
|
||||
date = models.DateTimeField( _('date of diffusion start') )
|
||||
stream = models.SmallIntegerField(
|
||||
_('stream')
|
||||
verbose_name = _('stream')
|
||||
, default = 0
|
||||
, help_text = 'stream id on which the event happens'
|
||||
, help_text = 'stream id on which the diffusion happens'
|
||||
)
|
||||
scheduled = models.BooleanField(
|
||||
_('automated')
|
||||
verbose_name = _('automated')
|
||||
, default = False
|
||||
, help_text = 'event generated automatically'
|
||||
, help_text = 'diffusion generated automatically'
|
||||
)
|
||||
|
||||
def save (self, *args, **kwargs):
|
||||
if self.parent:
|
||||
self.program = self.parent.parent
|
||||
super(Diffusion, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Event')
|
||||
verbose_name_plural = _('Events')
|
||||
verbose_name = _('Diffusion')
|
||||
verbose_name_plural = _('Diffusions')
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user