aircox-radiocampus/aircox/views/episode.py
2020-11-08 17:54:49 +01:00

64 lines
2.0 KiB
Python

from collections import OrderedDict
import datetime
from django.utils.translation import gettext_lazy as _
from django.views.generic import ListView
from ..models import Diffusion, Episode, Program, StaticPage, Sound
from .base import BaseView
from .program import ProgramPageDetailView
from .page import PageListView
from .mixins import AttachedToMixin, GetDateMixin, ParentMixin
__all__ = ['EpisodeDetailView', 'EpisodeListView', 'DiffusionListView', 'SoundListView']
class EpisodeDetailView(ProgramPageDetailView):
model = Episode
def get_context_data(self, **kwargs):
if not 'tracks' in kwargs:
kwargs['tracks'] = self.object.track_set.order_by('position')
return super().get_context_data(**kwargs)
class EpisodeListView(PageListView):
model = Episode
item_template_name = 'aircox/widgets/episode_item.html'
has_headline = True
parent_model = Program
attach_to_value = StaticPage.ATTACH_TO_EPISODES
def get_queryset(self):
qs = super().get_queryset()
if self.filters and 'podcasts' in self.filters:
qs = qs.filter(sound__is_public=True)
return qs
def get_filters(self):
return super().get_filters() + (
(_('Podcasts'), 'podcasts', tuple()),
)
class DiffusionListView(GetDateMixin, AttachedToMixin, BaseView, ListView):
""" View for timetables """
model = Diffusion
has_filters = True
redirect_date_url = 'diffusion-list'
attach_to_value = StaticPage.ATTACH_TO_DIFFUSIONS
def get_date(self):
date = super().get_date()
return date if date is not None else datetime.date.today()
def get_queryset(self):
return super().get_queryset().date(self.date).order_by('start')
def get_context_data(self, **kwargs):
start = self.date - datetime.timedelta(days=self.date.weekday())
dates = [start + datetime.timedelta(days=i) for i in range(0, 7)]
return super().get_context_data(date=self.date, dates=dates, **kwargs)