libretime/api/libretime_api/schedule/models/show.py

255 lines
6.6 KiB
Python

from django.db import models
class Show(models.Model):
name = models.CharField(max_length=255)
description = models.CharField(max_length=8192, blank=True, null=True)
genre = models.CharField(max_length=255, blank=True, null=True)
url = models.CharField(max_length=255, blank=True, null=True)
image = models.CharField(
max_length=255,
blank=True,
null=True,
db_column="image_path",
)
foreground_color = models.CharField(
max_length=6,
blank=True,
null=True,
db_column="color",
)
background_color = models.CharField(
max_length=6,
blank=True,
null=True,
)
live_auth_registered = models.BooleanField(
default=False,
blank=True,
null=True,
db_column="live_stream_using_airtime_auth",
)
live_auth_custom = models.BooleanField(
default=False,
blank=True,
null=True,
db_column="live_stream_using_custom_auth",
)
live_auth_custom_user = models.CharField(
max_length=255,
blank=True,
null=True,
db_column="live_stream_user",
)
live_auth_custom_password = models.CharField(
max_length=255,
blank=True,
null=True,
db_column="live_stream_pass",
)
@property
def live_enabled(self) -> bool:
return any((self.live_auth_registered, self.live_auth_custom))
# A show is linkable if it has never been linked before. Once
# a show becomes unlinked it can not be linked again.
linked = models.BooleanField()
linkable = models.BooleanField(db_column="is_linkable")
auto_playlist = models.ForeignKey(
"schedule.Playlist",
on_delete=models.DO_NOTHING,
blank=True,
null=True,
db_column="autoplaylist_id",
)
auto_playlist_enabled = models.BooleanField(db_column="has_autoplaylist")
auto_playlist_repeat = models.BooleanField(db_column="autoplaylist_repeat")
intro_playlist = models.ForeignKey(
"schedule.Playlist",
on_delete=models.DO_NOTHING,
blank=True,
null=True,
db_column="intro_playlist_id",
related_name="intro_playlist",
)
override_intro_playlist = models.BooleanField(db_column="override_intro_playlist")
outro_playlist = models.ForeignKey(
"schedule.Playlist",
on_delete=models.DO_NOTHING,
blank=True,
null=True,
db_column="outro_playlist_id",
related_name="outro_playlist",
)
override_outro_playlist = models.BooleanField(db_column="override_outro_playlist")
hosts = models.ManyToManyField( # type: ignore[var-annotated]
"core.User",
through="ShowHost",
)
def get_owner(self):
return self.hosts.all()
class Meta:
managed = False
db_table = "cc_show"
class ShowHost(models.Model):
show = models.ForeignKey(
"schedule.Show",
on_delete=models.DO_NOTHING,
)
user = models.ForeignKey(
"core.User",
on_delete=models.DO_NOTHING,
db_column="subjs_id",
)
class Meta:
managed = False
db_table = "cc_show_hosts"
# TODO: Replace record choices with a boolean
class Record(models.IntegerChoices):
NO = 0, "No"
YES = 1, "Yes"
class ShowDays(models.Model):
show = models.ForeignKey("schedule.Show", on_delete=models.DO_NOTHING)
first_show_on = models.DateField(
db_column="first_show",
)
last_show_on = models.DateField(
blank=True,
null=True,
db_column="last_show",
)
start_time = models.TimeField()
timezone = models.CharField(max_length=1024)
duration = models.CharField(max_length=1024)
record_enabled = models.SmallIntegerField(
choices=Record.choices,
default=Record.NO,
blank=True,
null=True,
db_column="record",
)
class WeekDay(models.IntegerChoices):
MONDAY = 0, "Monday"
TUESDAY = 1, "Tuesday"
WEDNESDAY = 2, "Wednesday"
THURSDAY = 3, "Thursday"
FRIDAY = 4, "Friday"
SATURDAY = 5, "Saturday"
SUNDAY = 6, "Sunday"
week_day = models.SmallIntegerField(
choices=WeekDay.choices,
blank=True,
null=True,
db_column="day",
)
class RepeatKind(models.IntegerChoices):
WEEKLY = 0, "Every week"
WEEKLY_2 = 1, "Every 2 weeks"
WEEKLY_3 = 4, "Every 3 weeks"
WEEKLY_4 = 5, "Every 4 weeks"
MONTHLY = 2, "Every month"
repeat_kind = models.SmallIntegerField(
choices=RepeatKind.choices,
db_column="repeat_type",
)
repeat_next_on = models.DateField(
blank=True,
null=True,
db_column="next_pop_date",
)
def get_owner(self):
return self.show.get_owner()
class Meta:
managed = False
db_table = "cc_show_days"
class ShowInstance(models.Model):
created_at = models.DateTimeField(db_column="created")
show = models.ForeignKey("schedule.Show", on_delete=models.DO_NOTHING)
instance = models.ForeignKey(
"self",
on_delete=models.DO_NOTHING,
blank=True,
null=True,
)
starts_at = models.DateTimeField(db_column="starts")
ends_at = models.DateTimeField(db_column="ends")
filled_time = models.DurationField(blank=True, null=True, db_column="time_filled")
last_scheduled_at = models.DateTimeField(
blank=True,
null=True,
db_column="last_scheduled",
)
description = models.CharField(max_length=8192, blank=True, null=True)
modified = models.BooleanField(db_column="modified_instance")
rebroadcast = models.SmallIntegerField(blank=True, null=True)
auto_playlist_built = models.BooleanField(db_column="autoplaylist_built")
record_enabled = models.SmallIntegerField(
choices=Record.choices,
default=Record.NO,
blank=True,
null=True,
db_column="record",
)
record_file = models.ForeignKey(
"storage.File",
on_delete=models.DO_NOTHING,
blank=True,
null=True,
db_column="file_id",
)
def get_owner(self):
return self.show.get_owner()
class Meta:
managed = False
db_table = "cc_show_instances"
class ShowRebroadcast(models.Model):
show = models.ForeignKey("schedule.Show", on_delete=models.DO_NOTHING)
day_offset = models.CharField(max_length=1024)
start_time = models.TimeField()
def get_owner(self):
return self.show.get_owner()
class Meta:
managed = False
db_table = "cc_show_rebroadcast"