CC-1665: Scheduled stream rebroadcasting and recording

-ability to preview webstreams
This commit is contained in:
Martin Konecny 2012-08-09 14:39:31 -04:00
parent c69dac7ab6
commit b53bc36f4f
6 changed files with 47 additions and 23 deletions

View File

@ -24,15 +24,22 @@ class AudiopreviewController extends Zend_Controller_Action
$audioFileID = $this->_getParam('audioFileID'); $audioFileID = $this->_getParam('audioFileID');
$audioFileArtist = $this->_getParam('audioFileArtist'); $audioFileArtist = $this->_getParam('audioFileArtist');
$audioFileTitle = $this->_getParam('audioFileTitle'); $audioFileTitle = $this->_getParam('audioFileTitle');
$type = $this->_getParam('type');
$request = $this->getRequest(); $request = $this->getRequest();
$baseUrl = $request->getBaseUrl(); $baseUrl = $request->getBaseUrl();
$baseDir = dirname($_SERVER['SCRIPT_FILENAME']); $baseDir = dirname($_SERVER['SCRIPT_FILENAME']);
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile(
$this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $baseUrl.'/js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],
$this->view->headLink()->appendStylesheet($baseUrl.'/js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']); 'text/javascript');
$this->view->headScript()->appendFile(
$baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],
'text/javascript');
$this->view->headLink()->appendStylesheet(
$baseUrl.'/js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']);
$this->_helper->layout->setLayout('audioPlayer'); $this->_helper->layout->setLayout('audioPlayer');
$logo = Application_Model_Preference::GetStationLogo(); $logo = Application_Model_Preference::GetStationLogo();
@ -41,6 +48,17 @@ class AudiopreviewController extends Zend_Controller_Action
} else { } else {
$this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png"; $this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png";
} }
if ($type == "audioclip") {
$uri = "/api/get-media/file/".$audioFileID;
} else if ($type == "stream") {
$webstream = CcWebstreamQuery::create()->findPk($audioFileID);
$uri = $webstream->getDbUrl();
} else {
throw new Exception("Unknown type for audio preview!");
}
$this->view->uri = $uri;
$this->view->audioFileID = $audioFileID; $this->view->audioFileID = $audioFileID;
$this->view->audioFileArtist = $audioFileArtist; $this->view->audioFileArtist = $audioFileArtist;
$this->view->audioFileTitle = $audioFileTitle; $this->view->audioFileTitle = $audioFileTitle;

View File

@ -641,6 +641,11 @@ class Application_Model_StoredFile
$blSelect[] = "NULL::int AS ".$key; $blSelect[] = "NULL::int AS ".$key;
$fileSelect[] = $key; $fileSelect[] = $key;
$streamSelect[] = "NULL::int AS ".$key; $streamSelect[] = "NULL::int AS ".$key;
} else if ($key === "filepath") {
$plSelect[] = "NULL::VARCHAR AS ".$key;
$blSelect[] = "NULL::VARCHAR AS ".$key;
$fileSelect[] = $key;
$streamSelect[] = "url AS ".$key;
} else { } else {
$plSelect[] = "NULL::text AS ".$key; $plSelect[] = "NULL::text AS ".$key;
$blSelect[] = "NULL::text AS ".$key; $blSelect[] = "NULL::text AS ".$key;
@ -719,13 +724,13 @@ class Application_Model_StoredFile
//datatable stuff really needs to be pulled out and generalized within the project //datatable stuff really needs to be pulled out and generalized within the project
//access to zend view methods to access url helpers is needed. //access to zend view methods to access url helpers is needed.
Logging::log($type);
if ($type == "au") { if ($type == "au") {
$row['audioFile'] = $row['id'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); $row['audioFile'] = $row['id'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION);
$row['image'] = '<img title="Track preview" src="/css/images/icon_audioclip.png">'; $row['image'] = '<img title="Track preview" src="/css/images/icon_audioclip.png">';
} else if ($type == "pl") { } else if ($type == "pl") {
$row['image'] = '<img title="Playlist preview" src="/css/images/icon_playlist.png">'; $row['image'] = '<img title="Playlist preview" src="/css/images/icon_playlist.png">';
} else if ($type == "st") { } else if ($type == "st") {
$row['audioFile'] = $row['id'];
$row['image'] = '<img title="Webstream preview" src="/css/images/record_icon.png">'; $row['image'] = '<img title="Webstream preview" src="/css/images/record_icon.png">';
} else if ($type == "bl") { } else if ($type == "bl") {
$row['image'] = '<img title="Smart Playlist" src="/css/images/delete.png">'; $row['image'] = '<img title="Smart Playlist" src="/css/images/delete.png">';

View File

@ -6,8 +6,8 @@
<?php elseif (isset($this->blockId)): ?> <?php elseif (isset($this->blockId)): ?>
<span class='blockId'><?php echo "$this->blockId" ?></span> <span class='blockId'><?php echo "$this->blockId" ?></span>
<span class='blockIndex'><?php echo "$this->blockIndex" ?></span> <span class='blockIndex'><?php echo "$this->blockIndex" ?></span>
<?php elseif (isset($this->audioFileID)): ?> <?php elseif (isset($this->uri)): ?>
<span class='audioFileID'><?php echo "$this->audioFileID" ?></span> <span class='audioUri'><?php echo "$this->uri" ?></span>
<span class='audioFileTitle'><?php echo "$this->audioFileTitle" ?></span> <span class='audioFileTitle'><?php echo "$this->audioFileTitle" ?></span>
<span class='audioFileArtist'><?php echo "$this->audioFileArtist" ?></span> <span class='audioFileArtist'><?php echo "$this->audioFileArtist" ?></span>
<?php elseif (isset($this->showID)): ?> <?php elseif (isset($this->showID)): ?>

View File

@ -35,7 +35,8 @@ $(document).ready(function(){
$.jPlayer.timeFormat.showHour = true; $.jPlayer.timeFormat.showHour = true;
var audioFileID = $('.audioFileID').text(); var audioUri = $('.audioUri').text();
//var audioFileID = $('.audioFileID').text();
var playlistID = $('.playlistID').text(); var playlistID = $('.playlistID').text();
var playlistIndex = $('.playlistIndex').text(); var playlistIndex = $('.playlistIndex').text();
var showID = $('.showID').text(); var showID = $('.showID').text();
@ -47,8 +48,8 @@ $(document).ready(function(){
if (playlistID != "" && playlistID !== ""){ if (playlistID != "" && playlistID !== ""){
playAllPlaylist(playlistID, playlistIndex); playAllPlaylist(playlistID, playlistIndex);
}else if (audioFileID != "") { }else if (audioUri != "") {
playOne(audioFileID); playOne(audioUri);
}else if (showID != "") { }else if (showID != "") {
playAllShow(showID, showIndex); playAllShow(showID, showIndex);
}else if(blockId != "" && blockIndex != ""){ }else if(blockId != "" && blockIndex != ""){
@ -179,18 +180,18 @@ function play(p_playlistIndex){
* Playing one audio track occurs from the library. This function will create the media, setup * Playing one audio track occurs from the library. This function will create the media, setup
* jplayer and play the track. * jplayer and play the track.
*/ */
function playOne(p_audioFileID) { function playOne(uri) {
var playlist = new Array(); var playlist = new Array();
var fileExtension = p_audioFileID.split('.').pop(); var fileExtension = uri.split('.').pop();
if (fileExtension.toLowerCase() === 'mp3') { if (fileExtension.toLowerCase() === 'mp3') {
media = {title: $('.audioFileTitle').text() !== 'null' ?$('.audioFileTitle').text():"", media = {title: $('.audioFileTitle').text() !== 'null' ?$('.audioFileTitle').text():"",
artist: $('.audioFileArtist').text() !== 'null' ?$('.audioFileArtist').text():"", artist: $('.audioFileArtist').text() !== 'null' ?$('.audioFileArtist').text():"",
mp3:"/api/get-media/file/"+p_audioFileID mp3:uri
}; };
}else if (fileExtension.toLowerCase() === 'ogg' ) { } else if (fileExtension.toLowerCase() === 'ogg' ) {
media = {title: $('.audioFileTitle').text() != 'null' ?$('.audioFileTitle').text():"", media = {title: $('.audioFileTitle').text() != 'null' ?$('.audioFileTitle').text():"",
artist: $('.audioFileArtist').text() != 'null' ?$('.audioFileArtist').text():"", artist: $('.audioFileArtist').text() != 'null' ?$('.audioFileArtist').text():"",
oga:"/api/get-media/file/"+p_audioFileID oga:uri
}; };
} }
_playlist_jplayer.option("autoPlay", true); _playlist_jplayer.option("autoPlay", true);

View File

@ -43,15 +43,18 @@ function openAudioPreview(p_event) {
} }
} }
function open_audio_preview(audioFileID, audioFileTitle, audioFileArtist) { function open_audio_preview(type, id, audioFileTitle, audioFileArtist) {
// we need to remove soundcloud icon from audioFileTitle // we need to remove soundcloud icon from audioFileTitle
var index = audioFileTitle.indexOf("<span class="); var index = audioFileTitle.indexOf("<span class=");
if(index != -1){ if(index != -1){
audioFileTitle = audioFileTitle.substring(0,index); audioFileTitle = audioFileTitle.substring(0,index);
} }
openPreviewWindow('audiopreview/audio-preview/audioFileID/'+audioFileID+'/audioFileArtist/'+audioFileArtist+'/audioFileTitle/'+audioFileTitle);
openPreviewWindow('audiopreview/audio-preview/audioFileID/'+id+'/audioFileArtist/'+audioFileArtist+'/audioFileTitle/'+audioFileTitle+'/type/'+type);
_preview_window.focus(); _preview_window.focus();
} }
/** /**
*Opens a jPlayer window for the specified info, for either an audio file or playlist. *Opens a jPlayer window for the specified info, for either an audio file or playlist.
*If audioFile, audioFileTitle, audioFileArtist is supplied the jplayer opens for one file *If audioFile, audioFileTitle, audioFileArtist is supplied the jplayer opens for one file
@ -96,12 +99,7 @@ function open_show_preview(p_showID, p_showIndex) {
} }
function openPreviewWindow(url) { function openPreviewWindow(url) {
//$.post(baseUri+'Playlist/audio-preview-player', {fileName: fileName, cueIn: cueIn, cueOut: cueOut, fadeIn: fadeIn, fadeInFileName: fadeInFileName, fadeOut: fadeOut, fadeOutFileName: fadeOutFileName})
_preview_window = window.open(url, 'Audio Player', 'width=450,height=100,scrollbars=yes'); _preview_window = window.open(url, 'Audio Player', 'width=450,height=100,scrollbars=yes');
//Set the play button to pause.
//var elemID = "spl_"+elemIndexString;
//$('#'+elemID+' div.list-item-container a span').attr("class", "ui-icon ui-icon-pause");
return false; return false;
} }

View File

@ -423,7 +423,9 @@ var AIRTIME = (function(AIRTIME) {
playlistIndex = $(this).parent().attr('id').substring(3); //remove the pl_ playlistIndex = $(this).parent().attr('id').substring(3); //remove the pl_
open_playlist_preview(playlistIndex, 0); open_playlist_preview(playlistIndex, 0);
} else if (aData.ftype === 'audioclip') { } else if (aData.ftype === 'audioclip') {
open_audio_preview(aData.audioFile, aData.track_title, aData.artist_name); open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name);
} else if (aData.ftype == 'stream') {
open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name);
} }
return false; return false;
}); });
@ -637,7 +639,7 @@ var AIRTIME = (function(AIRTIME) {
playlistIndex = $(this).parent().attr('id').substring(3); //remove the pl_ playlistIndex = $(this).parent().attr('id').substring(3); //remove the pl_
open_playlist_preview(playlistIndex, 0); open_playlist_preview(playlistIndex, 0);
} else if (data.ftype === 'audioclip') { } else if (data.ftype === 'audioclip') {
open_audio_preview(data.audioFile, data.track_title, data.artist_name); open_audio_preview(data.ftype, data.audioFile, data.track_title, data.artist_name);
} else if (data.ftype === 'block') { } else if (data.ftype === 'block') {
blockIndex = $(this).parent().attr('id').substring(3); //remove the pl_ blockIndex = $(this).parent().attr('id').substring(3); //remove the pl_
open_block_preview(blockIndex, 0); open_block_preview(blockIndex, 0);