aircox-radiocampus/aircox/views/episode.py
2019-09-08 01:39:40 +02:00

75 lines
2.3 KiB
Python

from collections import OrderedDict
import datetime
from django.views.generic import ListView
from django.utils.translation import ugettext as _
from ..models import Diffusion, Episode, Program, Sound
from .base import BaseView
from .program import ProgramPageDetailView
from .page import PageListView
from .mixins import GetDateMixin, ParentMixin
__all__ = ['EpisodeDetailView', 'EpisodeListView', 'DiffusionListView']
class EpisodeDetailView(ProgramPageDetailView):
model = Episode
def get_podcasts(self, diffusion):
return Sound.objects.diffusion(diffusion).podcasts()
def get_context_data(self, **kwargs):
self.program = kwargs.setdefault('program', self.object.program)
kwargs.setdefault('parent', self.program)
if not 'tracks' in kwargs:
kwargs['tracks'] = self.object.track_set.order_by('position')
if not 'podcasts' in kwargs:
kwargs['podcasts'] = self.object.sound_set.podcasts()
return super().get_context_data(**kwargs)
class EpisodeListView(ParentMixin, PageListView):
model = Episode
item_template_name = 'aircox/episode_item.html'
show_headline = True
parent_model = Program
fk_parent = 'program'
class DiffusionListView(GetDateMixin, BaseView, ListView):
""" View for timetables """
model = Diffusion
date = None
start = None
end = None
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().today(self.date).order_by('start')
def get_context_data(self, **kwargs):
today = datetime.date.today()
start = self.date - datetime.timedelta(days=self.date.weekday())
dates = [
(today, None),
(today - datetime.timedelta(days=1), None),
(today + datetime.timedelta(days=1), None),
(today - datetime.timedelta(days=7), _('next week')),
(today + datetime.timedelta(days=7), _('last week')),
(None, None)
] + [
(date, date.strftime('%A %d'))
for date in (start + datetime.timedelta(days=i)
for i in range(0, 7)) if date != today
]
return super().get_context_data(date=self.date, dates=dates, **kwargs)