From efad7be91a63d93df8fcaf96d9fe9f59f8002688 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Mon, 11 May 2015 11:08:43 -0400 Subject: [PATCH] CC-5120: Can't add PLS webstreams --- airtime_mvc/application/models/Webstream.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/models/Webstream.php b/airtime_mvc/application/models/Webstream.php index 007e789384..87eee7797f 100644 --- a/airtime_mvc/application/models/Webstream.php +++ b/airtime_mvc/application/models/Webstream.php @@ -93,6 +93,7 @@ public static function deleteStreams($p_ids, $p_userId) $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); if (!$isAdminOrPM) { + //Make sure the user has ownership of ALL the selected webstreams before $leftOver = self::streamsNotOwnedByUser($p_ids, $p_userId); if (count($leftOver) == 0) { CcWebstreamQuery::create()->findPKs($p_ids)->delete(); @@ -280,13 +281,22 @@ private static function getXspfUrl($url) private static function getPlsUrl($url) { $content = self::getUrlData($url); - $ini = parse_ini_string($content, true); - if ($ini !== false && isset($ini["playlist"]) && isset($ini["playlist"]["File1"])) { - return $ini["playlist"]["File1"]; + $matches = array(); + $numStreams = 0; //Number of streams explicitly listed in the PLS. + + if (preg_match("/NumberOfEntries=([0-9]*)/", $content, $matches) !== FALSE) { + $numStreams = $matches[1]; } - throw new Exception(_("Could not parse PLS playlist")); + //Find all the stream URLs in the playlist + if (preg_match_all("/File[0-9]*=(.*)/", $content, $matches) !== FALSE) { + //This array contains all the streams! If we need fallback stream URLs in the future, + //they're already in this array... + return $matches[1][0]; + } else { + throw new Exception(_("Could not parse PLS playlist")); + } } private static function getM3uUrl($url)