From 6c59ff588b5418d10cc9cc16f1e82377a9e9ea74 Mon Sep 17 00:00:00 2001
From: Jonas L <jooola@users.noreply.github.com>
Date: Sat, 6 Aug 2022 19:18:40 +0200
Subject: [PATCH] feat: move off_air_meta stream setting to pref table (#2023)

---
 .../migrations/0037_3_0_0_alpha_14_1.py       | 44 +++++++++++++++++++
 .../legacy/migrations/__init__.py             |  2 +-
 .../legacy/migrations/sql/data.sql            |  2 +-
 .../controllers/PreferenceController.php      |  2 +-
 legacy/application/forms/StreamSetting.php    |  2 +-
 legacy/application/models/Preference.php      | 10 +++++
 legacy/application/models/StreamSetting.php   | 12 +----
 7 files changed, 59 insertions(+), 15 deletions(-)
 create mode 100644 api/libretime_api/legacy/migrations/0037_3_0_0_alpha_14_1.py

diff --git a/api/libretime_api/legacy/migrations/0037_3_0_0_alpha_14_1.py b/api/libretime_api/legacy/migrations/0037_3_0_0_alpha_14_1.py
new file mode 100644
index 000000000..08d0b9f82
--- /dev/null
+++ b/api/libretime_api/legacy/migrations/0037_3_0_0_alpha_14_1.py
@@ -0,0 +1,44 @@
+# pylint: disable=invalid-name
+
+from django.db import migrations
+
+from ._migrations import legacy_migration_factory
+
+UP = """
+insert into cc_pref ("keystr", "valstr")
+select
+    "keyname" as "keystr",
+    coalesce("value", 'LibreTime - offline') as "valstr"
+from cc_stream_setting
+where "keyname" = 'off_air_meta';
+
+delete from cc_stream_setting
+where "keyname" = 'off_air_meta';
+"""
+
+DOWN = """
+insert into cc_stream_setting ("keyname", "value", "type")
+select
+    "keystr" as "keyname",
+    coalesce("valstr", 'LibreTime - offline') as "value",
+    'string' as "type"
+from cc_pref
+where "keystr" = 'off_air_meta';
+
+delete from cc_pref
+where "keystr" = 'off_air_meta';
+"""
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("legacy", "0036_3_0_0_alpha_13_10"),
+    ]
+    operations = [
+        migrations.RunPython(
+            code=legacy_migration_factory(
+                target="3.0.0-alpha.14.1",
+                sql=UP,
+            )
+        )
+    ]
diff --git a/api/libretime_api/legacy/migrations/__init__.py b/api/libretime_api/legacy/migrations/__init__.py
index 57437ffc4..a0fe2c890 100644
--- a/api/libretime_api/legacy/migrations/__init__.py
+++ b/api/libretime_api/legacy/migrations/__init__.py
@@ -1 +1 @@
-LEGACY_SCHEMA_VERSION = "3.0.0-alpha.13.10"
+LEGACY_SCHEMA_VERSION = "3.0.0-alpha.14.1"
diff --git a/api/libretime_api/legacy/migrations/sql/data.sql b/api/libretime_api/legacy/migrations/sql/data.sql
index cd3189299..bda3be2af 100644
--- a/api/libretime_api/legacy/migrations/sql/data.sql
+++ b/api/libretime_api/legacy/migrations/sql/data.sql
@@ -8,6 +8,7 @@ INSERT INTO cc_live_log ("state", "start_time") VALUES ('S', now() at time zone
 INSERT INTO cc_pref ("keystr", "valstr") VALUES ('import_timestamp', '0');
 INSERT INTO cc_pref ("keystr", "valstr") VALUES ('timezone', 'UTC');
 INSERT INTO cc_pref ("keystr", "valstr") VALUES ('default_stream_mount_point', 'main');
+INSERT INTO cc_pref ("keystr", "valstr") VALUES ('off_air_meta', 'LibreTime - offline');
 INSERT INTO cc_pref ("keystr", "valstr") VALUES ('enable_replay_gain', 1);
 INSERT INTO cc_pref ("keystr", "valstr") VALUES ('locale', 'en_US');
 INSERT INTO cc_pref ("keystr", "valstr") VALUES ('max_bitrate', '320');
@@ -24,7 +25,6 @@ INSERT INTO cc_subjs ("login", "type", "pass") VALUES ('admin', 'A', md5('admin'
 INSERT INTO cc_pref ("subjid", "keystr", "valstr") VALUES (1, 'user_locale', 'en_US');
 
 INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('icecast_vorbis_metadata', 'false', 'boolean');
-INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('off_air_meta', 'LibreTime - offline', 'string');
 INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('output_sound_device_type', 'ALSA', 'string');
 INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('output_sound_device', 'false', 'boolean');
 
diff --git a/legacy/application/controllers/PreferenceController.php b/legacy/application/controllers/PreferenceController.php
index 6c22592e1..83103afa8 100644
--- a/legacy/application/controllers/PreferenceController.php
+++ b/legacy/application/controllers/PreferenceController.php
@@ -292,7 +292,7 @@ class PreferenceController extends Zend_Controller_Action
                 Application_Model_StreamSetting::setDjLiveStreamPort($values['show_source_port']);
                 Application_Model_StreamSetting::setDjLiveStreamMountPoint($values['show_source_mount']);
 
-                Application_Model_StreamSetting::setOffAirMeta($values['offAirMeta']);
+                Application_Model_Preference::setOffAirMeta($values['offAirMeta']);
 
                 // store stream update timestamp
                 Application_Model_Preference::SetStreamUpdateTimestamp();
diff --git a/legacy/application/forms/StreamSetting.php b/legacy/application/forms/StreamSetting.php
index ec55c681c..44979f0b3 100644
--- a/legacy/application/forms/StreamSetting.php
+++ b/legacy/application/forms/StreamSetting.php
@@ -65,7 +65,7 @@ class Application_Form_StreamSetting extends Zend_Form
 
         $offAirMeta = new Zend_Form_Element_Text('offAirMeta');
         $offAirMeta->setLabel(_('Off Air Metadata'))
-            ->setValue(Application_Model_StreamSetting::getOffAirMeta())
+            ->setValue(Application_Model_Preference::getOffAirMeta())
             ->setDecorators(['ViewHelper']);
         $this->addElement($offAirMeta);
 
diff --git a/legacy/application/models/Preference.php b/legacy/application/models/Preference.php
index eb9145a99..046095d8a 100644
--- a/legacy/application/models/Preference.php
+++ b/legacy/application/models/Preference.php
@@ -350,6 +350,16 @@ class Application_Model_Preference
         return self::getValue('stream_label_format');
     }
 
+    public static function getOffAirMeta()
+    {
+        return self::getValue('off_air_meta');
+    }
+
+    public static function setOffAirMeta($offAirMeta)
+    {
+        self::setValue('off_air_meta', $offAirMeta);
+    }
+
     public static function GetStationName()
     {
         return self::getValue('station_name');
diff --git a/legacy/application/models/StreamSetting.php b/legacy/application/models/StreamSetting.php
index 0b828ceda..7dbbf5580 100644
--- a/legacy/application/models/StreamSetting.php
+++ b/legacy/application/models/StreamSetting.php
@@ -207,7 +207,7 @@ class Application_Model_StreamSetting
         $settings['master_live_stream_mp'] = self::getMasterLiveStreamMountPoint();
         $settings['dj_live_stream_port'] = self::getDjLiveStreamPort();
         $settings['dj_live_stream_mp'] = self::getDjLiveStreamMountPoint();
-        $settings['off_air_meta'] = self::getOffAirMeta();
+        $settings['off_air_meta'] = Application_Model_Preference::getOffAirMeta();
         $settings['icecast_vorbis_metadata'] = self::getIcecastVorbisMetadata();
         $settings['output_sound_device'] = self::getOutputSoundDevice();
         $settings['output_sound_device_type'] = self::getOutputSoundDeviceType();
@@ -507,16 +507,6 @@ class Application_Model_StreamSetting
         self::setValue($stream . '_admin_pass', $v, 'string');
     }
 
-    public static function getOffAirMeta()
-    {
-        return self::getValue('off_air_meta');
-    }
-
-    public static function setOffAirMeta($offAirMeta)
-    {
-        self::setValue('off_air_meta', $offAirMeta, 'string');
-    }
-
     public static function GetAllListenerStatErrors()
     {
         $sql = 'SELECT * FROM cc_stream_setting WHERE keyname like :p1';