SAAS-794: Schedule/get-current-playlist can take too long to respond

Fixes for webstreams
This commit is contained in:
drigato 2015-05-22 08:09:59 -04:00
parent 537fd2f148
commit b80c102e99
1 changed files with 100 additions and 48 deletions

View File

@ -144,18 +144,41 @@ SQL;
$results['current'] = null; $results['current'] = null;
$results['next'] = null; $results['next'] = null;
$currentMedia = CcScheduleQuery::create() /*$currentMedia = CcScheduleQuery::create()
->filterByDbStarts($utcNow, Criteria::LESS_EQUAL) ->filterByDbStarts($utcNow, Criteria::LESS_EQUAL)
->filterByDbEnds($utcNow, Criteria::GREATER_EQUAL) ->filterByDbEnds($utcNow, Criteria::GREATER_EQUAL)
->findOne(); ->filterByDbPlayoutStatus(0, Criteria::GREATER_THAN)
->findOne();*/
if (!isset($currentMedia)) { $sql = "select s.id, s.starts, s.ends, s.file_id, s.stream_id, s.media_item_played,
s.instance_id, si.ends as show_ends from cc_schedule s left join cc_show_instances si
on s.instance_id = si.id where s.playout_status > 0 and s.starts <= :p1
and s.ends >= :p2 order by starts limit 1";
$params = array(
":p1" => $utcNow->format("Y-m-d H:i:s"),
":p2" => $utcNow->format("Y-m-d H:i:s")
);
$rows = Application_Common_Database::prepareAndExecute($sql, $params);
if (count($rows) < 1) {
return $results; return $results;
} }
$currentMediaScheduleId = $currentMedia->getDbId(); if ($rows[0]["show_ends"] < $utcNow->format("Y-m-d H:i:s")) {
$currentMediaFileId = $currentMedia->getDbFileId(); return $results;
$currentMediaStreamId = $currentMedia->getDbStreamId(); }
$currentMedia = $rows[0];
if ($currentMedia["ends"] > $currentMedia["show_ends"]) {
$currentMedia["ends"] = $currentMedia["show_ends"];
}
$currentMediaScheduleId = $currentMedia["id"];
$currentMediaFileId = $currentMedia["file_id"];
$currentMediaStreamId = $currentMedia["stream_id"];
if (isset($currentMediaFileId)) { if (isset($currentMediaFileId)) {
$currentMediaType = "track"; $currentMediaType = "track";
$currentFile = CcFilesQuery::create() $currentFile = CcFilesQuery::create()
@ -164,16 +187,26 @@ SQL;
$currentMediaName = $currentFile->getDbArtistName() . " - " . $currentFile->getDbTrackTitle(); $currentMediaName = $currentFile->getDbArtistName() . " - " . $currentFile->getDbTrackTitle();
} else if (isset($currentMediaStreamId)) { } else if (isset($currentMediaStreamId)) {
$currentMediaType = "webstream"; $currentMediaType = "webstream";
//TODO get name $currentWebstream = CcWebstreamQuery::create()
->filterByDbId($currentMediaStreamId)
->findOne();
$currentWebstreamMetadata = CcWebstreamMetadataQuery::create()
->filterByDbInstanceId($currentMedia["instance_id"])
->orderByDbStartTime(Criteria::DESC)
->findOne();
$currentMediaName = $currentWebstream->getDbName();
if (isset($currentWebstreamMetadata)) {
$currentMediaName .= " - " . $currentWebstreamMetadata->getDbLiquidsoapData();
}
} else { } else {
$currentMediaType = null; $currentMediaType = null;
} }
$results["current"] = array( $results["current"] = array(
"starts" => $currentMedia->getDbStarts(), "starts" => $currentMedia["starts"],
"ends" => $currentMedia->getDbEnds(), "ends" => $currentMedia["ends"],
"type" => $currentMediaType, "type" => $currentMediaType,
"name" => $currentMediaName, "name" => $currentMediaName,
"media_item_played" => $currentMedia->getDbMediaItemPlayed(), "media_item_played" => $currentMedia["media_item_played"],
"record" => "0" "record" => "0"
); );
@ -181,51 +214,70 @@ SQL;
->filterByDbId($currentMediaScheduleId-1) ->filterByDbId($currentMediaScheduleId-1)
->orderByDbStarts() ->orderByDbStarts()
->findOne(); ->findOne();
$previousMediaFileId = $previousMedia->getDbFileId(); if (isset($previousMedia)) {
$previousMediaStreamId = $previousMedia->getDbStreamId(); $previousMediaFileId = $previousMedia->getDbFileId();
if (isset($previousMediaFileId)) { $previousMediaStreamId = $previousMedia->getDbStreamId();
$previousMediaType = "track"; if (isset($previousMediaFileId)) {
$previousFile = CcFilesQuery::create() $previousMediaType = "track";
->filterByDbId($previousMediaFileId) $previousFile = CcFilesQuery::create()
->findOne(); ->filterByDbId($previousMediaFileId)
$previousMediaName = $previousFile->getDbArtistName() . " - " . $previousFile->getDbTrackTitle(); ->findOne();
} else if (isset($previousMediaStreamId)) { $previousMediaName = $previousFile->getDbArtistName() . " - " . $previousFile->getDbTrackTitle();
$previousMediaType = "webstream"; } else if (isset($previousMediaStreamId)) {
//TODO get name $previousMediaName = null;
} else { $previousMediaType = "webstream";
$previousMediaType = null; $previousWebstream = CcWebstreamQuery::create()
->filterByDbId($previousMediaStreamId)
->findOne();
/*$previousWebstreamMetadata = CcWebstreamMetadataQuery::create()
->filterByDbInstanceId($previousMedia->getDbInstanceId())
->orderByDbStartTime(Criteria::DESC)
->findOne();*/
$previousMediaName = $previousWebstream->getDbName();
} else {
$previousMediaType = null;
}
$results["previous"] = array(
"starts" => $previousMedia->getDbStarts(),
"ends" => $previousMedia->getDbEnds(),
"type" => $previousMediaType,
"name" => $previousMediaName
);
} }
$results["previous"] = array(
"starts" => $previousMedia->getDbStarts(),
"ends" => $previousMedia->getDbEnds(),
"type" => $previousMediaType,
"name" => $previousMediaName
);
$nextMedia = CcScheduleQuery::create() $nextMedia = CcScheduleQuery::create()
->filterByDbId($currentMediaScheduleId+1) ->filterByDbId($currentMediaScheduleId+1)
->orderByDbStarts() ->orderByDbStarts()
->findOne(); ->findOne();
$nextMediaFileId = $nextMedia->getDbFileId(); if (isset($nextMedia)) {
$nextMediaStreamId = $previousMedia->getDbStreamId(); $nextMediaFileId = $nextMedia->getDbFileId();
if (isset($nextMediaFileId)) { $nextMediaStreamId = $nextMedia->getDbStreamId();
$nextMediaType = "track"; if (isset($nextMediaFileId)) {
$nextFile = CcFilesQuery::create() $nextMediaType = "track";
->filterByDbId($nextMediaFileId) $nextFile = CcFilesQuery::create()
->findOne(); ->filterByDbId($nextMediaFileId)
$nextMediaName = $nextFile->getDbArtistName() . " - " . $nextFile->getDbTrackTitle(); ->findOne();
} else if (isset($nextMediaStreamId)) { $nextMediaName = $nextFile->getDbArtistName() . " - " . $nextFile->getDbTrackTitle();
$nextMediaType = "webstream"; } else if (isset($nextMediaStreamId)) {
//TODO get name $nextMediaType = "webstream";
} else { $nextWebstream = CcWebstreamQuery::create()
$nextMediaType = null; ->filterByDbId($nextMediaStreamId)
->findOne();
/*$nextWebstreamMetadata = CcWebstreamMetadataQuery::create()
->filterByDbInstanceId($nextMedia->getDbInstanceId())
->orderByDbStartTime(Criteria::DESC)
->findOne();*/
$nextMediaName = $nextWebstream->getDbName();
} else {
$nextMediaType = null;
}
$results["next"] = array(
"starts" => $nextMedia->getDbStarts(),
"ends" => $nextMedia->getDbEnds(),
"type" => $nextMediaType,
"name" => $nextMediaName
);
} }
$results["next"] = array(
"starts" => $nextMedia->getDbStarts(),
"ends" => $nextMedia->getDbEnds(),
"type" => $nextMediaType,
"name" => $nextMediaName
);
return $results; return $results;