SAAS-794 Schedule/get-current-playlist can take too long to respond
Replaced GetPrevCurrentNext function with new one that is much simpler and less taxing on the database and web server.
This commit is contained in:
parent
3d8cd8e927
commit
537fd2f148
1 changed files with 99 additions and 1 deletions
|
@ -116,7 +116,8 @@ SQL;
|
|||
$previousShowID = count($shows['previousShow'])>0?$shows['previousShow'][0]['instance_id']:null;
|
||||
$currentShowID = count($shows['currentShow'])>0?$shows['currentShow'][0]['instance_id']:null;
|
||||
$nextShowID = count($shows['nextShow'])>0?$shows['nextShow'][0]['instance_id']:null;
|
||||
$results = self::GetPrevCurrentNext($previousShowID, $currentShowID, $nextShowID, $utcNow);
|
||||
//$results = self::GetPrevCurrentNext($previousShowID, $currentShowID, $nextShowID, $utcNow);
|
||||
$results = Application_Model_Schedule::getPVC($utcNow);
|
||||
|
||||
$range = array(
|
||||
"env" => APPLICATION_ENV,
|
||||
|
@ -133,6 +134,103 @@ SQL;
|
|||
return $range;
|
||||
}
|
||||
|
||||
public static function getPVC($utcNow)
|
||||
{
|
||||
$timeZone = new DateTimeZone("UTC"); //This function works entirely in UTC.
|
||||
assert(get_class($utcNow) === "DateTime");
|
||||
assert($utcNow->getTimeZone() == $timeZone);
|
||||
|
||||
$results['previous'] = null;
|
||||
$results['current'] = null;
|
||||
$results['next'] = null;
|
||||
|
||||
$currentMedia = CcScheduleQuery::create()
|
||||
->filterByDbStarts($utcNow, Criteria::LESS_EQUAL)
|
||||
->filterByDbEnds($utcNow, Criteria::GREATER_EQUAL)
|
||||
->findOne();
|
||||
|
||||
if (!isset($currentMedia)) {
|
||||
return $results;
|
||||
}
|
||||
|
||||
$currentMediaScheduleId = $currentMedia->getDbId();
|
||||
$currentMediaFileId = $currentMedia->getDbFileId();
|
||||
$currentMediaStreamId = $currentMedia->getDbStreamId();
|
||||
if (isset($currentMediaFileId)) {
|
||||
$currentMediaType = "track";
|
||||
$currentFile = CcFilesQuery::create()
|
||||
->filterByDbId($currentMediaFileId)
|
||||
->findOne();
|
||||
$currentMediaName = $currentFile->getDbArtistName() . " - " . $currentFile->getDbTrackTitle();
|
||||
} else if (isset($currentMediaStreamId)) {
|
||||
$currentMediaType = "webstream";
|
||||
//TODO get name
|
||||
} else {
|
||||
$currentMediaType = null;
|
||||
}
|
||||
$results["current"] = array(
|
||||
"starts" => $currentMedia->getDbStarts(),
|
||||
"ends" => $currentMedia->getDbEnds(),
|
||||
"type" => $currentMediaType,
|
||||
"name" => $currentMediaName,
|
||||
"media_item_played" => $currentMedia->getDbMediaItemPlayed(),
|
||||
"record" => "0"
|
||||
);
|
||||
|
||||
$previousMedia = CcScheduleQuery::create()
|
||||
->filterByDbId($currentMediaScheduleId-1)
|
||||
->orderByDbStarts()
|
||||
->findOne();
|
||||
$previousMediaFileId = $previousMedia->getDbFileId();
|
||||
$previousMediaStreamId = $previousMedia->getDbStreamId();
|
||||
if (isset($previousMediaFileId)) {
|
||||
$previousMediaType = "track";
|
||||
$previousFile = CcFilesQuery::create()
|
||||
->filterByDbId($previousMediaFileId)
|
||||
->findOne();
|
||||
$previousMediaName = $previousFile->getDbArtistName() . " - " . $previousFile->getDbTrackTitle();
|
||||
} else if (isset($previousMediaStreamId)) {
|
||||
$previousMediaType = "webstream";
|
||||
//TODO get name
|
||||
} else {
|
||||
$previousMediaType = null;
|
||||
}
|
||||
$results["previous"] = array(
|
||||
"starts" => $previousMedia->getDbStarts(),
|
||||
"ends" => $previousMedia->getDbEnds(),
|
||||
"type" => $previousMediaType,
|
||||
"name" => $previousMediaName
|
||||
);
|
||||
|
||||
$nextMedia = CcScheduleQuery::create()
|
||||
->filterByDbId($currentMediaScheduleId+1)
|
||||
->orderByDbStarts()
|
||||
->findOne();
|
||||
$nextMediaFileId = $nextMedia->getDbFileId();
|
||||
$nextMediaStreamId = $previousMedia->getDbStreamId();
|
||||
if (isset($nextMediaFileId)) {
|
||||
$nextMediaType = "track";
|
||||
$nextFile = CcFilesQuery::create()
|
||||
->filterByDbId($nextMediaFileId)
|
||||
->findOne();
|
||||
$nextMediaName = $nextFile->getDbArtistName() . " - " . $nextFile->getDbTrackTitle();
|
||||
} else if (isset($nextMediaStreamId)) {
|
||||
$nextMediaType = "webstream";
|
||||
//TODO get name
|
||||
} else {
|
||||
$nextMediaType = null;
|
||||
}
|
||||
$results["next"] = array(
|
||||
"starts" => $nextMedia->getDbStarts(),
|
||||
"ends" => $nextMedia->getDbEnds(),
|
||||
"type" => $nextMediaType,
|
||||
"name" => $nextMediaName
|
||||
);
|
||||
|
||||
return $results;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Queries the database for the set of schedules one hour before
|
||||
* and after the given time. If a show starts and ends within that
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue