CC-3504 : Adding a clip when nothing is playing should schedule the clip at the current time
This commit is contained in:
parent
7a6cdeaf10
commit
275faa1881
7 changed files with 83 additions and 28 deletions
|
@ -89,7 +89,7 @@ class Application_Model_Scheduler {
|
|||
*
|
||||
* @return DateTime endDT in UTC
|
||||
*/
|
||||
public static function findEndTime($p_startDT, $p_duration) {
|
||||
private static function findEndTime($p_startDT, $p_duration) {
|
||||
|
||||
$startEpoch = $p_startDT->format("U.u");
|
||||
$durationSeconds = Application_Model_Playlist::playlistTimeToSeconds($p_duration);
|
||||
|
@ -109,6 +109,39 @@ class Application_Model_Scheduler {
|
|||
|
||||
return $dt;
|
||||
}
|
||||
|
||||
private function findNextStartTime($DT, $instance) {
|
||||
|
||||
//check to see if the show has started.
|
||||
$nowDT = new DateTime("now", new DateTimeZone("UTC"));
|
||||
|
||||
$sEpoch = intval($DT->format("U"));
|
||||
$nEpoch = intval($nowDT->format("U"));
|
||||
|
||||
//check for if the show has started.
|
||||
if ($nEpoch > $sEpoch) {
|
||||
//need some kind of placeholder for cc_schedule.
|
||||
//playout_status will be -1.
|
||||
$nextDT = $nowDT;
|
||||
|
||||
$length = $nEpoch - $sEpoch;
|
||||
$cliplength = Application_Model_Playlist::secondsToPlaylistTime($length);
|
||||
|
||||
//fillers are for only storing a chunk of time space that has already passed.
|
||||
$filler = new CcSchedule();
|
||||
$filler->setDbStarts($DT)
|
||||
->setDbEnds($nowDT)
|
||||
->setDbClipLength($cliplength)
|
||||
->setDbPlayoutStatus(-1)
|
||||
->setDbInstanceId($instance->getDbId())
|
||||
->save($this->con);
|
||||
}
|
||||
else {
|
||||
$nextDT = $DT;
|
||||
}
|
||||
|
||||
return $nextDT;
|
||||
}
|
||||
|
||||
/*
|
||||
* @param array $scheduledIds
|
||||
|
@ -145,12 +178,16 @@ class Application_Model_Scheduler {
|
|||
if (intval($schedule["instance"]) !== $instance->getDbId()) {
|
||||
throw new OutDatedScheduleException("The schedule you're viewing is out of date!");
|
||||
}
|
||||
$nextStartDT = $schedItem->getDbEnds(null);
|
||||
$schedItemEndDT = $schedItem->getDbEnds(null);
|
||||
$nextStartDT = $this->findNextStartTime($schedItemEndDT, $instance);
|
||||
}
|
||||
//selected empty row to add after
|
||||
else {
|
||||
$instance = CcShowInstancesQuery::create()->findPK($schedule["instance"], $this->con);
|
||||
$nextStartDT = $instance->getDbStarts(null);
|
||||
|
||||
//check to see if the show has started.
|
||||
$showStartDT = $instance->getDbStarts(null);
|
||||
$nextStartDT = $this->findNextStartTime($showStartDT, $instance);
|
||||
}
|
||||
|
||||
$currTs = intval($instance->getDbLastScheduled("U")) ? : 0;
|
||||
|
@ -244,6 +281,7 @@ class Application_Model_Scheduler {
|
|||
->update(array('DbLastScheduled' => new DateTime("now", new DateTimeZone("UTC"))), $this->con);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
Logging::debug($e->getMessage());
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ class Application_Model_ShowBuilder {
|
|||
$this->epoch_now = time();
|
||||
}
|
||||
|
||||
//check to see if this row should be editable.
|
||||
//check to see if this row should be editable by the user.
|
||||
private function isAllowed($p_item, &$row) {
|
||||
|
||||
//cannot schedule in a recorded show.
|
||||
|
@ -62,17 +62,20 @@ class Application_Model_ShowBuilder {
|
|||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
$showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC"));
|
||||
$showEndDT = new DateTime($p_item["si_ends"], new DateTimeZone("UTC"));
|
||||
$schedStartDT = new DateTime($p_item["sched_starts"], new DateTimeZone("UTC"));
|
||||
|
||||
$showStartEpoch = intval($showStartDT->format('U'));
|
||||
$showEndEpoch = intval($showEndDT->format('U'));
|
||||
$schedStartEpoch = intval($schedStartDT->format('U'));
|
||||
*/
|
||||
|
||||
//can only schedule the show if item hasn't started and you are allowed.
|
||||
if ($this->epoch_now < max($showStartEpoch, $schedStartEpoch)
|
||||
&& $this->user->canSchedule($p_item["show_id"]) == true) {
|
||||
if ($this->user->canSchedule($p_item["show_id"]) == true) {
|
||||
$row["allowed"] = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function getItemColor($p_item, &$row) {
|
||||
|
@ -154,7 +157,7 @@ class Application_Model_ShowBuilder {
|
|||
$row = $this->defaultRowArray;
|
||||
$this->isAllowed($p_item, $row);
|
||||
$this->getRowTimestamp($p_item, $row);
|
||||
$this->getItemColor($p_item, &$row);
|
||||
$this->getItemColor($p_item, $row);
|
||||
|
||||
$showStartDT = new DateTime($p_item["si_starts"], new DateTimeZone("UTC"));
|
||||
$showStartDT->setTimezone(new DateTimeZone($this->timezone));
|
||||
|
@ -182,10 +185,6 @@ class Application_Model_ShowBuilder {
|
|||
private function makeScheduledItemRow($p_item) {
|
||||
$row = $this->defaultRowArray;
|
||||
|
||||
$this->getItemColor($p_item, &$row);
|
||||
$this->getRowTimestamp($p_item, $row);
|
||||
$this->isAllowed($p_item, $row);
|
||||
|
||||
if (isset($p_item["sched_starts"])) {
|
||||
|
||||
$schedStartDT = new DateTime($p_item["sched_starts"], new DateTimeZone("UTC"));
|
||||
|
@ -235,6 +234,10 @@ class Application_Model_ShowBuilder {
|
|||
$row["instance"] = intval($p_item["si_id"]);
|
||||
$row["image"] = '';
|
||||
}
|
||||
|
||||
$this->getItemColor($p_item, $row);
|
||||
$this->getRowTimestamp($p_item, $row);
|
||||
$this->isAllowed($p_item, $row);
|
||||
|
||||
return $row;
|
||||
}
|
||||
|
@ -263,7 +266,8 @@ class Application_Model_ShowBuilder {
|
|||
$showEndDT->setTimezone(new DateTimeZone($this->timezone));
|
||||
$endsEpoch = intval($showEndDT->format("U"));
|
||||
|
||||
$this->getScheduledStatus($startsEpoch, $endsEpoch, $row);
|
||||
$this->getScheduledStatus($startsEpoch, $endsEpoch, $row);
|
||||
$this->isAllowed($p_item, $row);
|
||||
|
||||
return $row;
|
||||
}
|
||||
|
@ -327,6 +331,11 @@ class Application_Model_ShowBuilder {
|
|||
for ($i = 0, $rows = count($scheduled_items); $i < $rows; $i++) {
|
||||
|
||||
$item = $scheduled_items[$i];
|
||||
|
||||
//don't send back data for filler rows.
|
||||
if (isset($item["playout_status"]) && $item["playout_status"] < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//make a header row.
|
||||
if ($current_id !== $item["si_id"]) {
|
||||
|
|
|
@ -112,10 +112,13 @@ class CcShowInstances extends BaseCcShowInstances {
|
|||
public function updateScheduleStatus(PropelPDO $con) {
|
||||
|
||||
Logging::log("in post save for showinstances");
|
||||
|
||||
$now = time();
|
||||
|
||||
//scheduled track is in the show
|
||||
CcScheduleQuery::create()
|
||||
->filterByDbInstanceId($this->id)
|
||||
->filterByDbPlayoutStatus(0, Criteria::GREATER_EQUAL)
|
||||
->filterByDbEnds($this->ends, Criteria::LESS_EQUAL)
|
||||
->update(array('DbPlayoutStatus' => 1), $con);
|
||||
|
||||
|
@ -124,6 +127,7 @@ class CcShowInstances extends BaseCcShowInstances {
|
|||
//scheduled track is a boundary track
|
||||
CcScheduleQuery::create()
|
||||
->filterByDbInstanceId($this->id)
|
||||
->filterByDbPlayoutStatus(0, Criteria::GREATER_EQUAL)
|
||||
->filterByDbStarts($this->ends, Criteria::LESS_THAN)
|
||||
->filterByDbEnds($this->ends, Criteria::GREATER_THAN)
|
||||
->update(array('DbPlayoutStatus' => 2), $con);
|
||||
|
@ -131,6 +135,7 @@ class CcShowInstances extends BaseCcShowInstances {
|
|||
//scheduled track is overbooked.
|
||||
CcScheduleQuery::create()
|
||||
->filterByDbInstanceId($this->id)
|
||||
->filterByDbPlayoutStatus(0, Criteria::GREATER_EQUAL)
|
||||
->filterByDbStarts($this->ends, Criteria::GREATER_THAN)
|
||||
->update(array('DbPlayoutStatus' => 0), $con);
|
||||
|
||||
|
|
|
@ -726,7 +726,9 @@ abstract class BaseCcSchedule extends BaseObject implements Persistent
|
|||
if ($v !== null) {
|
||||
$v = (int) $v;
|
||||
}
|
||||
|
||||
|
||||
Logging::log('$v status is '.$v);
|
||||
|
||||
if ($this->playout_status !== $v || $this->isNew()) {
|
||||
$this->playout_status = $v;
|
||||
$this->modifiedColumns[] = CcSchedulePeer::PLAYOUT_STATUS;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue