Merge branch '2.3.x' into devel
This commit is contained in:
commit
542553bbc1
airtime_mvc
application/controllers
locale/el_GR/LC_MESSAGES
public/js
airtime
dashboard
library
preferences
schedule
showbuilder
status
datatables
install_full/ubuntu
python_apps
|
@ -42,8 +42,9 @@ class ApiController extends Zend_Controller_Action
|
|||
->addActionContext('reload-metadata-group' , 'json')
|
||||
->addActionContext('notify-webstream-data' , 'json')
|
||||
->addActionContext('get-stream-parameters' , 'json')
|
||||
->addActionContext('push-stream-stats' , 'json')
|
||||
->addActionContext('update-stream-setting-table' , 'json')
|
||||
->addActionContext('push-stream-stats' , 'json')
|
||||
->addActionContext('update-stream-setting-table' , 'json')
|
||||
->addActionContext('update-replay-gain-value' , 'json')
|
||||
->initContext();
|
||||
}
|
||||
|
||||
|
@ -947,10 +948,6 @@ class ApiController extends Zend_Controller_Action
|
|||
|
||||
public function updateReplayGainValueAction()
|
||||
{
|
||||
// disable layout
|
||||
$this->view->layout()->disableLayout();
|
||||
$this->_helper->viewRenderer->setNoRender(true);
|
||||
|
||||
$request = $this->getRequest();
|
||||
$data = json_decode($request->getParam('data'));
|
||||
|
||||
|
@ -961,6 +958,8 @@ class ApiController extends Zend_Controller_Action
|
|||
$file->setDbReplayGain($gain);
|
||||
$file->save();
|
||||
}
|
||||
|
||||
$this->view->msg = "OK";
|
||||
}
|
||||
|
||||
public function updateCueValuesBySilanAction()
|
||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgstr ""
|
|||
"Project-Id-Version: Airtime 2.3\n"
|
||||
"Report-Msgid-Bugs-To: <contact@sourcefabric.org>\n"
|
||||
"POT-Creation-Date: 2013-02-07 16:22-0500\n"
|
||||
"PO-Revision-Date: 2013-02-08 11:13+0100\n"
|
||||
"PO-Revision-Date: 2013-02-14 17:18+0100\n"
|
||||
"Last-Translator: Daniel James <daniel.james@sourcefabric.org>\n"
|
||||
"Language-Team: Greek Localization <contact@sourcefabric.org>\n"
|
||||
"Language: el_GR\n"
|
||||
|
@ -2867,7 +2867,7 @@ msgstr "Εμφάνιση Πηγής "
|
|||
|
||||
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:45
|
||||
msgid "Scheduled Play"
|
||||
msgstr "Προγραμματισμένη Αναπαραγωγή"
|
||||
msgstr "Πρόγραμμα"
|
||||
|
||||
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:54
|
||||
msgid "ON AIR"
|
||||
|
|
|
@ -360,13 +360,15 @@ function controlSwitchLight(){
|
|||
}
|
||||
|
||||
function getScheduleFromServer(){
|
||||
$.ajax({ url: baseUrl+"Schedule/get-current-playlist/format/json", dataType:"json", success:function(data){
|
||||
$.ajax({ url: baseUrl+"Schedule/get-current-playlist/format/json",
|
||||
dataType:"json",
|
||||
success:function(data){
|
||||
parseItems(data.entries);
|
||||
parseSourceStatus(data.source_status);
|
||||
parseSwitchStatus(data.switch_status);
|
||||
showName = data.show_name;
|
||||
setTimeout(getScheduleFromServer, serverUpdateInterval);
|
||||
}, error:function(jqXHR, textStatus, errorThrown){}});
|
||||
setTimeout(getScheduleFromServer, serverUpdateInterval);
|
||||
}
|
||||
|
||||
function setupQtip(){
|
||||
|
|
|
@ -511,9 +511,11 @@ var AIRTIME = (function(AIRTIME) {
|
|||
},
|
||||
"fnStateLoad": function fnLibStateLoad(oSettings) {
|
||||
var settings = localStorage.getItem('datatables-library');
|
||||
|
||||
if (settings !== "") {
|
||||
|
||||
try {
|
||||
return JSON.parse(settings);
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
"fnStateLoadParams": function (oSettings, oData) {
|
||||
|
@ -521,18 +523,22 @@ var AIRTIME = (function(AIRTIME) {
|
|||
length,
|
||||
a = oData.abVisCols;
|
||||
|
||||
// putting serialized data back into the correct js type to make
|
||||
// sure everything works properly.
|
||||
for (i = 0, length = a.length; i < length; i++) {
|
||||
if (typeof(a[i]) === "string") {
|
||||
a[i] = (a[i] === "true") ? true : false;
|
||||
}
|
||||
if (a) {
|
||||
// putting serialized data back into the correct js type to make
|
||||
// sure everything works properly.
|
||||
for (i = 0, length = a.length; i < length; i++) {
|
||||
if (typeof(a[i]) === "string") {
|
||||
a[i] = (a[i] === "true") ? true : false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
a = oData.ColReorder;
|
||||
for (i = 0, length = a.length; i < length; i++) {
|
||||
if (typeof(a[i]) === "string") {
|
||||
a[i] = parseInt(a[i], 10);
|
||||
if (a) {
|
||||
for (i = 0, length = a.length; i < length; i++) {
|
||||
if (typeof(a[i]) === "string") {
|
||||
a[i] = parseInt(a[i], 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -842,8 +848,7 @@ var AIRTIME = (function(AIRTIME) {
|
|||
});
|
||||
|
||||
checkImportStatus();
|
||||
setInterval(checkImportStatus, 5000);
|
||||
setInterval(checkLibrarySCUploadStatus, 5000);
|
||||
checkLibrarySCUploadStatus();
|
||||
|
||||
addQtipToSCIcons();
|
||||
|
||||
|
@ -1071,6 +1076,7 @@ function checkImportStatus() {
|
|||
}
|
||||
div.hide();
|
||||
}
|
||||
setTimeout(checkImportStatus, 5000);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1104,6 +1110,7 @@ function checkLibrarySCUploadStatus(){
|
|||
else if (json.sc_id == "-3") {
|
||||
span.removeClass("progress").addClass("sc-error");
|
||||
}
|
||||
setTimeout(checkLibrarySCUploadStatus, 5000);
|
||||
}
|
||||
|
||||
function checkSCUploadStatusRequest() {
|
||||
|
|
|
@ -102,6 +102,8 @@ function checkLiquidsoapStatus(){
|
|||
}
|
||||
$("#s"+id+"Liquidsoap-error-msg-element").html(html);
|
||||
}
|
||||
|
||||
setTimeout(checkLiquidsoapStatus, 2000);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -241,10 +243,10 @@ function setupEventListeners() {
|
|||
return false;
|
||||
})
|
||||
|
||||
setLiveSourceConnectionOverrideListener()
|
||||
setLiveSourceConnectionOverrideListener();
|
||||
|
||||
showErrorSections()
|
||||
setInterval('checkLiquidsoapStatus()', 1000)
|
||||
showErrorSections();
|
||||
checkLiquidsoapStatus();
|
||||
|
||||
// qtip for help text
|
||||
$(".override_help_icon").qtip({
|
||||
|
|
|
@ -406,10 +406,9 @@ function setAddShowEvents() {
|
|||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
|
||||
$("#schedule_calendar").removeAttr("style")
|
||||
.fullCalendar('render');
|
||||
|
||||
$("#add-show-form").hide();
|
||||
windowResize();
|
||||
|
||||
$.get(baseUrl+"Schedule/get-form", {format:"json"}, function(json){
|
||||
$("#add-show-form")
|
||||
.empty()
|
||||
|
@ -652,13 +651,14 @@ function windowResize() {
|
|||
var calendarWidth = 100-(($("#schedule-add-show").width() + (16 * 4))/windowWidth*100);
|
||||
var widthPercent = parseInt(calendarWidth)+"%";
|
||||
$("#schedule_calendar").css("width", widthPercent);
|
||||
} else {
|
||||
$("#schedule_calendar").css("width", 98.5+"%");
|
||||
}
|
||||
|
||||
// 200 px for top dashboard and 50 for padding on main content
|
||||
// this calculation was copied from schedule.js line 326
|
||||
var mainHeight = document.documentElement.clientHeight - 200 - 50;
|
||||
$('#schedule_calendar').fullCalendar('option', 'contentHeight', mainHeight)
|
||||
$("#schedule_calendar").fullCalendar('render');
|
||||
$('#schedule_calendar').fullCalendar('option', 'contentHeight', mainHeight);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,11 @@ function openAddShowForm() {
|
|||
var calendarWidth = 100-(($("#schedule-add-show").width() + (16 * 4))/windowWidth*100);
|
||||
var widthPercent = parseInt(calendarWidth)+"%";
|
||||
$("#schedule_calendar").css("width", widthPercent);
|
||||
$("#schedule_calendar").fullCalendar('render');
|
||||
|
||||
// 200 px for top dashboard and 50 for padding on main content
|
||||
// this calculation was copied from schedule.js line 326
|
||||
var mainHeight = document.documentElement.clientHeight - 200 - 50;
|
||||
$('#schedule_calendar').fullCalendar('option', 'contentHeight', mainHeight);
|
||||
}
|
||||
$("#schedule-show-what").show(0, function(){
|
||||
$add_show_name = $("#add_show_name");
|
||||
|
@ -372,6 +376,7 @@ function checkSCUploadStatus(){
|
|||
}else if(json.sc_id == "-3"){
|
||||
$("span[id="+id+"]:not(.recording)").removeClass("progress").addClass("sc-error");
|
||||
}
|
||||
setTimeout(checkSCUploadStatus, 5000);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -424,6 +429,7 @@ function getCurrentShow(){
|
|||
$(this).remove("span[small-icon now-playing]");
|
||||
}
|
||||
});
|
||||
setTimeout(getCurrentShow, 5000);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -564,8 +570,8 @@ function alertShowErrorAndReload(){
|
|||
|
||||
preloadEventFeed();
|
||||
$(document).ready(function(){
|
||||
setInterval( "checkSCUploadStatus()", 5000 );
|
||||
setInterval( "getCurrentShow()", 5000 );
|
||||
checkSCUploadStatus();
|
||||
getCurrentShow();
|
||||
});
|
||||
|
||||
var view_name;
|
||||
|
|
|
@ -93,6 +93,8 @@ function checkCalendarSCUploadStatus(){
|
|||
else if (json.sc_id == "-3") {
|
||||
span.removeClass("progress").addClass("sc-error");
|
||||
}
|
||||
|
||||
setTimeout(checkCalendarSCUploadStatus, 5000);
|
||||
}
|
||||
|
||||
function checkSCUploadStatusRequest() {
|
||||
|
@ -328,7 +330,7 @@ function alertShowErrorAndReload(){
|
|||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
setInterval(checkCalendarSCUploadStatus, 5000);
|
||||
checkCalendarSCUploadStatus();
|
||||
|
||||
$.contextMenu({
|
||||
selector: 'div.fc-event',
|
||||
|
|
|
@ -86,7 +86,7 @@ AIRTIME = (function(AIRTIME) {
|
|||
.end();
|
||||
|
||||
oTable = $('#show_builder_table').dataTable();
|
||||
oTable.fnDraw();
|
||||
//oTable.fnDraw();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -277,12 +277,13 @@ AIRTIME = (function(AIRTIME) {
|
|||
if (json.update === true) {
|
||||
oTable.fnDraw();
|
||||
}
|
||||
setTimeout(checkScheduleUpdates, 5000);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//check if the timeline view needs updating.
|
||||
setInterval(checkScheduleUpdates, 5 * 1000); //need refresh in milliseconds
|
||||
checkScheduleUpdates();
|
||||
};
|
||||
|
||||
mod.onResize = function() {
|
||||
|
|
|
@ -66,6 +66,7 @@ function success(data, textStatus, jqXHR){
|
|||
if (data.status.partitions){
|
||||
generatePartitions(data.status.partitions);
|
||||
}
|
||||
setTimeout(function(){updateStatus(false);}, 5000);
|
||||
}
|
||||
|
||||
function updateStatus(getDiskInfo){
|
||||
|
@ -75,5 +76,4 @@ function updateStatus(getDiskInfo){
|
|||
|
||||
$(document).ready(function() {
|
||||
updateStatus(true);
|
||||
setInterval(function(){updateStatus(false);}, 5000);
|
||||
});
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,8 +1,8 @@
|
|||
/*
|
||||
* File: ColReorder.js
|
||||
* Version: 1.0.5
|
||||
* Version: 1.0.8
|
||||
* CVS: $Id$
|
||||
* Description: Controls for column visiblity in DataTables
|
||||
* Description: Allow columns to be reordered in a DataTable
|
||||
* Author: Allan Jardine (www.sprymedia.co.uk)
|
||||
* Created: Wed Sep 15 18:23:29 BST 2010
|
||||
* Modified: $Date$ by $Author$
|
||||
|
@ -174,10 +174,10 @@ $.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo )
|
|||
for ( i=0, iLen=iCols ; i<iLen ; i++ )
|
||||
{
|
||||
oCol = oSettings.aoColumns[i];
|
||||
if ( typeof oCol.mDataProp == 'number' ) {
|
||||
oCol.mDataProp = aiInvertMapping[ oCol.mDataProp ];
|
||||
oCol.fnGetData = oSettings.oApi._fnGetObjectDataFn( oCol.mDataProp );
|
||||
oCol.fnSetData = oSettings.oApi._fnSetObjectDataFn( oCol.mDataProp );
|
||||
if ( typeof oCol.mData == 'number' ) {
|
||||
oCol.mData = aiInvertMapping[ oCol.mData ];
|
||||
oCol.fnGetData = oSettings.oApi._fnGetObjectDataFn( oCol.mData );
|
||||
oCol.fnSetData = oSettings.oApi._fnSetObjectDataFn( oCol.mData );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -274,13 +274,12 @@ $.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo )
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Any extra operations for the other plug-ins
|
||||
*/
|
||||
if ( typeof ColVis != 'undefined' )
|
||||
{
|
||||
ColVis.fnRebuild( oSettings.oInstance );
|
||||
}
|
||||
/* Fire an event so other plug-ins can update */
|
||||
$(oSettings.oInstance).trigger( 'column-reorder', [ oSettings, {
|
||||
"iFrom": iFrom,
|
||||
"iTo": iTo,
|
||||
"aiInvertMapping": aiInvertMapping
|
||||
} ] );
|
||||
|
||||
if ( typeof oSettings.oInstance._oPluginFixedHeader != 'undefined' )
|
||||
{
|
||||
|
@ -295,10 +294,10 @@ $.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo )
|
|||
* ColReorder provides column visiblity control for DataTables
|
||||
* @class ColReorder
|
||||
* @constructor
|
||||
* @param {object} DataTables object
|
||||
* @param {object} DataTables settings object
|
||||
* @param {object} ColReorder options
|
||||
*/
|
||||
ColReorder = function( oTable, oOpts )
|
||||
ColReorder = function( oDTSettings, oOpts )
|
||||
{
|
||||
/* Santiy check that we are a new instance */
|
||||
if ( !this.CLASS || this.CLASS != "ColReorder" )
|
||||
|
@ -401,9 +400,12 @@ ColReorder = function( oTable, oOpts )
|
|||
|
||||
|
||||
/* Constructor logic */
|
||||
this.s.dt = oTable.fnSettings();
|
||||
this.s.dt = oDTSettings.oInstance.fnSettings();
|
||||
this._fnConstruct();
|
||||
|
||||
|
||||
/* Add destroy callback */
|
||||
oDTSettings.oApi._fnCallbackReg(oDTSettings, 'aoDestroyCallback', jQuery.proxy(this._fnDestroy, this), 'ColReorder');
|
||||
|
||||
/* Store the instance for later use */
|
||||
ColReorder.aoInstances.push( this );
|
||||
return this;
|
||||
|
@ -527,7 +529,7 @@ ColReorder.prototype = {
|
|||
{
|
||||
if ( a.length != this.s.dt.aoColumns.length )
|
||||
{
|
||||
this.s.dt.oInstance.oApi._fnLog( oDTSettings, 1, "ColReorder - array reorder does not "+
|
||||
this.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, "ColReorder - array reorder does not "+
|
||||
"match known number of columns. Skipping." );
|
||||
return;
|
||||
}
|
||||
|
@ -611,8 +613,8 @@ ColReorder.prototype = {
|
|||
{
|
||||
var that = this;
|
||||
$(nTh).bind( 'mousedown.ColReorder', function (e) {
|
||||
e.preventDefault();
|
||||
that._fnMouseDown.call( that, e, nTh );
|
||||
return false;
|
||||
} );
|
||||
},
|
||||
|
||||
|
@ -812,7 +814,7 @@ ColReorder.prototype = {
|
|||
}
|
||||
|
||||
$('thead tr:eq(0)', this.dom.drag).each( function () {
|
||||
$('th:not(:eq('+that.s.mouse.targetIndex+'))', this).remove();
|
||||
$('th', this).eq(that.s.mouse.targetIndex).siblings().remove();
|
||||
} );
|
||||
$('tr', this.dom.drag).height( $('tr:eq(0)', that.s.dt.nTHead).height() );
|
||||
|
||||
|
@ -845,6 +847,29 @@ ColReorder.prototype = {
|
|||
|
||||
document.body.appendChild( this.dom.pointer );
|
||||
document.body.appendChild( this.dom.drag );
|
||||
},
|
||||
|
||||
/**
|
||||
* Clean up ColReorder memory references and event handlers
|
||||
* @method _fnDestroy
|
||||
* @returns void
|
||||
* @private
|
||||
*/
|
||||
"_fnDestroy": function ()
|
||||
{
|
||||
for ( var i=0, iLen=ColReorder.aoInstances.length ; i<iLen ; i++ )
|
||||
{
|
||||
if ( ColReorder.aoInstances[i] === this )
|
||||
{
|
||||
ColReorder.aoInstances.splice( i, 1 );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$(this.s.dt.nTHead).find( '*' ).unbind( '.ColReorder' );
|
||||
|
||||
this.s.dt.oInstance._oPluginColReorder = null;
|
||||
this.s = null;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -914,7 +939,7 @@ ColReorder.prototype.CLASS = "ColReorder";
|
|||
* @type String
|
||||
* @default As code
|
||||
*/
|
||||
ColReorder.VERSION = "1.0.5";
|
||||
ColReorder.VERSION = "1.0.8";
|
||||
ColReorder.prototype.VERSION = ColReorder.VERSION;
|
||||
|
||||
|
||||
|
@ -930,7 +955,7 @@ ColReorder.prototype.VERSION = ColReorder.VERSION;
|
|||
*/
|
||||
if ( typeof $.fn.dataTable == "function" &&
|
||||
typeof $.fn.dataTableExt.fnVersionCheck == "function" &&
|
||||
$.fn.dataTableExt.fnVersionCheck('1.9.0') )
|
||||
$.fn.dataTableExt.fnVersionCheck('1.9.3') )
|
||||
{
|
||||
$.fn.dataTableExt.aoFeatures.push( {
|
||||
"fnInit": function( oDTSettings ) {
|
||||
|
@ -938,7 +963,7 @@ if ( typeof $.fn.dataTable == "function" &&
|
|||
if ( typeof oTable._oPluginColReorder == 'undefined' ) {
|
||||
var opts = typeof oDTSettings.oInit.oColReorder != 'undefined' ?
|
||||
oDTSettings.oInit.oColReorder : {};
|
||||
oTable._oPluginColReorder = new ColReorder( oDTSettings.oInstance, opts );
|
||||
oTable._oPluginColReorder = new ColReorder( oDTSettings, opts );
|
||||
} else {
|
||||
oTable.oApi._fnLog( oDTSettings, 1, "ColReorder attempted to initialise twice. Ignoring second" );
|
||||
}
|
||||
|
@ -951,7 +976,7 @@ if ( typeof $.fn.dataTable == "function" &&
|
|||
}
|
||||
else
|
||||
{
|
||||
alert( "Warning: ColReorder requires DataTables 1.9.0 or greater - www.datatables.net/download");
|
||||
alert( "Warning: ColReorder requires DataTables 1.9.3 or greater - www.datatables.net/download");
|
||||
}
|
||||
|
||||
})(jQuery, window, document);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,6 +2,9 @@
|
|||
#
|
||||
# Auto install script for airtime on Ubuntu
|
||||
#
|
||||
# NGINX changes are contributed by Eugene MechanisM
|
||||
# Link to the post:
|
||||
# http://forum.sourcefabric.org/discussion/13563/first-step-to-run-airtime-via-nginx-based-on-airtime-2.0-beta-files
|
||||
|
||||
exec > >(tee install_log.txt)
|
||||
exec 2>&1
|
||||
|
@ -11,6 +14,8 @@ if [ "$(id -u)" != "0" ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
server="$1"
|
||||
|
||||
#Current dir
|
||||
# Absolute path to this script, e.g. /home/user/bin/foo.sh
|
||||
SCRIPT=`readlink -f $0`
|
||||
|
@ -60,7 +65,6 @@ pwgen libfaad2
|
|||
#of Debian, where these packages are unauthorized)
|
||||
apt-get -y --force-yes install libmp3lame-dev lame icecast2
|
||||
|
||||
|
||||
#Debian Squeeze only has zendframework package. Newer versions of Ubuntu have zend-framework package.
|
||||
#Ubuntu Lucid has both zendframework and zend-framework. Difference appears to be that zendframework is for
|
||||
#1.10 and zend-framework is 1.11
|
||||
|
@ -70,32 +74,59 @@ else
|
|||
apt-get -y --force-yes install libzend-framework-php
|
||||
fi
|
||||
|
||||
#get the "timeout" unix command
|
||||
if [ "$code" = "lucid" ]; then
|
||||
apt-get -y --force-yes install timeout
|
||||
else
|
||||
apt-get -y --force-yes install coreutils
|
||||
fi
|
||||
|
||||
|
||||
#Install Sourcefabric's custom Liquidsoap debian package
|
||||
apt-get -y --force-yes install sourcefabric-keyring
|
||||
apt-get -y --force-yes install liquidsoap
|
||||
apt-get -y --force-yes install silan
|
||||
|
||||
if [ "$server" = "nginx" ]; then
|
||||
# NGINX Config File
|
||||
echo "----------------------------------------------------"
|
||||
echo "2.1 NGINX Config File"
|
||||
echo "----------------------------------------------------"
|
||||
if [ ! -f /etc/nginx/sites-available/airtime ]; then
|
||||
cp $SCRIPTPATH/../nginx/airtime-vhost /etc/nginx/sites-available/airtime
|
||||
ln -s /etc/nginx/sites-available/airtime /etc/nginx/sites-enabled/airtime
|
||||
service nginx reload
|
||||
else
|
||||
echo "NGINX config for Airtime already exists..."
|
||||
fi
|
||||
|
||||
# Apache Config File
|
||||
echo "----------------------------------------------------"
|
||||
echo "2. Apache Config File"
|
||||
echo "----------------------------------------------------"
|
||||
if [ ! -f /etc/apache2/sites-available/airtime ]; then
|
||||
cp $SCRIPTPATH/../apache/airtime-vhost /etc/apache2/sites-available/airtime
|
||||
a2dissite default
|
||||
a2ensite airtime
|
||||
a2enmod rewrite php5
|
||||
service apache2 restart
|
||||
# php-fpm Airtime pool file
|
||||
echo "----------------------------------------------------"
|
||||
echo "2.2 Airtime php pool file"
|
||||
echo "----------------------------------------------------"
|
||||
if [ ! -f /etc/php5/fpm/pool.d/airtime.conf ]; then
|
||||
cp $SCRIPTPATH/../php5-fpm/airtime.conf /etc/php5/fpm/pool.d/airtime.conf
|
||||
service php5-fpm reload
|
||||
else
|
||||
echo "Airtime php pool file already exists..."
|
||||
fi
|
||||
else
|
||||
echo "Apache config for Airtime already exists..."
|
||||
# Apache Config File
|
||||
echo "----------------------------------------------------"
|
||||
echo "2. Apache Config File"
|
||||
echo "----------------------------------------------------"
|
||||
if [ ! -f /etc/apache2/sites-available/airtime ]; then
|
||||
cp $SCRIPTPATH/../apache/airtime-vhost /etc/apache2/sites-available/airtime
|
||||
a2dissite default
|
||||
a2ensite airtime
|
||||
a2enmod rewrite php5
|
||||
service apache2 restart
|
||||
else
|
||||
echo "Apache config for Airtime already exists..."
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Enable Icecast
|
||||
echo "----------------------------------------------------"
|
||||
echo "3. Enable Icecast"
|
||||
|
|
|
@ -1,130 +1,10 @@
|
|||
#!/bin/bash -e
|
||||
#
|
||||
# Auto install script for airtime on Ubuntu
|
||||
#
|
||||
# NGINX changes are contributed by Eugene MechanisM
|
||||
# Link to the post:
|
||||
# http://forum.sourcefabric.org/discussion/13563/first-step-to-run-airtime-via-nginx-based-on-airtime-2.0-beta-files
|
||||
#!/bin/bash
|
||||
# Auto install script for airtime + nginx
|
||||
|
||||
exec > >(tee install_log.txt)
|
||||
exec 2>&1
|
||||
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
echo "Please run as root user."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#Current dir
|
||||
# Absolute path to this script, e.g. /home/user/bin/foo.sh
|
||||
SCRIPT=`readlink -f $0`
|
||||
# Absolute path this script is in, thus /home/user/bin
|
||||
SCRIPTPATH=`dirname $SCRIPT`
|
||||
|
||||
#Prerequisite
|
||||
echo "----------------------------------------------------"
|
||||
echo " 1. Install Packages"
|
||||
echo "----------------------------------------------------"
|
||||
|
||||
dist=`lsb_release -is`
|
||||
code=`lsb_release -cs`
|
||||
|
||||
#enable squeeze backports to get lame packages
|
||||
if [ "$dist" = "Debian" -a "$code" = "squeeze" ]; then
|
||||
grep "deb http://backports.debian.org/debian-backports squeeze-backports main" /etc/apt/sources.list
|
||||
if [ "$?" -ne "0" ]; then
|
||||
echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list
|
||||
fi
|
||||
fi
|
||||
|
||||
apt-get update
|
||||
|
||||
# Updated package list
|
||||
apt-get -y --force-yes install tar gzip curl nginx php5-pgsql php5-fpm \
|
||||
php-pear php5-gd postgresql odbc-postgresql python libsoundtouch-ocaml \
|
||||
libtaglib-ocaml libao-ocaml libmad-ocaml ecasound \
|
||||
libesd0 libportaudio2 libsamplerate0 rabbitmq-server patch \
|
||||
php5-curl mpg123 monit python-virtualenv multitail libcamomile-ocaml-data \
|
||||
libpulse0 vorbis-tools lsb-release lsof sudo mp3gain vorbisgain flac vorbis-tools \
|
||||
pwgen libfaad2
|
||||
|
||||
#install packages with --force-yes option (this is useful in the case
|
||||
#of Debian, where these packages are unauthorized)
|
||||
apt-get -y --force-yes install libmp3lame-dev lame icecast2
|
||||
|
||||
#Debian Squeeze only has zendframework package. Newer versions of Ubuntu have zend-framework package.
|
||||
#Ubuntu Lucid has both zendframework and zend-framework. Difference appears to be that zendframework is for
|
||||
#1.10 and zend-framework is 1.11
|
||||
if [ "$dist" = "Debian" ]; then
|
||||
apt-get -y install --force-yes zendframework
|
||||
else
|
||||
apt-get -y install --force-yes libzend-framework-php
|
||||
fi
|
||||
|
||||
if [ "$code" = "lucid" ]; then
|
||||
apt-get -y install --force-yes timeout
|
||||
else
|
||||
apt-get -y install --force-yes coreutils
|
||||
fi
|
||||
|
||||
# NGINX Config File
|
||||
echo "----------------------------------------------------"
|
||||
echo "2.1 NGINX Config File"
|
||||
echo "----------------------------------------------------"
|
||||
if [ ! -f /etc/nginx/sites-available/airtime ]; then
|
||||
cp $SCRIPTPATH/../nginx/airtime-vhost /etc/nginx/sites-available/airtime
|
||||
ln -s /etc/nginx/sites-available/airtime /etc/nginx/sites-enabled/airtime
|
||||
service nginx reload
|
||||
else
|
||||
echo "NGINX config for Airtime already exists..."
|
||||
fi
|
||||
|
||||
#Install Sourcefabric's custom Liquidsoap debian package
|
||||
apt-get -y --force-yes install sourcefabric-keyring
|
||||
apt-get -y --force-yes install liquidsoap
|
||||
|
||||
# php-fpm Airtime pool file
|
||||
echo "----------------------------------------------------"
|
||||
echo "2.2 Airtime php pool file"
|
||||
echo "----------------------------------------------------"
|
||||
if [ ! -f /etc/php5/fpm/pool.d/airtime.conf ]; then
|
||||
cp $SCRIPTPATH/../php5-fpm/airtime.conf /etc/php5/fpm/pool.d/airtime.conf
|
||||
service php5-fpm reload
|
||||
else
|
||||
echo "Airtime php pool file already exists..."
|
||||
fi
|
||||
|
||||
# Enable Icecast
|
||||
echo "----------------------------------------------------"
|
||||
echo "3. Enable Icecast"
|
||||
echo "----------------------------------------------------"
|
||||
cd /etc/default/
|
||||
sed -i 's/ENABLE=false/ENABLE=true/g' icecast2
|
||||
set +e
|
||||
service icecast2 start
|
||||
set -e
|
||||
echo ""
|
||||
|
||||
# Enable Monit
|
||||
echo "----------------------------------------------------"
|
||||
echo "4. Enable Monit"
|
||||
echo "----------------------------------------------------"
|
||||
cd /etc/default/
|
||||
sed -i 's/startup=0/startup=1/g' monit
|
||||
|
||||
set +e
|
||||
grep -q "include /etc/monit/conf.d" /etc/monit/monitrc
|
||||
RETVAL=$?
|
||||
set -e
|
||||
if [ $RETVAL -ne 0 ] ; then
|
||||
mkdir -p /etc/monit/conf.d
|
||||
echo "include /etc/monit/conf.d/*" >> /etc/monit/monitrc
|
||||
fi
|
||||
|
||||
# Run Airtime Install
|
||||
echo "----------------------------------------------------"
|
||||
echo "5. Run Airtime Install"
|
||||
echo "----------------------------------------------------"
|
||||
cd $SCRIPTPATH/../../install_minimal
|
||||
./airtime-install
|
||||
|
||||
$SCRIPTPATH/airtime-full-install nginx
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ get_bootstrap_info = 'get-bootstrap-info/format/json/api_key/%%api_key%%'
|
|||
|
||||
get_files_without_replay_gain = 'get-files-without-replay-gain/api_key/%%api_key%%/dir_id/%%dir_id%%'
|
||||
|
||||
update_replay_gain_value = 'update-replay-gain-value/api_key/%%api_key%%'
|
||||
update_replay_gain_value = 'update-replay-gain-value/format/json/api_key/%%api_key%%'
|
||||
|
||||
notify_webstream_data = 'notify-webstream-data/api_key/%%api_key%%/media_id/%%media_id%%/format/json'
|
||||
|
||||
|
|
|
@ -58,7 +58,9 @@ class ReplayGainUpdater(Thread):
|
|||
|
||||
try:
|
||||
self.api_client.update_replay_gain_values(processed_data)
|
||||
except Exception as e: self.unexpected_exception(e)
|
||||
except Exception as e:
|
||||
self.logger.error(e)
|
||||
self.logger.debug(traceback.format_exc())
|
||||
|
||||
if len(files) == 0: break
|
||||
self.logger.info("Processed: %d songs" % total)
|
||||
|
|
Loading…
Reference in New Issue