From cf24c141fd1079ff1e594a42958d3ca11ba3a769 Mon Sep 17 00:00:00 2001 From: drigato Date: Wed, 13 May 2015 16:05:37 -0400 Subject: [PATCH 1/6] SAAS-772: Send metadata to Tunein This is pretty much working for scheduled metadata - just to need to test with a TuneIn account. --- airtime_mvc/application/common/TuneIn.php | 29 ++++++++++++ airtime_mvc/application/configs/constants.php | 4 ++ .../application/controllers/ApiController.php | 9 ++++ .../controllers/PreferenceController.php | 9 +++- airtime_mvc/application/forms/Preferences.php | 4 ++ .../application/forms/TuneInPreferences.php | 44 +++++++++++++++++++ airtime_mvc/application/models/Preference.php | 40 +++++++++++++++++ .../views/scripts/form/preferences.phtml | 5 +++ .../scripts/form/preferences_tunein.phtml | 11 +++++ .../js/airtime/preferences/preferences.js | 26 +++++++++++ 10 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 airtime_mvc/application/common/TuneIn.php create mode 100644 airtime_mvc/application/forms/TuneInPreferences.php create mode 100644 airtime_mvc/application/views/scripts/form/preferences_tunein.phtml diff --git a/airtime_mvc/application/common/TuneIn.php b/airtime_mvc/application/common/TuneIn.php new file mode 100644 index 000000000..54dedc516 --- /dev/null +++ b/airtime_mvc/application/common/TuneIn.php @@ -0,0 +1,29 @@ +setLastPlayedTime($now); + + // Push metadata to TuneIn + if (Application_Model_Preference::getTuneinEnabled()) { + $filePropelOrm = $file->getPropelOrm(); + $title = urlencode($filePropelOrm->getDbTrackTitle()); + $artist = urlencode($filePropelOrm->getDbArtistName()); + Application_Common_TuneIn::sendMetadataToTunein($title, $artist); + } } } else { // webstream diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index b06a9e1ed..e4615c02d 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -56,14 +56,19 @@ class PreferenceController extends Zend_Controller_Action Application_Model_Preference::SetStationLogo($imagePath); } - Application_Model_Preference::SetUploadToSoundcloudOption($values["UploadToSoundcloudOption"]); + Application_Model_Preference::setTuneinEnabled($values["enable_tunein"]); + Application_Model_Preference::setTuneinStationId($values["tunein_station_id"]); + Application_Model_Preference::setTuneinPartnerKey($values["tunein_partner_key"]); + Application_Model_Preference::setTuneinPartnerId($values["tunein_partner_id"]); + + /*Application_Model_Preference::SetUploadToSoundcloudOption($values["UploadToSoundcloudOption"]); Application_Model_Preference::SetSoundCloudDownloadbleOption($values["SoundCloudDownloadbleOption"]); Application_Model_Preference::SetSoundCloudUser($values["SoundCloudUser"]); Application_Model_Preference::SetSoundCloudPassword($values["SoundCloudPassword"]); Application_Model_Preference::SetSoundCloudTags($values["SoundCloudTags"]); Application_Model_Preference::SetSoundCloudGenre($values["SoundCloudGenre"]); Application_Model_Preference::SetSoundCloudTrackType($values["SoundCloudTrackType"]); - Application_Model_Preference::SetSoundCloudLicense($values["SoundCloudLicense"]); + Application_Model_Preference::SetSoundCloudLicense($values["SoundCloudLicense"]);*/ $this->view->statusMsg = "
". _("Preferences updated.")."
"; $this->view->form = $form; diff --git a/airtime_mvc/application/forms/Preferences.php b/airtime_mvc/application/forms/Preferences.php index 3e5158413..3226d558d 100644 --- a/airtime_mvc/application/forms/Preferences.php +++ b/airtime_mvc/application/forms/Preferences.php @@ -21,6 +21,10 @@ class Application_Form_Preferences extends Zend_Form $this->addSubForm($general_pref, 'preferences_general'); + //tunein form + $tuneinPreferences = new Application_Form_TuneInPreferences(); + $this->addSubForm($tuneinPreferences, 'preferences_tunein'); + $soundcloud_pref = new Application_Form_SoundcloudPreferences(); $this->addSubForm($soundcloud_pref, 'preferences_soundcloud'); diff --git a/airtime_mvc/application/forms/TuneInPreferences.php b/airtime_mvc/application/forms/TuneInPreferences.php new file mode 100644 index 000000000..d97a557e9 --- /dev/null +++ b/airtime_mvc/application/forms/TuneInPreferences.php @@ -0,0 +1,44 @@ +setDecorators(array( + array('ViewScript', array('viewScript' => 'form/preferences_tunein.phtml')) + )); + + $enableTunein = new Zend_Form_Element_Checkbox("enable_tunein"); + $enableTunein->setLabel(_("Push metadata to your station on TuneIn?")); + $enableTunein->setValue(Application_Model_Preference::getTuneinEnabled()); + $enableTunein->setAttrib("class", "block-display"); + $this->addElement($enableTunein); + + // TODO: figure out how to make this validator work + $validator = new ConditionalNotEmpty(array( + 'enable_tunein' => 1 + )); + + $tuneinStationId = new Zend_Form_Element_Text("tunein_station_id"); + $tuneinStationId->setLabel(_("Station ID:")); + $tuneinStationId->setValue(Application_Model_Preference::getTuneinStationId()); + $tuneinStationId->setAttrib("class", "input_text"); + $tuneinStationId->addValidator($validator); + $this->addElement($tuneinStationId); + + $tuneinPartnerKey = new Zend_Form_Element_Text("tunein_partner_key"); + $tuneinPartnerKey->setLabel(_("Partner Key:")); + $tuneinPartnerKey->setValue(Application_Model_Preference::getTuneinPartnerKey()); + $tuneinPartnerKey->setAttrib("class", "input_text"); + $tuneinPartnerKey->addValidator($validator); + $this->addElement($tuneinPartnerKey); + + $tuneinPartnerId = new Zend_Form_Element_Text("tunein_partner_id"); + $tuneinPartnerId->setLabel(_("Partner Id:")); + $tuneinPartnerId->setValue(Application_Model_Preference::getTuneinPartnerId()); + $tuneinPartnerId->setAttrib("class", "input_text"); + $tuneinPartnerId->addValidator($validator); + $this->addElement($tuneinPartnerId); + } +} \ No newline at end of file diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index 64263b94c..1387d326b 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -1453,4 +1453,44 @@ class Application_Model_Preference { return self::getValue("provisioning_status"); } + + public static function setTuneinEnabled($value) + { + self::setValue("tunein_enabled", $value); + } + + public static function getTuneinEnabled() + { + return self::getValue("tunein_enabled"); + } + + public static function setTuneinPartnerKey($value) + { + self::setValue("tunein_partner_key", $value); + } + + public static function getTuneinPartnerKey() + { + return self::getValue("tunein_partner_key"); + } + + public static function setTuneinPartnerId($value) + { + self::setValue("tunein_partner_id", $value); + } + + public static function getTuneinPartnerId() + { + return self::getValue("tunein_partner_id"); + } + + public static function setTuneinStationId($value) + { + self::setValue("tunein_station_id", $value); + } + + public static function getTuneinStationId() + { + return self::getValue("tunein_station_id"); + } } diff --git a/airtime_mvc/application/views/scripts/form/preferences.phtml b/airtime_mvc/application/views/scripts/form/preferences.phtml index 0ffe1ea9d..9029a5c17 100644 --- a/airtime_mvc/application/views/scripts/form/preferences.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences.phtml @@ -4,6 +4,11 @@ element->getSubform('preferences_general') ?> +

