Merge branch '2.2.x' of dev.sourcefabric.org:airtime into 2.2.x

This commit is contained in:
Martin Konecny 2012-10-17 15:28:15 -04:00
commit 7123230eea
23 changed files with 147 additions and 68 deletions

View File

@ -313,7 +313,7 @@ class ApiController extends Zend_Controller_Action
}
//used by caller to determine if the airtime they are running or widgets in use is out of date.
$result['AIRTIME_API_VERSION'] = AIRTIME_API_VERSION;
$result['AIRTIME_API_VERSION'] = AIRTIME_API_VERSION;
header("Content-type: text/javascript");
// If a callback is not given, then just provide the raw JSON.
echo isset($_GET['callback']) ? $_GET['callback'].'('.json_encode($result).')' : json_encode($result);
@ -830,8 +830,8 @@ class ApiController extends Zend_Controller_Action
if ($djtype == 'master') {
//check against master
if ($username == Application_Model_Preference::GetLiveSteamMasterUsername()
&& $password == Application_Model_Preference::GetLiveSteamMasterPassword()) {
if ($username == Application_Model_Preference::GetLiveStreamMasterUsername()
&& $password == Application_Model_Preference::GetLiveStreamMasterPassword()) {
$this->view->msg = true;
} else {
$this->view->msg = false;

View File

@ -220,8 +220,8 @@ class PreferenceController extends Zend_Controller_Action
// this goes into cc_pref table
Application_Model_Preference::SetStreamLabelFormat($values['streamFormat']);
Application_Model_Preference::SetLiveSteamMasterUsername($values["master_username"]);
Application_Model_Preference::SetLiveSteamMasterPassword($values["master_password"]);
Application_Model_Preference::SetLiveStreamMasterUsername($values["master_username"]);
Application_Model_Preference::SetLiveStreamMasterPassword($values["master_password"]);
Application_Model_Preference::SetDefaultTransitionFade($values["transition_fade"]);
Application_Model_Preference::SetAutoTransition($values["auto_transition"]);
Application_Model_Preference::SetAutoSwitch($values["auto_switch"]);

View File

@ -186,13 +186,13 @@ class ShowbuilderController extends Zend_Controller_Action
$menu["preview"] = array("name"=> "Preview", "icon" => "play");
//select the cursor
$menu["selCurs"] = array("name"=> "Select Cursor","icon" => "select-cursor");
$menu["delCurs"] = array("name"=> "Remove Cursor","icon" => "select-cursor");
$menu["selCurs"] = array("name"=> "Select cursor","icon" => "select-cursor");
$menu["delCurs"] = array("name"=> "Remove cursor","icon" => "select-cursor");
if ($now < floatval($item->getDbEnds("U.u")) && $user->canSchedule($instance->getDbShowId())) {
//remove/truncate the item from the schedule
$menu["del"] = array("name"=> "Delete", "icon" => "delete", "url" => "/showbuilder/schedule-remove");
$menu["del"] = array("name"=> "Remove from show", "icon" => "delete", "url" => "/showbuilder/schedule-remove");
}
$this->view->items = $menu;

View File

@ -247,15 +247,8 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
$overlapping = Application_Model_Schedule::checkOverlappingShows($show_start, $show_end, $update, $instanceId);
if (!$overlapping) {
$durationToAdd = "PT".$hours."H".$minutes."M";
for ($i = 1; $i <= 10; $i++) {
$hours = ltrim($hours, '0');
if ($minutes != "00") {
$minutes = ltrim($minutes, '0');
$durationToAdd = "PT".$hours."H".$minutes."I";
} else {
$minutes = "0";
$durationToAdd = "PT".$hours."H";
}
if (empty($formData["add_show_rebroadcast_date_absolute_".$i])) break;

View File

@ -32,9 +32,7 @@ class Application_Form_EditAudioMD extends Zend_Form
$this->addElement('text', 'track_number', array(
'label' => 'Track:',
'class' => 'input_text',
'filters' => array('StringTrim'),
'validators' => array('Int'),
'required' => true
'filters' => array('StringTrim')
));
// Add genre field

View File

@ -45,7 +45,7 @@ class Application_Form_LiveStreamingPreferences extends Zend_Form_SubForm
->setAllowEmpty(true)
->setLabel('Master Username')
->setFilters(array('StringTrim'))
->setValue(Application_Model_Preference::GetLiveSteamMasterUsername())
->setValue(Application_Model_Preference::GetLiveStreamMasterUsername())
->setDecorators(array('ViewHelper'));
$this->addElement($master_username);
@ -59,7 +59,7 @@ class Application_Form_LiveStreamingPreferences extends Zend_Form_SubForm
$master_password->setAttrib('autocomplete', 'off')
->setAttrib('renderPassword','true')
->setAllowEmpty(true)
->setValue(Application_Model_Preference::GetLiveSteamMasterPassword())
->setValue(Application_Model_Preference::GetLiveStreamMasterPassword())
->setLabel('Master Password')
->setFilters(array('StringTrim'))
->setDecorators(array('ViewHelper'));

View File

@ -16,12 +16,12 @@ class Application_Model_PlayoutHistory
private $opts;
private $mDataPropMap = array(
"artist" => "file.artist_name",
"title" => "file.track_title",
"played" => "playout.played",
"length" => "file.length",
"composer" => "file.composer",
"copyright" => "file.copyright",
"artist" => "artist_name",
"title" => "track_title",
"played" => "played",
"length" => "length",
"composer" => "composer",
"copyright" => "copyright",
);
public function __construct($p_startDT, $p_endDT, $p_opts)

View File

@ -892,22 +892,22 @@ class Application_Model_Preference
return (strlen($val) == 0) ? 0 : $val;
}
public static function SetLiveSteamMasterUsername($value)
public static function SetLiveStreamMasterUsername($value)
{
self::setValue("live_stream_master_username", $value, false);
}
public static function GetLiveSteamMasterUsername()
public static function GetLiveStreamMasterUsername()
{
return self::getValue("live_stream_master_username");
}
public static function SetLiveSteamMasterPassword($value)
public static function SetLiveStreamMasterPassword($value)
{
self::setValue("live_stream_master_password", $value, false);
}
public static function GetLiveSteamMasterPassword()
public static function GetLiveStreamMasterPassword()
{
return self::getValue("live_stream_master_password");
}
@ -1093,7 +1093,7 @@ class Application_Model_Preference
public static function getOrderingMap($pref_param)
public static function getOrderingMap($pref_param)
{
$v = self::getValue($pref_param, true);

View File

@ -196,6 +196,10 @@ class Application_Model_StoredFile
if (isset($this->_dbMD[$dbColumn])) {
$propelColumn = $this->_dbMD[$dbColumn];
$method = "set$propelColumn";
/* We need to set track_number to null if it is an empty string
* because propel defaults empty strings to zeros */
if ($dbColumn == "track_number" && empty($mdValue)) $mdValue = null;
$this->_file->$method($mdValue);
}
}

View File

@ -5,7 +5,7 @@
/**
* Skeleton subclass for representing a row from the 'cc_blockcontents' table.
*
*
*
*
* You should add additional methods to this class to meet the
* application requirements. This class will only be generated as
@ -44,11 +44,16 @@ class CcBlockcontents extends BaseCcBlockcontents {
*/
public function setDbFadein($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -58,7 +63,7 @@ class CcBlockcontents extends BaseCcBlockcontents {
}
}
$this->fadein = $dt->format('H:i:s.u');
$this->fadein = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcBlockcontentsPeer::FADEIN;
return $this;
@ -72,11 +77,16 @@ class CcBlockcontents extends BaseCcBlockcontents {
*/
public function setDbFadeout($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -86,7 +96,7 @@ class CcBlockcontents extends BaseCcBlockcontents {
}
}
$this->fadeout = $dt->format('H:i:s.u');
$this->fadeout = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcBlockcontentsPeer::FADEOUT;
return $this;

View File

@ -43,11 +43,16 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
*/
public function setDbFadein($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -57,7 +62,7 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
}
}
$this->fadein = $dt->format('H:i:s.u');
$this->fadein = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcPlaylistcontentsPeer::FADEIN;
return $this;
@ -71,11 +76,16 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
*/
public function setDbFadeout($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -85,7 +95,7 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
}
}
$this->fadeout = $dt->format('H:i:s.u');
$this->fadeout = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcPlaylistcontentsPeer::FADEOUT;
return $this;

View File

@ -107,11 +107,16 @@ class CcSchedule extends BaseCcSchedule {
*/
public function setDbFadeIn($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -120,7 +125,7 @@ class CcSchedule extends BaseCcSchedule {
throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x);
}
}
$this->fade_in = $dt->format('H:i:s.u');
$this->fade_in = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcSchedulePeer::FADE_IN;
return $this;
@ -134,11 +139,16 @@ class CcSchedule extends BaseCcSchedule {
*/
public function setDbFadeOut($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -148,7 +158,7 @@ class CcSchedule extends BaseCcSchedule {
}
}
$this->fade_out = $dt->format('H:i:s.u');
$this->fade_in = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcSchedulePeer::FADE_OUT;
return $this;

View File

@ -4,8 +4,8 @@
<span class='playlistID'><?php echo "$this->playlistID" ?></span>
<span class='playlistIndex'><?php echo "$this->playlistIndex" ?></span>
<?php elseif (isset($this->blockId)): ?>
<span class='blockId'><?php echo "$this->blockId" ?></span>
<span class='blockIndex'><?php echo "$this->blockIndex" ?></span>
<span class='blockId' style="display: none;"><?php echo "$this->blockId" ?></span>
<span class='blockIndex' style="display: none;"><?php echo "$this->blockIndex" ?></span>
<?php elseif (isset($this->uri)): ?>
<span class='audioUri' style="display: none;"><?php echo "$this->uri" ?></span>
<span class='audioMime' style="display: none;"><?php echo "$this->mime" ?></span>
@ -51,7 +51,7 @@
</div>
<div class="jp-unmute">
<span class="ui-icon" tabindex="1" title="unmute">unmute</span>
</div>
</div>
<div class="jp-volume-bar">
<div class="jp-volume-bar-value"></div>
</div>

View File

@ -21,7 +21,7 @@ if ($item['type'] == 2) {
<span class="ui-icon ui-icon-play"></span>
</div>
<?php elseif ($item['type'] == 2 && $item['exists']): ?>
<div class="big_play" blockId="<?php echo $item["item_id"]; ?>">
<div class="big_play" blockId="<?php echo $item["item_id"]; ?>" blocktype="<?php echo $staticBlock?"static":"dynamic"?>">
<span class="ui-icon ui-icon-play"></span>
</div>
<?php else:?>

View File

@ -123,6 +123,7 @@ function buildplaylist(p_url, p_playIndex) {
var media;
var index;
var total = 0;
var skipped = 0;
for(index in data) {
if (data[index]['type'] == 0) {
if (data[index]['element_mp3'] != undefined){
@ -145,22 +146,30 @@ function buildplaylist(p_url, p_playIndex) {
artist: data[index]['element_artist'],
wav:data[index]['uri']
};
}
} else {
// skip this track since it's not supported
console.log("continue");
skipped++;
continue;
}
} else if (data[index]['type'] == 1) {
media = {title: data[index]['element_title'],
artist: data[index]['element_artist'],
mp3:data[index]['uri']
};
}
console.log(data[index]);
if (media && isAudioSupported(data[index]['mime'])) {
myPlaylist[index] = media;
// javascript doesn't support associative array with numeric key
// so we need to remove the gap if we skip any of tracks due to
// browser incompatibility.
myPlaylist[index-skipped] = media;
}
// we should create a map according to the new position in the
// player itself total is the index on the player
_idToPostionLookUp[data[index]['element_id']] = total;
total++;
}
_playlist_jplayer.setPlaylist(myPlaylist);
_playlist_jplayer.option("autoPlay", true);
play(p_playIndex);

View File

@ -54,7 +54,7 @@ function open_audio_preview(type, id, audioFileTitle, audioFileArtist) {
audioFileTitle = audioFileTitle.substring(0,index);
}
openPreviewWindow('audiopreview/audio-preview/audioFileID/'+id+'/audioFileArtist/'+audioFileArtist+'/audioFileTitle/'+audioFileTitle+'/type/'+type);
openPreviewWindow('audiopreview/audio-preview/audioFileID/'+id+'/audioFileArtist/'+encodeURIComponent(audioFileArtist)+'/audioFileTitle/'+encodeURIComponent(audioFileTitle)+'/type/'+type);
_preview_window.focus();
}

View File

@ -366,7 +366,7 @@ var AIRTIME = (function(AIRTIME){
//and verify whether they can be previewed by the browser or not. If not
//then the playlist element is greyed out
mod.validatePlaylistElements = function(){
$.each($(".big_play ui-icon-play"), function(index, value){
$.each($("div .big_play"), function(index, value){
if ($(value).attr('blockId') === undefined) {
var mime = $(value).attr("data-mime-type");
if (isAudioSupported(mime)) {
@ -393,6 +393,31 @@ var AIRTIME = (function(AIRTIME){
},
})
}
} else {
if ($(value).attr('blocktype') === 'dynamic') {
$(value).attr("class", "big_play_disabled dark_class");
$(value).qtip({
content: 'Dynamic block is not previewable',
show: 'mouseover',
hide: {
delay: 500,
fixed: true
},
style: {
border: {
width: 0,
radius: 4
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
},
position: {
my: "left bottom",
at: "right center"
},
})
} else {
$(value).bind("click", openAudioPreview);
}
}
});
}

View File

@ -43,11 +43,16 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
*/
public function setDbFadein($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -57,7 +62,7 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
}
}
$this->fadein = $dt->format('H:i:s.u');
$this->fadein = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcPlaylistcontentsPeer::FADEIN;
return $this;
@ -71,11 +76,16 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
*/
public function setDbFadeout($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -85,7 +95,7 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
}
}
$this->fadeout = $dt->format('H:i:s.u');
$this->fadeout = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcPlaylistcontentsPeer::FADEOUT;
return $this;

View File

@ -107,11 +107,16 @@ class CcSchedule extends BaseCcSchedule {
*/
public function setDbFadeIn($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -120,7 +125,7 @@ class CcSchedule extends BaseCcSchedule {
throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x);
}
}
$this->fade_in = $dt->format('H:i:s.u');
$this->fade_in = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcSchedulePeer::FADE_IN;
return $this;
@ -134,11 +139,16 @@ class CcSchedule extends BaseCcSchedule {
*/
public function setDbFadeOut($v)
{
$microsecond = 0;
if ($v instanceof DateTime) {
$dt = $v;
}
else if (preg_match('/^[0-9]{1,2}(\.\d{1,6})?$/', $v)) {
$dt = DateTime::createFromFormat("s.u", $v);
// in php 5.3.2 createFromFormat() with "u" is not supported(bug)
// Hence we need to do parsing.
$info = explode('.', $v);
$microsecond = $info[1];
$dt = DateTime::createFromFormat("s", $info[0]);
}
else {
try {
@ -148,7 +158,7 @@ class CcSchedule extends BaseCcSchedule {
}
}
$this->fade_out = $dt->format('H:i:s.u');
$this->fade_out = $dt->format('H:i:s').".".$microsecond;
$this->modifiedColumns[] = CcSchedulePeer::FADE_OUT;
return $this;

View File

@ -43,7 +43,7 @@ class EventRegistry(object):
methods")
class EventProxy(object):
class EventProxy(Loggable):
"""
A container object for instances of BaseEvent (or it's subclasses) used for
event contractor

View File

@ -182,7 +182,7 @@ class Metadata(Loggable):
that does not exist. Setting metadata to {}")
self.__metadata = {}
return
# TODO : Simplify the way all of these rules are handled right not it's
# TODO : Simplify the way all of these rules are handled right now it's
# extremely unclear and needs to be refactored.
#if full_mutagen is None: raise BadSongFile(fpath)
if full_mutagen is None: full_mutagen = FakeMutagen(fpath)
@ -190,7 +190,6 @@ class Metadata(Loggable):
# Now we extra the special values that are calculated from the mutagen
# object itself:
# Hickity Hackity for .wav files. Properly do this later
if mmp.extension(fpath) == 'wav':
full_mutagen.set_length(mmp.read_wave_duration(fpath))

View File

@ -126,7 +126,8 @@ class WatchSyncer(ReportHandler,Loggable):
try:
# If there is a strange bug anywhere in the code the next line
# should be a suspect
if self.contractor.register(EventProxy(event)): self.push_queue( event )
ev = EventProxy(event)
if self.contractor.register(ev): self.push_queue(ev)
#self.push_queue( event )
except BadSongFile as e:
self.fatal_exception("Received bas song file '%s'" % e.path, e)

View File

@ -39,7 +39,7 @@ class TestMMP(unittest.TestCase):
orig = Metadata.airtime_dict({
'date' : [u'2012-08-21'],
'tracknumber' : [u'2'],
'title' : [u'11-29-00-record'],
'title' : [u'record-2012-08-21-11:29:00'],
'artist' : [u'Airtime Show Recorder']
})
orga = Metadata.airtime_dict({
@ -57,7 +57,7 @@ class TestMMP(unittest.TestCase):
self.assertEqual( orga, normalized )
organized_base_name = "2012-08-21-11-29-00-record-256kbps.ogg"
organized_base_name = "11:29:00-record-256kbps.ogg"
base = "/srv/airtime/stor/"
organized_path = mmp.organized_path(old_path,base, normalized)
self.assertEqual(os.path.basename(organized_path), organized_base_name)