forked from rc/aircox
		
	work on admin
This commit is contained in:
		@ -259,15 +259,11 @@ class SoundFile (Metadata):
 | 
			
		||||
        return os.path.join(path, filename)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    parent      = models.ForeignKey(
 | 
			
		||||
                      'Episode'
 | 
			
		||||
                    , verbose_name = _('episode')
 | 
			
		||||
                    , blank = True
 | 
			
		||||
                    , null = True
 | 
			
		||||
                  )
 | 
			
		||||
    file        = models.FileField( #FIXME: filefield
 | 
			
		||||
                      _('file')
 | 
			
		||||
                    , upload_to = get_upload_path
 | 
			
		||||
                    , blank = True
 | 
			
		||||
                    , null = True
 | 
			
		||||
                  )
 | 
			
		||||
    duration    = models.TimeField(
 | 
			
		||||
                      _('duration')
 | 
			
		||||
@ -430,6 +426,56 @@ class Schedule (Model):
 | 
			
		||||
        return dates
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def diffusions_of_month (self, date = None, exclude_saved = False):
 | 
			
		||||
        """
 | 
			
		||||
        Return a list of generated (unsaved) diffusions for this program for the
 | 
			
		||||
        month of the given date. If exclude_saved, exclude all diffusions that
 | 
			
		||||
        are yet in the database.
 | 
			
		||||
 | 
			
		||||
        When a diffusion is created, it tries to attach the corresponding
 | 
			
		||||
        episode.
 | 
			
		||||
        """
 | 
			
		||||
        if not date:
 | 
			
		||||
            date = timezone.datetime.today()
 | 
			
		||||
 | 
			
		||||
        diffusions = []
 | 
			
		||||
 | 
			
		||||
        dates = self.dates_of_month()
 | 
			
		||||
        saved = Diffusion.objects.filter( date__in = dates
 | 
			
		||||
                                        , program = self.parent )
 | 
			
		||||
 | 
			
		||||
        # existing diffusions
 | 
			
		||||
        for saved_item in saved:
 | 
			
		||||
            dates.remove(saved_item.date)
 | 
			
		||||
            if not exclude_saved:
 | 
			
		||||
                diffusions.append(saved_item)
 | 
			
		||||
 | 
			
		||||
        # others
 | 
			
		||||
        for date in dates:
 | 
			
		||||
            # get episode
 | 
			
		||||
            ep_date = date
 | 
			
		||||
            if self.rerun:
 | 
			
		||||
                ep_date = self.rerun.date
 | 
			
		||||
 | 
			
		||||
            episode = Episode.objects().filter( date = ep_date
 | 
			
		||||
                                              , parent = self.parent )
 | 
			
		||||
            episode  = episode[0] if episode.count() else None
 | 
			
		||||
 | 
			
		||||
            # make diffusion
 | 
			
		||||
            diffusion = Diffusion( parent = episode
 | 
			
		||||
                         , program = self.parent
 | 
			
		||||
                         , type = DiffusionType['diffuse']
 | 
			
		||||
                         , date = date
 | 
			
		||||
                         , stream = settings.AIRCOX_SCHEDULED_STREAM
 | 
			
		||||
                         , selfd = True
 | 
			
		||||
                         )
 | 
			
		||||
            diffusion.program = self.program
 | 
			
		||||
            diffusions.append(diffusion)
 | 
			
		||||
        return diffusions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def __str__ (self):
 | 
			
		||||
        frequency = [ x for x,y in Frequency.items() if y == self.frequency ]
 | 
			
		||||
        return self.parent.title + ': ' + frequency[0]
 | 
			
		||||
@ -447,6 +493,7 @@ class Article (Publication):
 | 
			
		||||
                  , verbose_name = _('parent')
 | 
			
		||||
                  , blank = True
 | 
			
		||||
                  , null = True
 | 
			
		||||
                  , help_text = _('parent article')
 | 
			
		||||
                  )
 | 
			
		||||
    static_page = models.BooleanField(
 | 
			
		||||
                    _('static page')
 | 
			
		||||
@ -471,6 +518,7 @@ class Program (Publication):
 | 
			
		||||
                  , verbose_name = _('parent')
 | 
			
		||||
                  , blank = True
 | 
			
		||||
                  , null = True
 | 
			
		||||
                  , help_text = _('parent article')
 | 
			
		||||
                  )
 | 
			
		||||
    email       = models.EmailField(
 | 
			
		||||
                    _('email')
 | 
			
		||||
@ -491,16 +539,14 @@ class Program (Publication):
 | 
			
		||||
                           )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def find_schedules (self, date):
 | 
			
		||||
    def find_schedule (self, date):
 | 
			
		||||
        """
 | 
			
		||||
        Return schedules that match a given date
 | 
			
		||||
        Return the first schedule that matches a given date
 | 
			
		||||
        """
 | 
			
		||||
        schedules = Schedule.objects.filter(parent = self)
 | 
			
		||||
        r = []
 | 
			
		||||
        for schedule in schedules:
 | 
			
		||||
            if schedule.match_date(date):
 | 
			
		||||
                r.append(schedule)
 | 
			
		||||
        return r
 | 
			
		||||
            if schedule.match(date):
 | 
			
		||||
                return schedule
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
@ -521,12 +567,17 @@ class Episode (Publication):
 | 
			
		||||
    parent      = models.ForeignKey(
 | 
			
		||||
                      Program
 | 
			
		||||
                    , verbose_name = _('parent')
 | 
			
		||||
                    , help_text = _('parent program')
 | 
			
		||||
                  )
 | 
			
		||||
    tracks      = SortedManyToManyField(
 | 
			
		||||
    #tracks      = models.ManyToManyField(
 | 
			
		||||
                      Track
 | 
			
		||||
                    , verbose_name = _('tracks')
 | 
			
		||||
                  )
 | 
			
		||||
 | 
			
		||||
    sounds      = SortedManyToManyField(
 | 
			
		||||
                      SoundFile
 | 
			
		||||
                    , verbose_name = _('sounds')
 | 
			
		||||
                  )
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        verbose_name = _('Episode')
 | 
			
		||||
@ -546,9 +597,11 @@ class Diffusion (Model):
 | 
			
		||||
                      Episode
 | 
			
		||||
                    , blank = True
 | 
			
		||||
                    , null = True
 | 
			
		||||
                    , verbose_name = _('episode')
 | 
			
		||||
                  )
 | 
			
		||||
    program     = models.ForeignKey (
 | 
			
		||||
                      Program
 | 
			
		||||
                    , verbose_name = _('program')
 | 
			
		||||
                  )
 | 
			
		||||
    type        = models.SmallIntegerField(
 | 
			
		||||
                      verbose_name = _('type')
 | 
			
		||||
@ -561,7 +614,7 @@ class Diffusion (Model):
 | 
			
		||||
                    , help_text = 'stream id on which the diffusion happens'
 | 
			
		||||
                  )
 | 
			
		||||
    scheduled   = models.BooleanField(
 | 
			
		||||
                      verbose_name = _('automated')
 | 
			
		||||
                      verbose_name = _('scheduled')
 | 
			
		||||
                    , default = False
 | 
			
		||||
                    , help_text = 'diffusion generated automatically'
 | 
			
		||||
                  )
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user