2022-08-24 10:38:53 +02:00
|
|
|
from enum import Enum
|
|
|
|
|
2020-01-30 14:47:36 +01:00
|
|
|
from django.db import models
|
2022-08-24 10:38:53 +02:00
|
|
|
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
|
2024-02-08 20:29:10 +01:00
|
|
|
replay_gain_enabled: bool
|
|
|
|
replay_gain_offset: float
|
|
|
|
|
2022-08-24 10:38:53 +02:00
|
|
|
# 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)
|
2020-01-30 14:47:36 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Preference(models.Model):
|
2022-06-21 14:42:04 +02:00
|
|
|
user = models.ForeignKey(
|
2022-06-27 17:25:59 +02:00
|
|
|
"core.User",
|
2022-06-21 14:42:04 +02:00
|
|
|
on_delete=models.CASCADE,
|
|
|
|
blank=True,
|
|
|
|
null=True,
|
2022-06-27 17:10:21 +02:00
|
|
|
db_column="subjid",
|
2022-06-21 14:42:04 +02:00
|
|
|
)
|
|
|
|
key = models.CharField(
|
|
|
|
max_length=255,
|
|
|
|
unique=True,
|
|
|
|
blank=True,
|
|
|
|
null=True,
|
2022-06-27 17:10:21 +02:00
|
|
|
db_column="keystr",
|
2022-06-21 14:42:04 +02:00
|
|
|
)
|
|
|
|
value = models.TextField(
|
|
|
|
blank=True,
|
|
|
|
null=True,
|
2022-06-27 17:10:21 +02:00
|
|
|
db_column="valstr",
|
2021-05-27 16:23:02 +02:00
|
|
|
)
|
2020-01-30 14:47:36 +01:00
|
|
|
|
2022-08-24 10:38:53 +02:00
|
|
|
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),
|
2023-03-15 22:19:04 +01:00
|
|
|
message_format=MessageFormatKind(
|
|
|
|
int(entries.get("stream_label_format") or 0)
|
|
|
|
),
|
2022-08-24 10:38:53 +02:00
|
|
|
message_offline=entries.get("off_air_meta") or "Offline",
|
2024-02-08 20:29:10 +01:00
|
|
|
replay_gain_enabled=entries.get("enable_replay_gain") == "1",
|
|
|
|
replay_gain_offset=float(entries.get("replay_gain_modifier") or 0.0),
|
2022-08-24 10:38:53 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
@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",
|
|
|
|
)
|
|
|
|
|
2020-01-30 14:47:36 +01:00
|
|
|
class Meta:
|
|
|
|
managed = False
|
2021-05-27 16:23:02 +02:00
|
|
|
db_table = "cc_pref"
|
2022-06-21 14:42:04 +02:00
|
|
|
unique_together = (("user", "key"),)
|