forked from rc/aircox
75 lines
2.3 KiB
Python
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)
|
|
|