X-Git-Url: https://git.0d.be/?p=django-panik-combo.git;a=blobdiff_plain;f=panikombo%2Fmodels.py;fp=panikombo%2Fmodels.py;h=d5419216d85aa8c49de12cb6a874ce27e4da1028;hp=905b7f2ff787f9a83e3c5ed8928f2428652719b2;hb=a26af06d5a8089f693280a7b54ba5159df9dc360;hpb=2d3ff552b71412f327543c6a55a6d3f0abafca13 diff --git a/panikombo/models.py b/panikombo/models.py index 905b7f2..d541921 100644 --- a/panikombo/models.py +++ b/panikombo/models.py @@ -15,7 +15,7 @@ from taggit.utils import parse_tags from combo.data.models import CellBase from combo.data.library import register_cell_class -from emissions.models import Episode, NewsItem +from emissions.models import Episode, NewsItem, SoundFile @register_cell_class class SoundCell(CellBase): @@ -221,3 +221,34 @@ class ItemTopik(models.Model): episode = models.ForeignKey('emissions.Episode', verbose_name=_('Episode'), null=True, blank=True) page = models.ForeignKey('data.Page', null=True, blank=True) + + +@register_cell_class +class SoundsCell(CellBase): + include_search_input = models.BooleanField(_('Include search input'), default=True) + include_fragments = models.BooleanField(_('Include fragments'), default=True) + limit_to_focus = models.BooleanField(_('Limit to focused elements'), default=False) + count = models.PositiveSmallIntegerField(_('Count'), default=20) + + class Meta: + verbose_name = _('Sounds') + + def get_cell_extra_context(self, context): + soundfiles = SoundFile.objects.prefetch_related('episode__emission__categories') + soundfiles = soundfiles.filter(podcastable=True) + if not self.include_fragments: + soundfiles = soundfiles.filter(fragment=False) + if self.limit_to_focus: + soundfiles = soundfiles.filter(got_focus__isnull=False) + soundfiles = soundfiles.select_related().extra( + select={'first_diffusion': 'emissions_diffusion.datetime', }, + select_params=(False, True), + where=['''datetime = (SELECT MIN(datetime) + FROM emissions_diffusion + WHERE episode_id = emissions_episode.id)'''], + tables=['emissions_diffusion'],).order_by('-creation_timestamp').distinct() + return { + 'include_search_input': self.include_search_input, + 'count': self.count, + 'soundfiles': soundfiles, + }