sintonia/api/libretime_api/core/models/preference.py
Jonas L 35d0dec4a8
fix: apply replay gain preferences on scheduled files ()
### Description

The replay gain preferences are applied in the legacy code, but the
playout code was missing this feature. The replay gain was not applied
when playout fetched the schedules.


37d1a7685e/legacy/application/models/Schedule.php (L881-L886)
2024-02-08 20:29:10 +01:00

104 lines
2.9 KiB
Python

from enum import Enum
from django.db import models
from pydantic import BaseModel
class SitePreferences(BaseModel):
station_name: str
class MessageFormatKind(int, Enum):
ARTIST_TITLE = 0
SHOW_ARTIST_TITLE = 1
RADIO_SHOW = 2
class StreamPreferences(BaseModel):
input_fade_transition: float
message_format: MessageFormatKind
message_offline: str
replay_gain_enabled: bool
replay_gain_offset: float
# input_auto_switch_off: bool
# input_auto_switch_on: bool
# input_main_user: str
# input_main_password: str
# track_fade_in: float
# track_fade_out: float
# track_fade_transition: float
class StreamState(BaseModel):
input_main_connected: bool
input_main_streaming: bool
input_show_connected: bool
input_show_streaming: bool
schedule_streaming: bool
class SitePreferenceManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(user__isnull=True)
class Preference(models.Model):
user = models.ForeignKey(
"core.User",
on_delete=models.CASCADE,
blank=True,
null=True,
db_column="subjid",
)
key = models.CharField(
max_length=255,
unique=True,
blank=True,
null=True,
db_column="keystr",
)
value = models.TextField(
blank=True,
null=True,
db_column="valstr",
)
objects = models.Manager()
site = SitePreferenceManager()
@classmethod
def get_site_preferences(cls) -> SitePreferences:
entries = dict(cls.site.values_list("key", "value"))
return SitePreferences(
station_name=entries.get("station_name") or "LibreTime",
)
@classmethod
def get_stream_preferences(cls) -> StreamPreferences:
entries = dict(cls.site.values_list("key", "value"))
return StreamPreferences(
input_fade_transition=float(entries.get("default_transition_fade") or 0.0),
message_format=MessageFormatKind(
int(entries.get("stream_label_format") or 0)
),
message_offline=entries.get("off_air_meta") or "Offline",
replay_gain_enabled=entries.get("enable_replay_gain") == "1",
replay_gain_offset=float(entries.get("replay_gain_modifier") or 0.0),
)
@classmethod
def get_stream_state(cls) -> StreamState:
entries = dict(cls.site.values_list("key", "value"))
return StreamState(
input_main_connected=entries.get("master_dj") == "true",
input_main_streaming=entries.get("master_dj_switch") == "on",
input_show_connected=entries.get("live_dj") == "true",
input_show_streaming=entries.get("live_dj_switch") == "on",
schedule_streaming=entries.get("scheduled_play_switch") == "on",
)
class Meta:
managed = False
db_table = "cc_pref"
unique_together = (("user", "key"),)