### 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)
104 lines
2.9 KiB
Python
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"),)
|