forked from rc/aircox
62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
from datetime import date
|
|
|
|
from django.utils.translation import gettext as _
|
|
from django.utils import timezone as tz
|
|
from django.views.generic import ListView
|
|
|
|
from ..models import Diffusion, Log, Page, StaticPage
|
|
from .base import BaseView
|
|
from .page import PageListView
|
|
|
|
|
|
class HomeView(BaseView, ListView):
|
|
template_name = 'aircox/home.html'
|
|
model = Diffusion
|
|
attach_to_value = StaticPage.ATTACH_TO_HOME
|
|
queryset = Diffusion.objects.on_air().select_related('episode')
|
|
logs_count = 5
|
|
publications_count = 5
|
|
has_filters = False
|
|
|
|
def get_queryset(self):
|
|
return super().get_queryset().date(date.today())
|
|
|
|
def get_logs(self, diffusions):
|
|
today = date.today()
|
|
logs = Log.objects.on_air().date(today).filter(track__isnull=False)
|
|
# diffs = Diffusion.objects.on_air().date(today)
|
|
return Log.merge_diffusions(logs, diffusions, self.logs_count)
|
|
|
|
def get_next_diffs(self):
|
|
now = tz.now()
|
|
current_diff = Diffusion.objects.on_air().now(now).first()
|
|
next_diffs = Diffusion.objects.on_air().after(now)
|
|
if current_diff:
|
|
diffs = [current_diff] + list(next_diffs.exclude(pk=current_diff.pk)[:2])
|
|
else:
|
|
diffs = next_diffs[:3]
|
|
return diffs
|
|
|
|
def get_last_publications(self):
|
|
# note: with postgres db, possible to use distinct()
|
|
qs = Page.objects.select_subclasses().published() \
|
|
.order_by('-pub_date')
|
|
parents = set()
|
|
items = []
|
|
for publication in qs:
|
|
parent_id = publication.parent_id
|
|
if parent_id is not None and parent_id in parents:
|
|
continue
|
|
items.append(publication)
|
|
if len(items) == self.publications_count:
|
|
break
|
|
return items
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['logs'] = self.get_logs(context['object_list'])
|
|
context['next_diffs'] = self.get_next_diffs()
|
|
context['last_publications'] = self.get_last_publications()[:5]
|
|
return context
|
|
|