CC-2084: Integrate RabbitMQ for immediate schedule updates and commands

This is the code for the server side to push the schedule to RabbitMQ.
Right now it is disabled and should cause no changes in behavior.

Also added comments to functions and formatted code correctly.
This commit is contained in:
paul.baranowski 2011-03-22 09:55:33 -04:00
parent d9431f95b4
commit d38e2adb58
9 changed files with 410 additions and 306 deletions

View File

@ -19,6 +19,8 @@ require_once 'StoredFile.php';
require_once 'Schedule.php';
require_once 'Shows.php';
require_once 'Users.php';
require_once 'RabbitMq.php';
global $CC_CONFIG, $CC_DBC;
$dsn = $CC_CONFIG['dsn'];

View File

@ -1,6 +1,7 @@
<?php
define('AIRTIME_VERSION', '1.7.0 alpha');
define('AIRTIME_COPYRIGHT_DATE', '2010-2011');
define('AIRTIME_REST_VERSION', '1.1');
// These are the default values for the config.
global $CC_CONFIG;
@ -25,7 +26,13 @@ $CC_CONFIG = array(
// Name of the web server user
'webServerUser' => 'www-data',
// ***********************************************************************
'rabbitmq' => array("host" => "127.0.0.1",
"port" => "5672",
"user" => "guest",
"password" => "guest",
"vhost" => "/"),
// ***********************************************************************
// STOP CUSTOMIZING HERE
//
// You don't need to touch anything below this point.
@ -55,26 +62,26 @@ $CC_CONFIG = array(
//'AdminsGr' => 'Admins',
// name of station preferences group
'StationPrefsGr'=> 'StationPrefs',
// 'StationPrefsGr'=> 'StationPrefs',
// name of 'all users' group
//'AllGr' => 'All',
/* ==================================== application-specific configuration */
'objtypes' => array(
'Storage' => array(/*'Folder',*/ 'File' /*, 'Replica'*/),
'File' => array(),
'audioclip' => array(),
'playlist' => array(),
),
'allowedActions'=> array(
'File' => array('editPrivs', 'write', 'read'),
'audioclip' => array('editPrivs', 'write', 'read'),
'playlist' => array('editPrivs', 'write', 'read'),
),
'allActions' => array(
'editPrivs', 'write', 'read', 'subjects'
),
// 'objtypes' => array(
// 'Storage' => array(/*'Folder',*/ 'File' /*, 'Replica'*/),
// 'File' => array(),
// 'audioclip' => array(),
// 'playlist' => array(),
// ),
// 'allowedActions'=> array(
// 'File' => array('editPrivs', 'write', 'read'),
// 'audioclip' => array('editPrivs', 'write', 'read'),
// 'playlist' => array('editPrivs', 'write', 'read'),
// ),
// 'allActions' => array(
// 'editPrivs', 'write', 'read', 'subjects'
// ),
/* =================================================== cron configuration */
'cronUserName' => 'www-data',
@ -82,7 +89,7 @@ $CC_CONFIG = array(
'lockfile' => dirname(__FILE__).'/stor/buffer/cron.lock',
'cronfile' => dirname(__FILE__).'/cron/croncall.php',
'paramdir' => dirname(__FILE__).'/cron/params',
'systemPrefId' => "0", // ID for system prefs in prefs table
// 'systemPrefId' => "0", // ID for system prefs in prefs table
);
// Add database table names
@ -94,10 +101,8 @@ $CC_CONFIG['permTable'] = $CC_CONFIG['tblNamePrefix'].'perms';
$CC_CONFIG['sessTable'] = $CC_CONFIG['tblNamePrefix'].'sess';
$CC_CONFIG['subjTable'] = $CC_CONFIG['tblNamePrefix'].'subjs';
$CC_CONFIG['smembTable'] = $CC_CONFIG['tblNamePrefix'].'smemb';
$CC_CONFIG['transTable'] = $CC_CONFIG['tblNamePrefix'].'trans';
$CC_CONFIG['prefTable'] = $CC_CONFIG['tblNamePrefix'].'pref';
$CC_CONFIG['scheduleTable'] = $CC_CONFIG['tblNamePrefix'].'schedule';
$CC_CONFIG['backupTable'] = $CC_CONFIG['tblNamePrefix'].'backup';
$CC_CONFIG['playListTimeView'] = $CC_CONFIG['tblNamePrefix'].'playlisttimes';
$CC_CONFIG['showSchedule'] = $CC_CONFIG['tblNamePrefix'].'show_schedule';
$CC_CONFIG['showDays'] = $CC_CONFIG['tblNamePrefix'].'show_days';
@ -106,16 +111,15 @@ $CC_CONFIG['showInstances'] = $CC_CONFIG['tblNamePrefix'].'show_instances';
$CC_CONFIG['playListSequence'] = $CC_CONFIG['playListTable'].'_id';
$CC_CONFIG['filesSequence'] = $CC_CONFIG['filesTable'].'_id';
$CC_CONFIG['transSequence'] = $CC_CONFIG['transTable'].'_id';
$CC_CONFIG['prefSequence'] = $CC_CONFIG['prefTable'].'_id';
$CC_CONFIG['permSequence'] = $CC_CONFIG['permTable'].'_id';
$CC_CONFIG['subjSequence'] = $CC_CONFIG['subjTable'].'_id';
$CC_CONFIG['smembSequence'] = $CC_CONFIG['smembTable'].'_id';
// System users/groups - they cannot be deleted
$CC_CONFIG['sysSubjs'] = array(
'root', /*$CC_CONFIG['AdminsGr'],*/ /*$CC_CONFIG['AllGr'],*/ $CC_CONFIG['StationPrefsGr']
);
//$CC_CONFIG['sysSubjs'] = array(
// 'root', /*$CC_CONFIG['AdminsGr'],*/ /*$CC_CONFIG['AllGr'],*/ $CC_CONFIG['StationPrefsGr']
//);
// Add libs to the PHP path
$old_include_path = get_include_path();

View File

@ -123,14 +123,10 @@ class ApiController extends Zend_Controller_Action
$to = $this->_getParam("to");
if (Schedule::ValidPypoTimeFormat($from) && Schedule::ValidPypoTimeFormat($to)) {
$result = Schedule::ExportRangeAsJson($from, $to);
$result['stream_metadata'] = array();
$result['stream_metadata']['format'] = Application_Model_Preference::GetStreamLabelFormat();
$result['stream_metadata']['station_name'] = Application_Model_Preference::GetStationName();
echo json_encode($result);
}
}
public function notifyMediaItemStartPlayAction()
{
global $CC_CONFIG;

View File

@ -111,6 +111,7 @@ class ScheduleController extends Zend_Controller_Action
if(isset($error))
$this->view->error = $error;
}
public function resizeShowAction()

View File

@ -2,43 +2,67 @@
class Application_Model_DateHelper
{
private $_timestamp;
private $_timestamp;
function __construct() {
function __construct()
{
$this->_timestamp = date("U");
}
}
function getDate(){
return date("Y-m-d H:i:s", $this->_timestamp);
}
/**
* Get time of object construction in the format
* YYYY-MM-DD HH:mm:ss
*/
function getDate()
{
return date("Y-m-d H:i:s", $this->_timestamp);
}
function getTime(){
return date("H:i:s", $this->_timestamp);
}
/**
* Get time of object construction in the format
* HH:mm:ss
*/
function getTime()
{
return date("H:i:s", $this->_timestamp);
}
function setDate($dateString){
/**
* Set the internal timestamp of the object.
*/
function setDate($dateString)
{
$this->_timestamp = strtotime($dateString);
}
}
function getNowDayStartDiff(){
$dayStartTS = strtotime(date("Y-m-d", $this->_timestamp));
return $this->_timestamp - $dayStartTS;
}
/**
*
* Enter description here ...
*/
function getNowDayStartDiff()
{
$dayStartTS = strtotime(date("Y-m-d", $this->_timestamp));
return $this->_timestamp - $dayStartTS;
}
function getNowDayEndDiff(){
$dayEndTS = strtotime(date("Y-m-d", $this->_timestamp+(86400)));
return $dayEndTS - $this->_timestamp;
}
function getNowDayEndDiff()
{
$dayEndTS = strtotime(date("Y-m-d", $this->_timestamp+(86400)));
return $dayEndTS - $this->_timestamp;
}
function getEpochTime(){
function getEpochTime()
{
return $this->_timestamp;
}
}
public static function TimeDiff($time1, $time2){
public static function TimeDiff($time1, $time2)
{
return strtotime($time2) - strtotime($time1);
}
}
public static function ConvertMSToHHMMSSmm($time){
public static function ConvertMSToHHMMSSmm($time)
{
$hours = floor($time / 3600000);
$time -= 3600000*$hours;
@ -51,11 +75,11 @@ class Application_Model_DateHelper
$ms = $time;
if (strlen($hours) == 1)
$hours = "0".$hours;
$hours = "0".$hours;
if (strlen($minutes) == 1)
$minutes = "0".$minutes;
$minutes = "0".$minutes;
if (strlen($seconds) == 1)
$seconds = "0".$seconds;
$seconds = "0".$seconds;
return $hours.":".$minutes.":".$seconds.".".$ms;
}

View File

@ -0,0 +1,33 @@
<?php
require_once 'php-amqplib/amqp.inc';
class RabbitMq
{
/**
* Push the current schedule to RabbitMQ, to be picked up by Pypo.
* Will push the schedule in the range from 24 hours ago to 24 hours
* in the future.
*/
public static function PushSchedule() {
// global $CC_CONFIG;
// $conn = new AMQPConnection($CC_CONFIG["rabbitmq"]["host"],
// $CC_CONFIG["rabbitmq"]["port"],
// $CC_CONFIG["rabbitmq"]["user"],
// $CC_CONFIG["rabbitmq"]["password"]);
// $channel = $conn->channel();
// $channel->access_request($CC_CONFIG["rabbitmq"]["vhost"], false, false, true, true);
//
// $EXCHANGE = 'airtime-schedule';
// $channel->exchange_declare($EXCHANGE, 'direct', false, false, false);
//
// $data = json_encode(Schedule::ExportRangeAsJson());
// $msg = new AMQPMessage($data, array('content_type' => 'text/plain'));
//
// $channel->basic_publish($msg, $EXCHANGE);
// $channel->close();
// $conn->close();
}
}

View File

@ -110,7 +110,6 @@ class ScheduleGroup {
//var_dump($sql);
return $result;
}
return $this->groupId;
} elseif (!is_null($p_playlistId)){
// Schedule a whole playlist
@ -153,8 +152,9 @@ class ScheduleGroup {
$itemStartTime = $CC_DBC->getOne("SELECT TIMESTAMP '$itemStartTime' + INTERVAL '$trackLength'");
$id = $this->dateToId($itemStartTime);
}
return $this->groupId;
}
RabbitMq::PushSchedule();
return $this->groupId;
}
public function addAfter($show_instance, $p_groupId, $p_audioFileId) {
@ -176,10 +176,6 @@ class ScheduleGroup {
return $this->add($show_instance, $startTime, null, $p_playlistId);
}
public function update() {
}
/**
* Remove the group from the schedule.
* Note: does not check if it is in the past, you can remove anything.
@ -195,7 +191,9 @@ class ScheduleGroup {
$sql = "DELETE FROM ".$CC_CONFIG["scheduleTable"]
." WHERE group_id = ".$this->groupId;
//echo $sql;
return $CC_DBC->query($sql);
$retVal = $CC_DBC->query($sql);
RabbitMq::PushSchedule();
return $retVal;
}
/**
@ -231,17 +229,14 @@ class ScheduleGroup {
return $CC_DBC->GetAll($sql);
}
public function reschedule($toDateTime) {
global $CC_CONFIG, $CC_DBC;
// $sql = "UPDATE ".$CC_CONFIG["scheduleTable"]. " SET id=, starts=,ends="
}
public function notifyGroupStartPlay() {
global $CC_CONFIG, $CC_DBC;
$sql = "UPDATE ".$CC_CONFIG['scheduleTable']
." SET schedule_group_played=TRUE"
." WHERE group_id=".$this->groupId;
return $CC_DBC->query($sql);
$retVal = $CC_DBC->query($sql);
RabbitMq::PushSchedule();
return $retVal;
}
public function notifyMediaItemStartPlay($p_fileId) {
@ -250,7 +245,9 @@ class ScheduleGroup {
." SET media_item_played=TRUE"
." WHERE group_id=".$this->groupId
." AND file_id=".pg_escape_string($p_fileId);
return $CC_DBC->query($sql);
$retVal = $CC_DBC->query($sql);
RabbitMq::PushSchedule();
return $retVal;
}
}
@ -334,7 +331,8 @@ class Schedule {
return $res;
}
public static function GetPercentScheduled($instance_id, $s_datetime, $e_datetime){
public static function GetPercentScheduled($instance_id, $s_datetime, $e_datetime)
{
$time = Schedule::GetTotalShowTime($instance_id);
$s_epoch = strtotime($s_datetime);
@ -396,7 +394,8 @@ class Schedule {
* @return array
* Returns empty array if nothing found
*/
public static function GetItems($p_fromDateTime, $p_toDateTime, $p_playlistsOnly = true) {
public static function GetItems($p_fromDateTime, $p_toDateTime, $p_playlistsOnly = true)
{
global $CC_CONFIG, $CC_DBC;
$rows = array();
if (!$p_playlistsOnly) {
@ -457,7 +456,8 @@ class Schedule {
* @param int $next
* @return date
*/
public static function GetPlayOrderRange($prev = 1, $next = 1) {
public static function GetPlayOrderRange($prev = 1, $next = 1)
{
if (!is_int($prev) || !is_int($next)){
//must enter integers to specify ranges
return array();
@ -469,9 +469,9 @@ class Schedule {
$timeNow = $date->getDate();
return array("env"=>APPLICATION_ENV,
"schedulerTime"=>gmdate("Y-m-d H:i:s"),
"previous"=>Schedule::Get_Scheduled_Item_Data($timeNow, -1, $prev, "24 hours"),
"current"=>Schedule::Get_Scheduled_Item_Data($timeNow, 0),
"next"=>Schedule::Get_Scheduled_Item_Data($timeNow, 1, $next, "48 hours"),
"previous"=>Schedule::GetScheduledItemData($timeNow, -1, $prev, "24 hours"),
"current"=>Schedule::GetScheduledItemData($timeNow, 0),
"next"=>Schedule::GetScheduledItemData($timeNow, 1, $next, "48 hours"),
"currentShow"=>Show_DAL::GetCurrentShow($timeNow),
"nextShow"=>Show_DAL::GetNextShow($timeNow),
"timezone"=> date("T"),
@ -501,7 +501,8 @@ class Schedule {
* want to search the database. For example "5 days", "18 hours", "60 minutes",
* "30 seconds" etc.
*/
public static function Get_Scheduled_Item_Data($timeStamp, $timePeriod=0, $count = 0, $interval="0 hours"){
public static function GetScheduledItemData($timeStamp, $timePeriod=0, $count = 0, $interval="0 hours")
{
global $CC_CONFIG, $CC_DBC;
$sql = "SELECT DISTINCT pt.name, ft.track_title, ft.artist_name, ft.album_title, st.starts, st.ends, st.clip_length, st.media_item_played, st.group_id, show.name as show_name, st.instance_id"
@ -531,7 +532,8 @@ class Schedule {
return $rows;
}
public static function GetShowInstanceItems($instance_id){
public static function GetShowInstanceItems($instance_id)
{
global $CC_CONFIG, $CC_DBC;
$sql = "SELECT DISTINCT pt.name, ft.track_title, ft.artist_name, ft.album_title, st.starts, st.ends, st.clip_length, st.media_item_played, st.group_id, show.name as show_name, st.instance_id"
@ -547,12 +549,15 @@ class Schedule {
return $rows;
}
public static function UpdateMediaPlayedStatus($id){
public static function UpdateMediaPlayedStatus($p_id)
{
global $CC_CONFIG, $CC_DBC;
$sql = "UPDATE ".$CC_CONFIG['scheduleTable']
." SET media_item_played=TRUE"
." WHERE id=$id";
return $CC_DBC->query($sql);
." WHERE id=$p_id";
$retVal = $CC_DBC->query($sql);
RabbitMq::PushSchedule();
return $retVal;
}
@ -563,7 +568,7 @@ class Schedule {
* @param string $p_time
* @return string
*/
private static function CcTimeToPypoTime($p_time)
private static function AirtimeTimeToPypoTime($p_time)
{
$p_time = substr($p_time, 0, 19);
$p_time = str_replace(" ", "-", $p_time);
@ -578,7 +583,7 @@ class Schedule {
* @param string $p_time
* @return string
*/
private static function PypoTimeToCcTime($p_time)
private static function PypoTimeToAirtimeTime($p_time)
{
$t = explode("-", $p_time);
return $t[0]."-".$t[1]."-".$t[2]." ".$t[3].":".$t[4].":00";
@ -658,17 +663,29 @@ class Schedule {
/**
* Export the schedule in json formatted for pypo (the liquidsoap scheduler)
*
* @param string $range
* In the format "YYYY-MM-DD HH:mm:ss"
* @param string $source
* In the format "YYYY-MM-DD HH:mm:ss"
* @param string $p_fromDateTime
* In the format "YYYY-MM-DD-HH-mm-SS"
* @param string $p_toDateTime
* In the format "YYYY-MM-DD-HH-mm-SS"
*/
public static function ExportRangeAsJson($p_fromDateTime, $p_toDateTime)
public static function ExportRangeAsJson($p_fromDateTime = null , $p_toDateTime = null)
{
global $CC_CONFIG, $CC_DBC;
$range_start = Schedule::PypoTimeToCcTime($p_fromDateTime);
$range_end = Schedule::PypoTimeToCcTime($p_toDateTime);
if (is_null($p_fromDateTime)) {
$t1 = new DateTime();
$t1->sub(new DateInterval("PT24H"));
$range_start = $t1->format("Y-m-d H:i:s");
} else {
$range_start = Schedule::PypoTimeToAirtimeTime($p_fromDateTime);
}
if (is_null($p_fromDateTime)) {
$t2 = new DateTime();
$t2->add(new DateInterval("PT24H"));
$range_end = $t2->format("Y-m-d H:i:s");
} else {
$range_end = Schedule::PypoTimeToAirtimeTime($p_toDateTime);
}
// Scheduler wants everything in a playlist
$data = Schedule::GetItems($range_start, $range_end, true);
@ -684,7 +701,7 @@ class Schedule {
$start = substr($start, 0, 19);
//Start time is the array key, needs to be in the format "YYYY-MM-DD-HH-mm-ss"
$pkey = Schedule::CcTimeToPypoTime($start);
$pkey = Schedule::AirtimeTimeToPypoTime($start);
$timestamp = strtotime($start);
$playlists[$pkey]['source'] = "PLAYLIST";
$playlists[$pkey]['x_ident'] = $dx["playlist_id"];
@ -696,8 +713,8 @@ class Schedule {
$playlists[$pkey]['show_name'] = $dx['show_name'];
$playlists[$pkey]['user_id'] = 0;
$playlists[$pkey]['id'] = $dx["playlist_id"];
$playlists[$pkey]['start'] = Schedule::CcTimeToPypoTime($dx["start"]);
$playlists[$pkey]['end'] = Schedule::CcTimeToPypoTime($dx["end"]);
$playlists[$pkey]['start'] = Schedule::AirtimeTimeToPypoTime($dx["start"]);
$playlists[$pkey]['end'] = Schedule::AirtimeTimeToPypoTime($dx["end"]);
}
}
@ -734,9 +751,12 @@ class Schedule {
$result = array();
$result['status'] = array('range' => array('start' => $range_start, 'end' => $range_end),
'version' => "1.1");
'version' => AIRTIME_REST_VERSION);
$result['playlists'] = $playlists;
$result['check'] = 1;
$result['stream_metadata'] = array();
$result['stream_metadata']['format'] = Application_Model_Preference::GetStreamLabelFormat();
$result['stream_metadata']['station_name'] = Application_Model_Preference::GetStationName();
return $result;
}
@ -757,6 +777,7 @@ class Schedule {
$scheduleGroup = new ScheduleGroup($item["group_id"]);
$scheduleGroup->remove();
}
RabbitMq::PushSchedule();
}
}

View File

@ -9,47 +9,57 @@ class Show {
$this->_showId = $showId;
}
public function getName() {
public function getName()
{
$show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbName();
}
public function setName($name) {
public function setName($name)
{
$show = CcShowQuery::create()->findPK($this->_showId);
$show->setDbName($name);
RabbitMq::PushSchedule();
}
public function getDescription() {
public function getDescription()
{
$show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbDescription();
}
public function setDescription($description) {
public function setDescription($description)
{
$show = CcShowQuery::create()->findPK($this->_showId);
$show->setDbDescription($description);
}
public function getColor() {
public function getColor()
{
$show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbColor();
}
public function setColor($color) {
public function setColor($color)
{
$show = CcShowQuery::create()->findPK($this->_showId);
$show->setDbColor($color);
}
public function getBackgroundColor() {
public function getBackgroundColor()
{
$show = CcShowQuery::create()->findPK($this->_showId);
return $show->getDbBackgroundColor();
}
public function setBackgroundColor($backgroundColor) {
public function setBackgroundColor($backgroundColor)
{
$show = CcShowQuery::create()->findPK($this->_showId);
$show->setDbBackgroundColor($backgroundColor);
}
public function cancelShow($day_timestamp) {
public function cancelShow($day_timestamp)
{
global $CC_DBC;
$timeinfo = explode(" ", $day_timestamp);
@ -62,11 +72,12 @@ class Show {
WHERE starts >= '{$day_timestamp}' AND show_id = {$this->_showId}";
$CC_DBC->query($sql);
RabbitMq::PushSchedule();
}
//end dates are non inclusive.
public static function addShow($data) {
public static function addShow($data)
{
$con = Propel::getConnection(CcShowPeer::DATABASE_NAME);
$sql = "SELECT time '{$data['add_show_start_time']}' + INTERVAL '{$data['add_show_duration']} hour' ";
@ -127,7 +138,6 @@ class Show {
//don't set day for monthly repeat type, it's invalid.
if($data['add_show_repeats'] && $data["add_show_repeat_type"] == 2) {
$showDay = new CcShowDays();
$showDay->setDbFirstShow($data['add_show_start_date']);
$showDay->setDbLastShow($endDate);
@ -137,15 +147,12 @@ class Show {
$showDay->setDbShowId($showId);
$showDay->setDbRecord($isRecorded);
$showDay->save();
}
else {
foreach ($data['add_show_day_check'] as $day) {
if($startDow !== $day){
if($startDow > $day)
if ($startDow > $day)
$daysAdd = 6 - $startDow + 1 + $day;
else
$daysAdd = $day - $startDow;
@ -159,7 +166,6 @@ class Show {
}
if(strtotime($start) < strtotime($endDate) || is_null($endDate)) {
$showDay = new CcShowDays();
$showDay->setDbFirstShow($start);
$showDay->setDbLastShow($endDate);
@ -180,7 +186,6 @@ class Show {
for($i=1; $i<=5; $i++) {
if($data['add_show_rebroadcast_date_'.$i]) {
$showRebroad = new CcShowRebroadcast();
$showRebroad->setDbDayOffset($data['add_show_rebroadcast_date_'.$i]);
$showRebroad->setDbStartTime($data['add_show_rebroadcast_time_'.$i]);
@ -194,7 +199,6 @@ class Show {
for($i=1; $i<=5; $i++) {
if($data['add_show_rebroadcast_absolute_date_'.$i]) {
$sql = "SELECT date '{$data['add_show_rebroadcast_absolute_date_'.$i]}' - date '{$data['add_show_start_date']}' ";
$r = $con->query($sql);
$offset_days = $r->fetchColumn(0);
@ -219,9 +223,11 @@ class Show {
}
Show::populateShowUntilLastGeneratedDate($showId);
RabbitMq::PushSchedule();
}
public static function getShows($start_timestamp, $end_timestamp, $excludeInstance=NULL, $onlyRecord=FALSE) {
public static function getShows($start_timestamp, $end_timestamp, $excludeInstance=NULL, $onlyRecord=FALSE)
{
global $CC_DBC;
$sql = "SELECT starts, ends, record, rebroadcast, instance_id, show_id, name, description,
@ -230,7 +236,7 @@ class Show {
LEFT JOIN cc_show ON cc_show.id = cc_show_instances.show_id";
//only want shows that are starting at the time or later.
if($onlyRecord) {
if ($onlyRecord) {
$sql = $sql." WHERE (starts >= '{$start_timestamp}' AND starts < timestamp '{$start_timestamp}' + interval '2 hours')";
$sql = $sql." AND (record = 1)";
@ -243,7 +249,7 @@ class Show {
}
if(isset($excludeInstance)) {
if (isset($excludeInstance)) {
foreach($excludeInstance as $instance) {
$sql_exclude[] = "cc_show_instances.id != {$instance}";
}
@ -257,8 +263,8 @@ class Show {
return $CC_DBC->GetAll($sql);
}
private static function setNextPop($next_date, $show_id, $day) {
private static function setNextPop($next_date, $show_id, $day)
{
$nextInfo = explode(" ", $next_date);
$repeatInfo = CcShowDaysQuery::create()
@ -271,7 +277,8 @@ class Show {
}
//for a show with repeat_type == -1
private static function populateNonRepeatingShow($show_id, $first_show, $start_time, $duration, $day, $record, $end_timestamp) {
private static function populateNonRepeatingShow($show_id, $first_show, $start_time, $duration, $day, $record, $end_timestamp)
{
global $CC_DBC;
$next_date = $first_show." ".$start_time;
@ -315,6 +322,7 @@ class Show {
$newRebroadcastInstance->save();
}
}
RabbitMq::PushSchedule();
}
//for a show with repeat_type == 0,1,2
@ -373,6 +381,7 @@ class Show {
}
Show::setNextPop($next_date, $show_id, $day);
RabbitMq::PushSchedule();
}
private static function populateShow($repeat_type, $show_id, $next_pop_date,
@ -503,53 +512,65 @@ class ShowInstance {
$this->_instanceId = $instanceId;
}
public function getShowId() {
public function getShowId()
{
$showInstance = CcShowInstancesQuery::create()->findPK($this->_instanceId);
return $showInstance->getDbShowId();
}
public function getShowInstanceId() {
public function getShowInstanceId()
{
return $this->_instanceId;
}
public function isRebroadcast() {
public function isRebroadcast()
{
$showInstance = CcShowInstancesQuery::create()->findPK($this->_instanceId);
return $showInstance->getDbOriginalShow();
}
public function isRecorded() {
public function isRecorded()
{
$showInstance = CcShowInstancesQuery::create()->findPK($this->_instanceId);
return $showInstance->getDbRecord();
}
public function getName() {
public function getName()
{
$show = CcShowQuery::create()->findPK($this->getShowId());
return $show->getDbName();
}
public function getShowStart() {
public function getShowStart()
{
$showInstance = CcShowInstancesQuery::create()->findPK($this->_instanceId);
return $showInstance->getDbStarts();
}
public function getShowEnd() {
public function getShowEnd()
{
$showInstance = CcShowInstancesQuery::create()->findPK($this->_instanceId);
return $showInstance->getDbEnds();
}
public function setShowStart($start) {
public function setShowStart($start)
{
$showInstance = CcShowInstancesQuery::create()->findPK($this->_instanceId);
$showInstance->setDbStarts($start)
->save();
RabbitMq::PushSchedule();
}
public function setShowEnd($end) {
public function setShowEnd($end)
{
$showInstance = CcShowInstancesQuery::create()->findPK($this->_instanceId);
$showInstance->setDbEnds($end)
->save();
RabbitMq::PushSchedule();
}
public function moveScheduledShowContent($deltaDay, $deltaHours, $deltaMin) {
public function moveScheduledShowContent($deltaDay, $deltaHours, $deltaMin)
{
global $CC_DBC;
$sql = "UPDATE cc_schedule
@ -558,9 +579,11 @@ class ShowInstance {
WHERE instance_id = '{$this->_instanceId}'";
$CC_DBC->query($sql);
RabbitMq::PushSchedule();
}
public function moveShow($deltaDay, $deltaMin){
public function moveShow($deltaDay, $deltaMin)
{
global $CC_DBC;
$hours = $deltaMin/60;
@ -604,9 +627,11 @@ class ShowInstance {
$this->moveScheduledShowContent($deltaDay, $hours, $mins);
$this->setShowStart($new_starts);
$this->setShowEnd($new_ends);
RabbitMq::PushSchedule();
}
public function resizeShow($deltaDay, $deltaMin){
public function resizeShow($deltaDay, $deltaMin)
{
global $CC_DBC;
$hours = $deltaMin/60;
@ -641,19 +666,19 @@ class ShowInstance {
}
$this->setShowEnd($new_ends);
RabbitMq::PushSchedule();
}
private function getLastGroupId() {
private function getLastGroupId()
{
global $CC_DBC;
$sql = "SELECT group_id FROM cc_schedule WHERE instance_id = '{$this->_instanceId}' ORDER BY ends DESC LIMIT 1";
$res = $CC_DBC->GetOne($sql);
return $res;
}
public function addPlaylistToShow($plId) {
public function addPlaylistToShow($plId)
{
$sched = new ScheduleGroup();
$lastGroupId = $this->getLastGroupId();
@ -664,16 +689,19 @@ class ShowInstance {
else {
$groupId = $sched->addPlaylistAfter($this->_instanceId, $lastGroupId, $plId);
}
RabbitMq::PushSchedule();
}
public function scheduleShow($plIds) {
public function scheduleShow($plIds)
{
foreach($plIds as $plId) {
$this->addPlaylistToShow($plId);
}
RabbitMq::PushSchedule();
}
public function removeGroupFromShow($group_id){
public function removeGroupFromShow($group_id)
{
global $CC_DBC;
$sql = "SELECT MAX(ends) as end_timestamp, (MAX(ends) - MIN(starts)) as length
@ -691,51 +719,51 @@ class ShowInstance {
WHERE starts >= '{$groupBoundry["end_timestamp"]}' AND instance_id = {$this->_instanceId}";
$CC_DBC->query($sql);
RabbitMq::PushSchedule();
}
public function clearShow() {
public function clearShow()
{
CcScheduleQuery::create()
->filterByDbInstanceId($this->_instanceId)
->delete();
RabbitMq::PushSchedule();
}
public function deleteShow() {
public function deleteShow()
{
CcShowInstancesQuery::create()
->findPK($this->_instanceId)
->delete();
RabbitMq::PushSchedule();
}
public function getTimeScheduled() {
public function getTimeScheduled()
{
$instance_id = $this->getShowInstanceId();
$time = Schedule::GetTotalShowTime($instance_id);
return $time;
}
public function getTimeUnScheduled() {
public function getTimeUnScheduled()
{
$start_timestamp = $this->getShowStart();
$end_timestamp = $this->getShowEnd();
$instance_id = $this->getShowInstanceId();
$time = Schedule::getTimeUnScheduledInRange($instance_id, $start_timestamp, $end_timestamp);
return $time;
}
public function getPercentScheduled() {
public function getPercentScheduled()
{
$start_timestamp = $this->getShowStart();
$end_timestamp = $this->getShowEnd();
$instance_id = $this->getShowInstanceId();
return Schedule::GetPercentScheduled($instance_id, $start_timestamp, $end_timestamp);
}
public function getShowLength() {
public function getShowLength()
{
global $CC_DBC;
$start_timestamp = $this->getShowStart();
@ -747,14 +775,14 @@ class ShowInstance {
return $length;
}
public function searchPlaylistsForShow($datatables){
public function searchPlaylistsForShow($datatables)
{
$time_remaining = $this->getTimeUnScheduled();
return StoredFile::searchPlaylistsForSchedule($time_remaining, $datatables);
}
public function getShowListContent() {
public function getShowListContent()
{
global $CC_DBC;
$sql = "SELECT *
@ -766,7 +794,8 @@ class ShowInstance {
return $CC_DBC->GetAll($sql);
}
public function getShowContent() {
public function getShowContent()
{
global $CC_DBC;
$res = $this->getShowListContent();
@ -807,9 +836,10 @@ class ShowInstance {
}
/* Show Data Access Layer */
class Show_DAL{
class Show_DAL {
public static function GetCurrentShow($timeNow) {
public static function GetCurrentShow($timeNow)
{
global $CC_CONFIG, $CC_DBC;
$timestamp = explode(" ", $timeNow);
@ -826,7 +856,8 @@ class Show_DAL{
return $rows;
}
public static function GetNextShow($timeNow) {
public static function GetNextShow($timeNow)
{
global $CC_CONFIG, $CC_DBC;
$sql = "SELECT *, si.starts as start_timestamp, si.ends as end_timestamp FROM "
@ -841,7 +872,8 @@ class Show_DAL{
return $rows;
}
public static function GetShowsInRange($timeNow, $start, $end){
public static function GetShowsInRange($timeNow, $start, $end)
{
global $CC_CONFIG, $CC_DBC;
$sql = "SELECT"
." si.starts as show_starts,"

View File

@ -1,9 +0,0 @@
import airtime_api_client
import obp_api_client
def create_api_client(config):
if config["api_client"] == "airtime":
return campcaster_api_client.AirtimeApiClient(config)
elif config["api_client"] == "obp":
return obp_api_client.ObpApiClient(config)