+
+ element->getSubform('preferences_tunein') ?> +
+ element->submit->render() ?> diff --git a/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml b/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml new file mode 100644 index 000000000..a3cdb0d83 --- /dev/null +++ b/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml @@ -0,0 +1,11 @@ +
+
+ element->getElement('enable_tunein')->render() ?> + + element->getElement('tunein_station_id')->render() ?> + + element->getElement('tunein_partner_key')->render() ?> + + element->getElement('tunein_partner_id')->render() ?> +
+
\ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/preferences/preferences.js b/airtime_mvc/public/js/airtime/preferences/preferences.js index 1dffe24d2..d1aea4091 100644 --- a/airtime_mvc/public/js/airtime/preferences/preferences.js +++ b/airtime_mvc/public/js/airtime/preferences/preferences.js @@ -63,6 +63,30 @@ function setMailServerInputReadonly() { setMsAuthenticationFieldsReadonly(requiresAuthCB); } +function setTuneInSettingsListener() { + var enableTunein = $("#enable_tunein"); + enableTunein.click(function(event){ + setTuneInSettingsReadonly(); + }); +} + +function setTuneInSettingsReadonly() { + var enableTunein = $("#enable_tunein"); + var stationId = $("#tunein_station_id"); + var partnerKey = $("#tunein_partner_key"); + var partnerId = $("#tunein_partner_id"); + + if (enableTunein.is(':checked')) { + stationId.removeAttr("readonly"); + partnerKey.removeAttr("readonly"); + partnerId.removeAttr("readonly"); + } else { + stationId.attr("readonly", "readonly"); + partnerKey.attr("readonly", "readonly"); + partnerId.attr("readonly", "readonly"); + } +} + /* * Enable/disable mail server authentication fields */ @@ -151,4 +175,6 @@ $(document).ready(function() { setConfigureMailServerListener(); setEnableSystemEmailsListener(); setCollapsibleWidgetJsCode(); + setTuneInSettingsReadonly(); + setTuneInSettingsListener(); }); From b023f191e3e36fece00fd7209aea0c7bf0c17fe6 Mon Sep 17 00:00:00 2001 From: drigato Date: Thu, 14 May 2015 13:13:33 -0400 Subject: [PATCH 2/6] SAAS-772: Send metadata to Tunein Added form validation by making a test request to the TuneIn API with the user-entered values --- .../application/forms/TuneInPreferences.php | 54 +++++++++++++++---- .../scripts/form/preferences_tunein.phtml | 8 ++- airtime_mvc/public/css/styles.css | 4 ++ .../js/airtime/preferences/preferences.js | 4 ++ 4 files changed, 60 insertions(+), 10 deletions(-) diff --git a/airtime_mvc/application/forms/TuneInPreferences.php b/airtime_mvc/application/forms/TuneInPreferences.php index d97a557e9..5eb729aca 100644 --- a/airtime_mvc/application/forms/TuneInPreferences.php +++ b/airtime_mvc/application/forms/TuneInPreferences.php @@ -10,35 +10,71 @@ class Application_Form_TuneInPreferences extends Zend_Form_SubForm )); $enableTunein = new Zend_Form_Element_Checkbox("enable_tunein"); + $enableTunein->setDecorators(array( + 'ViewHelper', + 'Errors', + 'Label' + )); + $enableTunein->addDecorator('Label', array('class' => 'enable-tunein')); $enableTunein->setLabel(_("Push metadata to your station on TuneIn?")); $enableTunein->setValue(Application_Model_Preference::getTuneinEnabled()); $enableTunein->setAttrib("class", "block-display"); $this->addElement($enableTunein); - // TODO: figure out how to make this validator work - $validator = new ConditionalNotEmpty(array( - 'enable_tunein' => 1 - )); - $tuneinStationId = new Zend_Form_Element_Text("tunein_station_id"); $tuneinStationId->setLabel(_("Station ID:")); $tuneinStationId->setValue(Application_Model_Preference::getTuneinStationId()); $tuneinStationId->setAttrib("class", "input_text"); - $tuneinStationId->addValidator($validator); $this->addElement($tuneinStationId); $tuneinPartnerKey = new Zend_Form_Element_Text("tunein_partner_key"); $tuneinPartnerKey->setLabel(_("Partner Key:")); $tuneinPartnerKey->setValue(Application_Model_Preference::getTuneinPartnerKey()); $tuneinPartnerKey->setAttrib("class", "input_text"); - $tuneinPartnerKey->addValidator($validator); $this->addElement($tuneinPartnerKey); $tuneinPartnerId = new Zend_Form_Element_Text("tunein_partner_id"); $tuneinPartnerId->setLabel(_("Partner Id:")); $tuneinPartnerId->setValue(Application_Model_Preference::getTuneinPartnerId()); $tuneinPartnerId->setAttrib("class", "input_text"); - $tuneinPartnerId->addValidator($validator); $this->addElement($tuneinPartnerId); } -} \ No newline at end of file + + public function isValid($data) + { + // Make request to TuneIn API to test the settings are valid + if ($data["enable_tunein"]) { + $qry_str = "?partnerId=".$data["tunein_partner_id"]."&partnerKey=".$data["tunein_partner_key"]."&id=".$data["tunein_station_id"] + ."&title=&artist="; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $qry_str); + curl_setopt($ch, CURLOPT_FAILONERROR, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + + $jsonData = curl_exec($ch); + if (curl_error($ch)) { + Logging::error("Failed to reach TuneIn: ". curl_errno($ch)." - ". curl_error($ch) . " - " . curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); + if (curl_error($ch) == "The requested URL returned error: 403 Forbidden") { + $this->getElement("enable_tunein")->setErrors(array(_("Invalid TuneIn Settings. Please ensure your TuneIn settings are correct and try again."))); + + // Set values to what the user entered since the form is invalid so they + // don't have to enter in the values again and can see what they entered. + $this->getElement("enable_tunein")->setValue($data["enable_tunein"]); + $this->getElement("tunein_partner_key")->setValue($data["tunein_partner_key"]); + $this->getElement("tunein_partner_id")->setValue($data["tunein_partner_id"]); + $this->getElement("tunein_station_id")->setValue($data["tunein_station_id"]); + + return false; + } + } + curl_close($ch); + + $arr = json_decode($jsonData, true); + Logging::info($arr); + } else { + return true; + } + } +} diff --git a/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml b/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml index a3cdb0d83..f7ae2bc84 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml @@ -1,6 +1,12 @@
- element->getElement('enable_tunein')->render() ?> + + element->getElement("enable_tunein")->hasErrors()) { + echo $this->element->getElement('enable_tunein')->renderErrors(); + } + ?> + element->getElement('enable_tunein')->renderViewHelper() ?> + element->getElement('enable_tunein')->renderLabel() ?> element->getElement('tunein_station_id')->render() ?> diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index b80cbfe8e..8fc43eda6 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -3248,3 +3248,7 @@ dd .stream-status { padding-bottom: 0px; padding-top: 13px; } + +.enable-tunein { + font-weight:bold; +} \ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/preferences/preferences.js b/airtime_mvc/public/js/airtime/preferences/preferences.js index d1aea4091..0491d335c 100644 --- a/airtime_mvc/public/js/airtime/preferences/preferences.js +++ b/airtime_mvc/public/js/airtime/preferences/preferences.js @@ -152,6 +152,10 @@ $(document).ready(function() { return false; }).next().hide(); + if ($("#tunein-settings").find(".errors").length > 0) { + $(".collapsible-content#tunein-settings").show(); + } + /* No longer using AJAX for this form. Zend + our code makes it needlessly hard to deal with. -- Albert $('#pref_save').live('click', function() { var data = $('#pref_form').serialize(); From 4451c49c067a79ce180aa033e6f9949e5c7ab999 Mon Sep 17 00:00:00 2001 From: drigato Date: Tue, 19 May 2015 14:39:05 -0400 Subject: [PATCH 3/6] SAAS-772: Send metadata to Tunein This is pretty much working except with master source metadata --- airtime_mvc/application/common/TuneIn.php | 13 ++- .../application/forms/TuneInPreferences.php | 84 +++++++++++++++---- airtime_mvc/application/models/Schedule.php | 23 +++++ .../scripts/form/preferences_tunein.phtml | 3 +- 4 files changed, 99 insertions(+), 24 deletions(-) diff --git a/airtime_mvc/application/common/TuneIn.php b/airtime_mvc/application/common/TuneIn.php index 54dedc516..1dcfdf742 100644 --- a/airtime_mvc/application/common/TuneIn.php +++ b/airtime_mvc/application/common/TuneIn.php @@ -4,12 +4,12 @@ class Application_Common_TuneIn { public static function sendMetadataToTunein($title, $artist) { - $tuneInStationID = null; - $tuneInPartnerKey = null; - $tuneInPartnerID = null; + $tuneInStationID = Application_Model_Preference::getTuneinStationId(); + $tuneInPartnerID = Application_Model_Preference::getTuneinPartnerId(); + $tuneInPartnerKey = Application_Model_Preference::getTuneinPartnerKey(); $qry_str = "?partnerId=".$tuneInPartnerID."&partnerKey=".$tuneInPartnerKey."&id=".$tuneInStationID - ."&title=".$title."&artist=".$artist; + ."&title=".$title."&artist=".$artist."&commercial=false"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $qry_str); @@ -17,13 +17,12 @@ class Application_Common_TuneIn curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); - $jsonData = curl_exec($ch); + curl_exec($ch); if (curl_error($ch)) { Logging::error("Failed to reach TuneIn: ". curl_errno($ch)." - ". curl_error($ch) . " - " . curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); } curl_close($ch); - $arr = json_decode($jsonData, true); - Logging::info($arr); } + } diff --git a/airtime_mvc/application/forms/TuneInPreferences.php b/airtime_mvc/application/forms/TuneInPreferences.php index 5eb729aca..6ee52588a 100644 --- a/airtime_mvc/application/forms/TuneInPreferences.php +++ b/airtime_mvc/application/forms/TuneInPreferences.php @@ -42,39 +42,91 @@ class Application_Form_TuneInPreferences extends Zend_Form_SubForm public function isValid($data) { - // Make request to TuneIn API to test the settings are valid + $valid = true; + // Make request to TuneIn API to test the settings are valid. + // TuneIn does not have an API to make test requests to check if + // the credentials are correct. Therefore we will make a request + // with the commercial flag set to true, which removes the metadata + // from the station on TuneIn. After that, and if the test request + // succeeds, we will make another request with the real metadata. if ($data["enable_tunein"]) { - $qry_str = "?partnerId=".$data["tunein_partner_id"]."&partnerKey=".$data["tunein_partner_key"]."&id=".$data["tunein_station_id"] - ."&title=&artist="; + $qry_str = "?partnerId=".$data["tunein_partner_id"]."&partnerKey=".$data["tunein_partner_key"]."&id=".$data["tunein_station_id"]; + $commercialFlagQryStr = "&commercial=true"; $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $qry_str); + curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $qry_str . $commercialFlagQryStr); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); - $jsonData = curl_exec($ch); + $xmlData = curl_exec($ch); if (curl_error($ch)) { Logging::error("Failed to reach TuneIn: ". curl_errno($ch)." - ". curl_error($ch) . " - " . curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); if (curl_error($ch) == "The requested URL returned error: 403 Forbidden") { $this->getElement("enable_tunein")->setErrors(array(_("Invalid TuneIn Settings. Please ensure your TuneIn settings are correct and try again."))); - // Set values to what the user entered since the form is invalid so they - // don't have to enter in the values again and can see what they entered. - $this->getElement("enable_tunein")->setValue($data["enable_tunein"]); - $this->getElement("tunein_partner_key")->setValue($data["tunein_partner_key"]); - $this->getElement("tunein_partner_id")->setValue($data["tunein_partner_id"]); - $this->getElement("tunein_station_id")->setValue($data["tunein_station_id"]); - - return false; + $valid = false; } } curl_close($ch); - $arr = json_decode($jsonData, true); - Logging::info($arr); + if ($valid) { + $xmlObj = new SimpleXMLElement($xmlData); + if (!$xmlObj || $xmlObj->head->status != "200") { + $valid = false; + } else if ($xmlObj->head->status == "200") { + $valid = true; + + // Make another request to TuneIn to update the metadata right away + // and to turn off the commercial flag. + + $metadata = Application_Model_Schedule::getCurrentPlayingTrack(); + + if (!is_null($metadata)) { + + Logging::info($metadata); + // Replace empty strings with "n/a" since the TuneIn API will complain + // and return an error that title and/or artist is not set. + $metadata["artist"] = empty($metadata["artist"]) ? "n/a" : $metadata["artist"]; + $metadata["title"] = empty($metadata["title"]) ? "n/a" : $metadata["title"]; + Logging::info($metadata); + + $metadataQryStr = "&artist=" . $metadata["artist"] . "&title=" . $metadata["title"]; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $qry_str . "&commercial=false" . $metadataQryStr); + curl_setopt($ch, CURLOPT_FAILONERROR, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + + $xmlData = curl_exec($ch); + Logging::info($xmlData); + if (curl_error($ch)) { + Logging::error("Failed to reach TuneIn: " . curl_errno($ch) . " - " . curl_error($ch) . " - " . curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); + } + + curl_close($ch); + $xmlObj = new SimpleXMLElement($xmlData); + if (!$xmlObj || $xmlObj->head->status != "200") { + Logging::error("Failed updating metadata on TuneIn"); + } + } + + } + } } else { - return true; + $valid = true; } + + if (!$valid) { + // Set values to what the user entered since the form is invalid so they + // don't have to enter in the values again and can see what they entered. + $this->getElement("enable_tunein")->setValue($data["enable_tunein"]); + $this->getElement("tunein_partner_key")->setValue($data["tunein_partner_key"]); + $this->getElement("tunein_partner_id")->setValue($data["tunein_partner_id"]); + $this->getElement("tunein_station_id")->setValue($data["tunein_station_id"]); + } + + return $valid; } } diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 2993dc03d..66d00661b 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -56,6 +56,29 @@ SQL; return $real_streams; } + + /** + * Returns an array with 2 elements: artist and title name of the track that is currently playing. + * Elements will be set to null if metadata is not set for those fields. + * + * Returns null if no track is currently playing. + * + * Data is based on GetPlayOrderRange() in this class. + */ + public static function getCurrentPlayingTrack() + { + $currentScheduleInfo = self::GetPlayOrderRange(); + if (empty($currentScheduleInfo["tracks"]["current"])) { + return null; + } + + $currentTrackArray = explode(" - ", $currentScheduleInfo["tracks"]["current"]["name"]); + $currentTrackMetadata = array( + "artist" => empty($currentTrackArray[0]) ? null : urlencode($currentTrackArray[0]), + "title" => empty($currentTrackArray[1]) ? null : urlencode($currentTrackArray[1]) + ); + return $currentTrackMetadata; + } /** * Returns data related to the scheduled items. diff --git a/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml b/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml index f7ae2bc84..d5fd34dd5 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_tunein.phtml @@ -10,8 +10,9 @@ element->getElement('tunein_station_id')->render() ?> + element->getElement('tunein_partner_id')->render() ?> + element->getElement('tunein_partner_key')->render() ?> - element->getElement('tunein_partner_id')->render() ?>
\ No newline at end of file From c3457ae03fb39f784dd9b664405cf1afa989d9c7 Mon Sep 17 00:00:00 2001 From: drigato Date: Tue, 19 May 2015 15:19:09 -0400 Subject: [PATCH 4/6] tunein testing --- airtime_mvc/application/common/TuneIn.php | 2 ++ .../application/forms/TuneInPreferences.php | 20 +++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/common/TuneIn.php b/airtime_mvc/application/common/TuneIn.php index 1dcfdf742..46f81a2bd 100644 --- a/airtime_mvc/application/common/TuneIn.php +++ b/airtime_mvc/application/common/TuneIn.php @@ -25,4 +25,6 @@ class Application_Common_TuneIn } + public static function updateOfflineMetadata() + } diff --git a/airtime_mvc/application/forms/TuneInPreferences.php b/airtime_mvc/application/forms/TuneInPreferences.php index 6ee52588a..7eee0d56f 100644 --- a/airtime_mvc/application/forms/TuneInPreferences.php +++ b/airtime_mvc/application/forms/TuneInPreferences.php @@ -50,11 +50,23 @@ class Application_Form_TuneInPreferences extends Zend_Form_SubForm // from the station on TuneIn. After that, and if the test request // succeeds, we will make another request with the real metadata. if ($data["enable_tunein"]) { - $qry_str = "?partnerId=".$data["tunein_partner_id"]."&partnerKey=".$data["tunein_partner_key"]."&id=".$data["tunein_station_id"]; + $credentialsQryStr = "?partnerId=".$data["tunein_partner_id"]."&partnerKey=".$data["tunein_partner_key"]."&id=".$data["tunein_station_id"]; $commercialFlagQryStr = "&commercial=true"; + $metadata = Application_Model_Schedule::getCurrentPlayingTrack(); + + if (is_null($metadata)) { + $qryStr = $credentialsQryStr . $commercialFlagQryStr; + } else { + $metadata["artist"] = empty($metadata["artist"]) ? "n/a" : $metadata["artist"]; + $metadata["title"] = empty($metadata["title"]) ? "n/a" : $metadata["title"]; + $metadataQryStr = "&artist=" . $metadata["artist"] . "&title=" . $metadata["title"]; + + $qryStr = $credentialsQryStr . $metadataQryStr; + } + $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $qry_str . $commercialFlagQryStr); + curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $qryStr); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); @@ -80,7 +92,7 @@ class Application_Form_TuneInPreferences extends Zend_Form_SubForm // Make another request to TuneIn to update the metadata right away // and to turn off the commercial flag. - $metadata = Application_Model_Schedule::getCurrentPlayingTrack(); + /*$metadata = Application_Model_Schedule::getCurrentPlayingTrack(); if (!is_null($metadata)) { @@ -110,7 +122,7 @@ class Application_Form_TuneInPreferences extends Zend_Form_SubForm if (!$xmlObj || $xmlObj->head->status != "200") { Logging::error("Failed updating metadata on TuneIn"); } - } + }*/ } } From 2da4e264e56b9a57df5a6c998ecface1735d7edf Mon Sep 17 00:00:00 2001 From: drigato Date: Tue, 19 May 2015 15:42:07 -0400 Subject: [PATCH 5/6] SAAS-772: Send metadata to Tunein Update metadata when station goes offline --- airtime_mvc/application/common/TuneIn.php | 34 ++++++++++++++----- .../controllers/ScheduleController.php | 8 +++++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/airtime_mvc/application/common/TuneIn.php b/airtime_mvc/application/common/TuneIn.php index 46f81a2bd..6040fb184 100644 --- a/airtime_mvc/application/common/TuneIn.php +++ b/airtime_mvc/application/common/TuneIn.php @@ -4,15 +4,11 @@ class Application_Common_TuneIn { public static function sendMetadataToTunein($title, $artist) { - $tuneInStationID = Application_Model_Preference::getTuneinStationId(); - $tuneInPartnerID = Application_Model_Preference::getTuneinPartnerId(); - $tuneInPartnerKey = Application_Model_Preference::getTuneinPartnerKey(); - - $qry_str = "?partnerId=".$tuneInPartnerID."&partnerKey=".$tuneInPartnerKey."&id=".$tuneInStationID - ."&title=".$title."&artist=".$artist."&commercial=false"; + $credQryStr = self::getCredentialsQueryString(); + $metadataQryStr = "&title=".$title."&artist=".$artist."&commercial=false"; $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $qry_str); + curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $credQryStr . $metadataQryStr); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); @@ -25,6 +21,28 @@ class Application_Common_TuneIn } - public static function updateOfflineMetadata() + private static function getCredentialsQueryString() { + $tuneInStationID = Application_Model_Preference::getTuneinStationId(); + $tuneInPartnerID = Application_Model_Preference::getTuneinPartnerId(); + $tuneInPartnerKey = Application_Model_Preference::getTuneinPartnerKey(); + + return "?partnerId=".$tuneInPartnerID."&partnerKey=".$tuneInPartnerKey."&id=".$tuneInStationID; + } + + public static function updateOfflineMetadata() { + $credQryStr = self::getCredentialsQueryString(); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, TUNEIN_API_URL . $credQryStr . "&commercial=true"); + curl_setopt($ch, CURLOPT_FAILONERROR, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + + curl_exec($ch); + if (curl_error($ch)) { + Logging::error("Failed to reach TuneIn: ". curl_errno($ch)." - ". curl_error($ch) . " - " . curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); + } + curl_close($ch); + } } diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 452788b23..0df1c389c 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -1,4 +1,5 @@ Date: Tue, 19 May 2015 15:51:04 -0400 Subject: [PATCH 6/6] Fix bad merge that added soundcloud settings back into preferences page --- airtime_mvc/application/views/scripts/form/preferences.phtml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/airtime_mvc/application/views/scripts/form/preferences.phtml b/airtime_mvc/application/views/scripts/form/preferences.phtml index f7e4db149..d200bf627 100644 --- a/airtime_mvc/application/views/scripts/form/preferences.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences.phtml @@ -10,11 +10,6 @@ -

- -
- element->getSubform('preferences_soundcloud') ?> -