Merge branch 'master' of dev.sourcefabric.org:campcaster
This commit is contained in:
commit
e57b18168a
8 changed files with 64 additions and 37 deletions
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once (__DIR__."/configs/navigation.php");
|
require_once __DIR__."/configs/navigation.php";
|
||||||
require_once (__DIR__."/configs/ACL.php");
|
require_once __DIR__."/configs/ACL.php";
|
||||||
|
|
||||||
require_once 'propel/runtime/lib/Propel.php';
|
require_once 'propel/runtime/lib/Propel.php';
|
||||||
Propel::init(__DIR__."/configs/airtime-conf.php");
|
Propel::init(__DIR__."/configs/airtime-conf.php");
|
||||||
|
@ -10,8 +10,8 @@ Propel::init(__DIR__."/configs/airtime-conf.php");
|
||||||
$tz = ini_get('date.timezone') ? ini_get('date.timezone') : 'UTC';
|
$tz = ini_get('date.timezone') ? ini_get('date.timezone') : 'UTC';
|
||||||
date_default_timezone_set($tz);
|
date_default_timezone_set($tz);
|
||||||
|
|
||||||
require_once (__DIR__."/configs/constants.php");
|
require_once __DIR__."/configs/constants.php";
|
||||||
require_once (__DIR__."/configs/conf.php");
|
require_once __DIR__."/configs/conf.php";
|
||||||
require_once 'DB.php';
|
require_once 'DB.php';
|
||||||
|
|
||||||
require_once 'Soundcloud.php';
|
require_once 'Soundcloud.php';
|
||||||
|
@ -21,7 +21,7 @@ require_once 'Schedule.php';
|
||||||
require_once 'Shows.php';
|
require_once 'Shows.php';
|
||||||
require_once 'Users.php';
|
require_once 'Users.php';
|
||||||
require_once 'RabbitMq.php';
|
require_once 'RabbitMq.php';
|
||||||
|
require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php';
|
||||||
|
|
||||||
global $CC_CONFIG, $CC_DBC;
|
global $CC_CONFIG, $CC_DBC;
|
||||||
$dsn = $CC_CONFIG['dsn'];
|
$dsn = $CC_CONFIG['dsn'];
|
||||||
|
@ -36,6 +36,9 @@ $CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC);
|
||||||
//Zend_Session::start();
|
//Zend_Session::start();
|
||||||
Zend_Validate::setDefaultNamespaces("Zend");
|
Zend_Validate::setDefaultNamespaces("Zend");
|
||||||
|
|
||||||
|
$front = Zend_Controller_Front::getInstance();
|
||||||
|
$front->registerPlugin(new RabbitMqPlugin());
|
||||||
|
|
||||||
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
|
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
|
||||||
{
|
{
|
||||||
protected function _initDoctype()
|
protected function _initDoctype()
|
||||||
|
@ -48,9 +51,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
|
||||||
protected function _initHeadLink()
|
protected function _initHeadLink()
|
||||||
{
|
{
|
||||||
$view = $this->getResource('view');
|
$view = $this->getResource('view');
|
||||||
|
|
||||||
$view->headLink()->appendStylesheet('/css/redmond/jquery-ui-1.8.8.custom.css');
|
$view->headLink()->appendStylesheet('/css/redmond/jquery-ui-1.8.8.custom.css');
|
||||||
|
|
||||||
$this->view->headLink()->appendStylesheet('/css/pro_dropdown_3.css');
|
$this->view->headLink()->appendStylesheet('/css/pro_dropdown_3.css');
|
||||||
$this->view->headLink()->appendStylesheet('/css/styles.css');
|
$this->view->headLink()->appendStylesheet('/css/styles.css');
|
||||||
}
|
}
|
||||||
|
@ -70,14 +71,17 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
|
||||||
$view->headScript()->appendFile('/js/airtime/common/common.js','text/javascript');
|
$view->headScript()->appendFile('/js/airtime/common/common.js','text/javascript');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _initViewHelpers(){
|
protected function _initViewHelpers()
|
||||||
|
{
|
||||||
$view = $this->getResource('view');
|
$view = $this->getResource('view');
|
||||||
$view->addHelperPath('../application/views/helpers', 'Airtime_View_Helper');
|
$view->addHelperPath('../application/views/helpers', 'Airtime_View_Helper');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _initTitle(){
|
protected function _initTitle()
|
||||||
|
{
|
||||||
$view = $this->getResource('view');
|
$view = $this->getResource('view');
|
||||||
$view->headTitle(Application_Model_Preference::GetHeadTitle());
|
$view->headTitle(Application_Model_Preference::GetHeadTitle());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
9
application/controllers/plugins/RabbitMqPlugin.php
Normal file
9
application/controllers/plugins/RabbitMqPlugin.php
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class RabbitMqPlugin extends Zend_Controller_Plugin_Abstract
|
||||||
|
{
|
||||||
|
public function dispatchLoopShutdown()
|
||||||
|
{
|
||||||
|
RabbitMq::PushScheduleFinal();
|
||||||
|
}
|
||||||
|
}
|
|
@ -68,12 +68,13 @@ class Application_Form_AddUser extends Zend_Form
|
||||||
$this->addElement($jabber);
|
$this->addElement($jabber);
|
||||||
|
|
||||||
$select = new Zend_Form_Element_Select('type');
|
$select = new Zend_Form_Element_Select('type');
|
||||||
|
$select->setLabel('User Type:');
|
||||||
$select->setAttrib('class', 'input_select');
|
$select->setAttrib('class', 'input_select');
|
||||||
$select->setAttrib('style', 'width: 40%');
|
$select->setAttrib('style', 'width: 40%');
|
||||||
$select->setMultiOptions(array(
|
$select->setMultiOptions(array(
|
||||||
"A" => "admin",
|
|
||||||
"H" => "host",
|
|
||||||
"G" => "guest",
|
"G" => "guest",
|
||||||
|
"H" => "host",
|
||||||
|
"A" => "admin"
|
||||||
));
|
));
|
||||||
$select->setRequired(true);
|
$select->setRequired(true);
|
||||||
$this->addElement($select);
|
$this->addElement($select);
|
||||||
|
|
|
@ -3,30 +3,41 @@ require_once 'php-amqplib/amqp.inc';
|
||||||
|
|
||||||
class RabbitMq
|
class RabbitMq
|
||||||
{
|
{
|
||||||
|
static private $doPush = FALSE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a flag to push the schedule at the end of the request.
|
||||||
|
*/
|
||||||
|
public static function PushSchedule() {
|
||||||
|
RabbitMq::$doPush = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Push the current schedule to RabbitMQ, to be picked up by Pypo.
|
* 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
|
* Will push the schedule in the range from 24 hours ago to 24 hours
|
||||||
* in the future.
|
* in the future.
|
||||||
*/
|
*/
|
||||||
public static function PushSchedule() {
|
public static function PushScheduleFinal()
|
||||||
|
{
|
||||||
global $CC_CONFIG;
|
global $CC_CONFIG;
|
||||||
$conn = new AMQPConnection($CC_CONFIG["rabbitmq"]["host"],
|
if (RabbitMq::$doPush) {
|
||||||
$CC_CONFIG["rabbitmq"]["port"],
|
$conn = new AMQPConnection($CC_CONFIG["rabbitmq"]["host"],
|
||||||
$CC_CONFIG["rabbitmq"]["user"],
|
$CC_CONFIG["rabbitmq"]["port"],
|
||||||
$CC_CONFIG["rabbitmq"]["password"]);
|
$CC_CONFIG["rabbitmq"]["user"],
|
||||||
$channel = $conn->channel();
|
$CC_CONFIG["rabbitmq"]["password"]);
|
||||||
$channel->access_request($CC_CONFIG["rabbitmq"]["vhost"], false, false, true, true);
|
$channel = $conn->channel();
|
||||||
|
$channel->access_request($CC_CONFIG["rabbitmq"]["vhost"], false, false, true, true);
|
||||||
|
|
||||||
$EXCHANGE = 'airtime-schedule';
|
$EXCHANGE = 'airtime-schedule';
|
||||||
$channel->exchange_declare($EXCHANGE, 'direct', false, true);
|
$channel->exchange_declare($EXCHANGE, 'direct', false, true);
|
||||||
|
|
||||||
$data = json_encode(Schedule::ExportRangeAsJson());
|
$data = json_encode(Schedule::ExportRangeAsJson());
|
||||||
$msg = new AMQPMessage($data, array('content_type' => 'text/plain'));
|
$msg = new AMQPMessage($data, array('content_type' => 'text/plain'));
|
||||||
|
|
||||||
$channel->basic_publish($msg, $EXCHANGE);
|
$channel->basic_publish($msg, $EXCHANGE);
|
||||||
$channel->close();
|
$channel->close();
|
||||||
$conn->close();
|
$conn->close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -716,7 +716,7 @@ class Schedule {
|
||||||
$result['stream_metadata'] = array();
|
$result['stream_metadata'] = array();
|
||||||
$result['stream_metadata']['format'] = Application_Model_Preference::GetStreamLabelFormat();
|
$result['stream_metadata']['format'] = Application_Model_Preference::GetStreamLabelFormat();
|
||||||
$result['stream_metadata']['station_name'] = Application_Model_Preference::GetStationName();
|
$result['stream_metadata']['station_name'] = Application_Model_Preference::GetStationName();
|
||||||
$result['server_timezone'] = date_default_timezone_get();
|
$result['server_timezone'] = date('O');
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,6 @@
|
||||||
<div id="jquery_jplayer_1" class="jp-jplayer" style="width:0px; height:0px;"></div>
|
<div id="jquery_jplayer_1" class="jp-jplayer" style="width:0px; height:0px;"></div>
|
||||||
|
|
||||||
<div id="about-txt" style="display: none;">
|
<div id="about-txt" style="display: none;">
|
||||||
<a href="http://airtime.sourcefabric.org">Airtime</a>, the open radio software for scheduling and remote station management.<br>
|
<a href="http://airtime.sourcefabric.org">Airtime</a> 1.7, the open radio software for scheduling and remote station management.<br>
|
||||||
© 2011 <a href="http://www.sourcefabric.org">Sourcefabric</a> o.p.s 2011. Airtime is distributed under the <a href="http://www.gnu.org/licenses/gpl-3.0-standalone.html">GNU GPL v.3</a>
|
© 2011 <a href="http://www.sourcefabric.org">Sourcefabric</a> o.p.s 2011. Airtime is distributed under the <a href="http://www.gnu.org/licenses/gpl-3.0-standalone.html">GNU GPL v.3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -38,16 +38,16 @@ try:
|
||||||
remove_path(BASE_PATH)
|
remove_path(BASE_PATH)
|
||||||
|
|
||||||
print "Removing daemontool script pypo"
|
print "Removing daemontool script pypo"
|
||||||
remove_path("rm -rf /etc/service/pypo")
|
remove_path("/etc/service/pypo")
|
||||||
|
|
||||||
if os.path.exists("/etc/service/pypo-fetch"):
|
if os.path.exists("/etc/service/pypo-fetch"):
|
||||||
remove_path("rm -rf /etc/service/pypo-fetch")
|
remove_path("/etc/service/pypo-fetch")
|
||||||
|
|
||||||
if os.path.exists("/etc/service/pypo-push"):
|
if os.path.exists("/etc/service/pypo-push"):
|
||||||
remove_path("rm -rf /etc/service/pypo-push")
|
remove_path("/etc/service/pypo-push")
|
||||||
|
|
||||||
print "Removing daemontool script pypo-liquidsoap"
|
print "Removing daemontool script pypo-liquidsoap"
|
||||||
remove_path("rm -rf /etc/service/pypo-liquidsoap")
|
remove_path("/etc/service/pypo-liquidsoap")
|
||||||
|
|
||||||
remove_user("pypo")
|
remove_user("pypo")
|
||||||
print "Uninstall complete."
|
print "Uninstall complete."
|
||||||
|
|
|
@ -11,6 +11,7 @@ import json
|
||||||
import telnetlib
|
import telnetlib
|
||||||
import math
|
import math
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
from subprocess import Popen, PIPE
|
||||||
|
|
||||||
# For RabbitMQ
|
# For RabbitMQ
|
||||||
from kombu.connection import BrokerConnection
|
from kombu.connection import BrokerConnection
|
||||||
|
@ -78,13 +79,14 @@ class PypoFetch(Thread):
|
||||||
|
|
||||||
def check_matching_timezones(self, server_timezone):
|
def check_matching_timezones(self, server_timezone):
|
||||||
logger = logging.getLogger('fetch')
|
logger = logging.getLogger('fetch')
|
||||||
f = open('/etc/timezone', 'r')
|
|
||||||
pypo_timezone = f.readline().strip(' \t\n\r')
|
process = Popen(["date", "+%z"], stdout=PIPE)
|
||||||
f.close()
|
pypo_timezone = (process.communicate()[0]).strip(' \r\n\t')
|
||||||
|
|
||||||
if server_timezone != pypo_timezone:
|
if server_timezone != pypo_timezone:
|
||||||
logger.error("Server and pypo timezones do not match. Audio playback may not start when expected!")
|
logger.error("Server and pypo timezone offsets do not match. Audio playback may not start when expected!")
|
||||||
logger.error("Server timezone: %s", server_timezone)
|
logger.error("Server timezone offset: %s", server_timezone)
|
||||||
logger.error("Pypo timezone: %s", pypo_timezone)
|
logger.error("Pypo timezone offset: %s", pypo_timezone)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Process the schedule
|
Process the schedule
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue