82 lines
2.4 KiB
Python
82 lines
2.4 KiB
Python
from django.utils.functional import cached_property
|
|
from django.utils.translation import gettext_lazy as _
|
|
from easy_thumbnails.files import get_thumbnailer
|
|
|
|
from aircox.conf import settings
|
|
|
|
from .page import Page
|
|
from .program import ProgramChildQuerySet
|
|
|
|
__all__ = ("Episode",)
|
|
|
|
|
|
class Episode(Page):
|
|
objects = ProgramChildQuerySet.as_manager()
|
|
detail_url_name = "episode-detail"
|
|
item_template_name = "aircox/widgets/episode_item.html"
|
|
|
|
@property
|
|
def program(self):
|
|
return getattr(self.parent, "program", None)
|
|
|
|
@cached_property
|
|
def podcasts(self):
|
|
"""Return serialized data about podcasts."""
|
|
from ..serializers import PodcastSerializer
|
|
|
|
podcasts = [
|
|
PodcastSerializer(s).data
|
|
for s in self.sound_set.public().order_by("type")
|
|
]
|
|
if self.cover:
|
|
options = {"size": (128, 128), "crop": "scale"}
|
|
cover = get_thumbnailer(self.cover).get_thumbnail(options).url
|
|
else:
|
|
cover = None
|
|
|
|
for index, podcast in enumerate(podcasts):
|
|
podcasts[index]["cover"] = cover
|
|
podcasts[index]["page_url"] = self.get_absolute_url()
|
|
podcasts[index]["page_title"] = self.title
|
|
return podcasts
|
|
|
|
@program.setter
|
|
def program(self, value):
|
|
self.parent = value
|
|
|
|
class Meta:
|
|
verbose_name = _("Episode")
|
|
verbose_name_plural = _("Episodes")
|
|
|
|
def get_absolute_url(self):
|
|
if not self.is_published:
|
|
return self.program.get_absolute_url()
|
|
return super().get_absolute_url()
|
|
|
|
def save(self, *args, **kwargs):
|
|
if self.parent is None:
|
|
raise ValueError("missing parent program")
|
|
super().save(*args, **kwargs)
|
|
|
|
@classmethod
|
|
def get_default_title(cls, page, date):
|
|
return settings.EPISODE_TITLE.format(
|
|
program=page,
|
|
date=date.strftime(settings.EPISODE_TITLE_DATE_FORMAT),
|
|
)
|
|
|
|
@classmethod
|
|
def get_init_kwargs_from(cls, page, date, title=None, **kwargs):
|
|
"""Get default Episode's title."""
|
|
title = (
|
|
settings.EPISODE_TITLE.format(
|
|
program=page,
|
|
date=date.strftime(settings.EPISODE_TITLE_DATE_FORMAT),
|
|
)
|
|
if title is None
|
|
else title
|
|
)
|
|
return super().get_init_kwargs_from(
|
|
page, title=title, program=page, **kwargs
|
|
)
|