Merge branch '2.2.x' into devel
Conflicts: airtime_mvc/application/controllers/ShowbuilderController.php airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js airtime_mvc/public/js/airtime/common/common.js
This commit is contained in:
commit
7d8079f770
|
@ -96,6 +96,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
|
|||
$view->headScript()->appendScript("var baseUrl='$baseUrl'");
|
||||
|
||||
//scripts for now playing bar
|
||||
$view->headScript()->appendFile($baseUrl.'/js/airtime/airtime_bootstrap.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
||||
$view->headScript()->appendFile($baseUrl.'/js/airtime/dashboard/helperfunctions.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
||||
$view->headScript()->appendFile($baseUrl.'/js/airtime/dashboard/dashboard.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
||||
$view->headScript()->appendFile($baseUrl.'/js/airtime/dashboard/versiontooltip.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
||||
|
@ -112,8 +113,6 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
|
|||
}
|
||||
$view->headScript()->appendScript("var userType = '$userType';");
|
||||
|
||||
|
||||
|
||||
if (isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1) {
|
||||
$view->headScript()->appendFile($baseUrl.'/js/libs/google-analytics.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -276,6 +276,7 @@ class AudiopreviewController extends Zend_Controller_Action
|
|||
'element_artist' => isset($track['creator']) ? $track['creator'] : "",
|
||||
'element_position' => $position,
|
||||
'element_id' => ++$position,
|
||||
'mime' => isset($track['mime'])?$track['mime']:""
|
||||
);
|
||||
|
||||
$elementMap['type'] = $track['type'];
|
||||
|
|
|
@ -224,8 +224,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"]);
|
||||
|
|
|
@ -189,8 +189,8 @@ 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())) {
|
||||
|
||||
|
|
|
@ -143,10 +143,12 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
|
|||
* upto this point
|
||||
*/
|
||||
if ($valid) {
|
||||
$utc = new DateTimeZone('UTC');
|
||||
$localTimezone = new DateTimeZone(Application_Model_Preference::GetTimezone());
|
||||
$show_start = new DateTime($start_time);
|
||||
$show_start->setTimezone(new DateTimeZone('UTC'));
|
||||
$show_start->setTimezone($utc);
|
||||
$show_end = new DateTime($end_time);
|
||||
$show_end->setTimezone(new DateTimeZone('UTC'));
|
||||
$show_end->setTimezone($utc);
|
||||
|
||||
if ($formData["add_show_repeats"]) {
|
||||
|
||||
|
@ -155,7 +157,7 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
|
|||
$date = Application_Model_Preference::GetShowsPopulatedUntil();
|
||||
|
||||
if (is_null($date)) {
|
||||
$populateUntilDateTime = new DateTime("now", new DateTimeZone('UTC'));
|
||||
$populateUntilDateTime = new DateTime("now", $utc);
|
||||
Application_Model_Preference::SetShowsPopulatedUntil($populateUntilDateTime);
|
||||
} else {
|
||||
$populateUntilDateTime = clone $date;
|
||||
|
@ -164,7 +166,7 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
|
|||
} elseif (!$formData["add_show_no_end"]) {
|
||||
$popUntil = $formData["add_show_end_date"]." ".$formData["add_show_end_time"];
|
||||
$populateUntilDateTime = new DateTime($popUntil);
|
||||
$populateUntilDateTime->setTimezone(new DateTimeZone('UTC'));
|
||||
$populateUntilDateTime->setTimezone($utc);
|
||||
}
|
||||
|
||||
//get repeat interval
|
||||
|
@ -179,7 +181,14 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
|
|||
/* Check first show
|
||||
* Continue if the first show does not overlap
|
||||
*/
|
||||
$overlapping = Application_Model_Schedule::checkOverlappingShows($show_start, $show_end, $update, $instanceId);
|
||||
if ($update) {
|
||||
$overlapping = Application_Model_Schedule::checkOverlappingShows(
|
||||
$show_start, $show_end, $update, null, $formData["add_show_id"]);
|
||||
} else {
|
||||
$overlapping = Application_Model_Schedule::checkOverlappingShows(
|
||||
$show_start, $show_end);
|
||||
}
|
||||
//$overlapping = Application_Model_Schedule::checkOverlappingShows($show_start, $show_end, $update, $instanceId);
|
||||
|
||||
/* Check if repeats overlap with previously scheduled shows
|
||||
* Do this for each show day
|
||||
|
@ -196,8 +205,18 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
|
|||
else
|
||||
$daysAdd = $day - $startDow;
|
||||
|
||||
/* In case we are crossing daylights saving time we need
|
||||
* to convert show start and show end to local time before
|
||||
* adding the interval for the next repeating show
|
||||
*/
|
||||
|
||||
$repeatShowStart->setTimezone($localTimezone);
|
||||
$repeatShowEnd->setTimezone($localTimezone);
|
||||
$repeatShowStart->add(new DateInterval("P".$daysAdd."D"));
|
||||
$repeatShowEnd->add(new DateInterval("P".$daysAdd."D"));
|
||||
//set back to UTC
|
||||
$repeatShowStart->setTimezone($utc);
|
||||
$repeatShowEnd->setTimezone($utc);
|
||||
}
|
||||
/* Here we are checking each repeating show by
|
||||
* the show day.
|
||||
|
@ -208,9 +227,22 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
|
|||
//this is a new show
|
||||
$overlapping = Application_Model_Schedule::checkOverlappingShows(
|
||||
$repeatShowStart, $repeatShowEnd);
|
||||
|
||||
/* If the repeating show is rebroadcasted we need to check
|
||||
* the rebroadcast dates relative to the repeating show
|
||||
*/
|
||||
if (!$overlapping && $formData['add_show_rebroadcast']) {
|
||||
$overlapping = self::checkRebroadcastDates(
|
||||
$repeatShowStart, $formData, $hours, $minutes);
|
||||
}
|
||||
} else {
|
||||
$overlapping = Application_Model_Schedule::checkOverlappingShows(
|
||||
$repeatShowStart, $repeatShowEnd, $update, null, $formData["add_show_id"]);
|
||||
|
||||
if (!$overlapping && $formData['add_show_rebroadcast']) {
|
||||
$overlapping = self::checkRebroadcastDates(
|
||||
$repeatShowStart, $formData, $hours, $minutes, true);
|
||||
}
|
||||
}
|
||||
|
||||
if ($overlapping) {
|
||||
|
@ -218,8 +250,12 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
|
|||
$this->getElement('add_show_duration')->setErrors(array('Cannot schedule overlapping shows'));
|
||||
break 1;
|
||||
} else {
|
||||
$repeatShowStart->setTimezone($localTimezone);
|
||||
$repeatShowEnd->setTimezone($localTimezone);
|
||||
$repeatShowStart->add(new DateInterval($interval));
|
||||
$repeatShowEnd->add(new DateInterval($interval));
|
||||
$repeatShowStart->setTimezone($utc);
|
||||
$repeatShowEnd->setTimezone($utc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -234,15 +270,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;
|
||||
|
||||
|
@ -275,6 +304,39 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm
|
|||
return $valid;
|
||||
}
|
||||
|
||||
public function checkRebroadcastDates($repeatShowStart, $formData, $hours, $minutes, $showEdit=false) {
|
||||
$overlapping = false;
|
||||
for ($i = 1; $i <= 10; $i++) {
|
||||
if (empty($formData["add_show_rebroadcast_date_".$i])) break;
|
||||
$rebroadcastShowStart = clone $repeatShowStart;
|
||||
/* formData is in local time so we need to set the
|
||||
* show start back to local time
|
||||
*/
|
||||
$rebroadcastShowStart->setTimezone(new DateTimeZone(
|
||||
Application_Model_Preference::GetTimezone()));
|
||||
$rebroadcastWhenDays = explode(" ", $formData["add_show_rebroadcast_date_".$i]);
|
||||
$rebroadcastWhenTime = explode(":", $formData["add_show_rebroadcast_time_".$i]);
|
||||
$rebroadcastShowStart->add(new DateInterval("P".$rebroadcastWhenDays[0]."D"));
|
||||
$rebroadcastShowStart->setTime($rebroadcastWhenTime[0], $rebroadcastWhenTime[1]);
|
||||
$rebroadcastShowStart->setTimezone(new DateTimeZone('UTC'));
|
||||
|
||||
$rebroadcastShowEnd = clone $rebroadcastShowStart;
|
||||
$rebroadcastShowEnd->add(new DateInterval("PT".$hours."H".$minutes."M"));
|
||||
|
||||
if ($showEdit) {
|
||||
$overlapping = Application_Model_Schedule::checkOverlappingShows(
|
||||
$rebroadcastShowStart, $rebroadcastShowEnd, true, null, $formData['add_show_id']);
|
||||
} else {
|
||||
$overlapping = Application_Model_Schedule::checkOverlappingShows(
|
||||
$rebroadcastShowStart, $rebroadcastShowEnd);
|
||||
}
|
||||
|
||||
if ($overlapping) break;
|
||||
}
|
||||
|
||||
return $overlapping;
|
||||
}
|
||||
|
||||
public function disable()
|
||||
{
|
||||
$elements = $this->getElements();
|
||||
|
|
|
@ -33,9 +33,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
|
||||
|
|
|
@ -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'));
|
||||
|
|
|
@ -319,12 +319,12 @@ SQL;
|
|||
if ($mins >59) {
|
||||
$hour = intval($mins/60);
|
||||
$hour = str_pad($hour, 2, "0", STR_PAD_LEFT);
|
||||
$value = $mins%60;
|
||||
$mins = $mins%60;
|
||||
}
|
||||
}
|
||||
$hour = str_pad($hour, 2, "0", STR_PAD_LEFT);
|
||||
$value = str_pad($value, 2, "0", STR_PAD_LEFT);
|
||||
$length = $hour.":".$value.":00";
|
||||
$mins = str_pad($mins, 2, "0", STR_PAD_LEFT);
|
||||
$length = $hour.":".$mins.":00";
|
||||
}
|
||||
|
||||
return $length;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -893,22 +893,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");
|
||||
}
|
||||
|
@ -1094,7 +1094,7 @@ class Application_Model_Preference
|
|||
|
||||
|
||||
|
||||
public static function getOrderingMap($pref_param)
|
||||
public static function getOrderingMap($pref_param)
|
||||
{
|
||||
$v = self::getValue($pref_param, true);
|
||||
|
||||
|
|
|
@ -1789,9 +1789,9 @@ SQL;
|
|||
|
||||
$showInstance = new Application_Model_ShowInstance(
|
||||
$show["instance_id"]);
|
||||
$showContent = $showInstance->getShowListContent();
|
||||
//$showContent = $showInstance->getShowListContent();
|
||||
|
||||
$options["show_empty"] = empty($showContent) ? 1 : 0;
|
||||
$options["show_empty"] = ($showInstance->showEmpty()) ? 1 : 0;
|
||||
|
||||
$events[] = &self::makeFullCalendarEvent($show, $options,
|
||||
$startsDT, $endsDT, $startsEpochStr, $endsEpochStr);
|
||||
|
|
|
@ -661,6 +661,28 @@ SQL;
|
|||
return $returnStr;
|
||||
}
|
||||
|
||||
|
||||
public function showEmpty()
|
||||
{
|
||||
$sql = <<<SQL
|
||||
SELECT s.starts
|
||||
FROM cc_schedule AS s
|
||||
WHERE s.instance_id = :instance_id
|
||||
AND s.playout_status >= 0
|
||||
AND ((s.stream_id IS NOT NULL)
|
||||
OR (s.file_id IS NOT NULL)) LIMIT 1
|
||||
SQL;
|
||||
# TODO : use prepareAndExecute properly
|
||||
$res = Application_Common_Database::prepareAndExecute($sql,
|
||||
array( ':instance_id' => $this->_instanceId ), 'all' );
|
||||
# TODO : A bit retarded. fix this later
|
||||
foreach ($res as $r) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public function getShowListContent()
|
||||
{
|
||||
$con = Propel::getConnection();
|
||||
|
@ -670,14 +692,15 @@ SELECT *
|
|||
FROM (
|
||||
(SELECT s.starts,
|
||||
0::INTEGER as type ,
|
||||
f.id AS item_id,
|
||||
f.id AS item_id,
|
||||
f.track_title,
|
||||
f.album_title AS album,
|
||||
f.genre AS genre,
|
||||
f.length AS length,
|
||||
f.artist_name AS creator,
|
||||
f.file_exists AS EXISTS,
|
||||
f.filepath AS filepath
|
||||
f.album_title AS album,
|
||||
f.genre AS genre,
|
||||
f.length AS length,
|
||||
f.artist_name AS creator,
|
||||
f.file_exists AS EXISTS,
|
||||
f.filepath AS filepath,
|
||||
f.mime AS mime
|
||||
FROM cc_schedule AS s
|
||||
LEFT JOIN cc_files AS f ON f.id = s.file_id
|
||||
WHERE s.instance_id = :instance_id1
|
||||
|
@ -688,12 +711,13 @@ FROM (
|
|||
1::INTEGER as type,
|
||||
ws.id AS item_id,
|
||||
(ws.name || ': ' || ws.url) AS title,
|
||||
null AS album,
|
||||
null AS genre,
|
||||
ws.length AS length,
|
||||
sub.login AS creator,
|
||||
't'::boolean AS EXISTS,
|
||||
ws.url AS filepath
|
||||
null AS album,
|
||||
null AS genre,
|
||||
ws.length AS length,
|
||||
sub.login AS creator,
|
||||
't'::boolean AS EXISTS,
|
||||
ws.url AS filepath,
|
||||
ws.mime as mime
|
||||
FROM cc_schedule AS s
|
||||
LEFT JOIN cc_webstream AS ws ON ws.id = s.stream_id
|
||||
LEFT JOIN cc_subjs AS sub ON ws.creator_id = sub.id
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -219,6 +219,25 @@ class Application_Model_StreamSetting
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Sets indivisual stream setting.
|
||||
*
|
||||
* $data - data array. $data is [].
|
||||
* TODO: Make this SQL a prepared statement!
|
||||
*
|
||||
* Do not remove this function. It is called by airtime-system.php
|
||||
*/
|
||||
public static function setIndividualStreamSetting($data)
|
||||
{
|
||||
$con = Propel::getConnection();
|
||||
|
||||
foreach ($data as $keyname => $v) {
|
||||
$sql = "UPDATE cc_stream_setting SET value='$v' WHERE keyname='$keyname'";
|
||||
$con->exec($sql);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Stores liquidsoap status if $boot_time > save time.
|
||||
* save time is the time that user clicked save on stream setting page
|
||||
|
|
|
@ -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,11 @@ class CcBlockcontents extends BaseCcBlockcontents {
|
|||
}
|
||||
}
|
||||
|
||||
$this->fadein = $dt->format('H:i:s.u');
|
||||
if ($microsecond == 0) {
|
||||
$this->fadein = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadein = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcBlockcontentsPeer::FADEIN;
|
||||
|
||||
return $this;
|
||||
|
@ -72,11 +81,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 {
|
||||
|
@ -85,8 +99,12 @@ class CcBlockcontents extends BaseCcBlockcontents {
|
|||
throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x);
|
||||
}
|
||||
}
|
||||
|
||||
$this->fadeout = $dt->format('H:i:s.u');
|
||||
|
||||
if ($microsecond == 0) {
|
||||
$this->fadeout = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadeout = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcBlockcontentsPeer::FADEOUT;
|
||||
|
||||
return $this;
|
||||
|
|
|
@ -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,11 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
|
|||
}
|
||||
}
|
||||
|
||||
$this->fadein = $dt->format('H:i:s.u');
|
||||
if ($microsecond == 0) {
|
||||
$this->fadein = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadein = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcPlaylistcontentsPeer::FADEIN;
|
||||
|
||||
return $this;
|
||||
|
@ -71,11 +80,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 +99,11 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
|
|||
}
|
||||
}
|
||||
|
||||
$this->fadeout = $dt->format('H:i:s.u');
|
||||
if ($microsecond == 0) {
|
||||
$this->fadeout = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadeout = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcPlaylistcontentsPeer::FADEOUT;
|
||||
|
||||
return $this;
|
||||
|
|
|
@ -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,12 @@ 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');
|
||||
|
||||
if ($microsecond == 0) {
|
||||
$this->fadein = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadein = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcSchedulePeer::FADE_IN;
|
||||
|
||||
return $this;
|
||||
|
@ -134,11 +144,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 +163,11 @@ class CcSchedule extends BaseCcSchedule {
|
|||
}
|
||||
}
|
||||
|
||||
$this->fade_out = $dt->format('H:i:s.u');
|
||||
if ($microsecond == 0) {
|
||||
$this->fadeout = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadeout = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcSchedulePeer::FADE_OUT;
|
||||
|
||||
return $this;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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:?>
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
font-size: 9px;
|
||||
height: 15px;
|
||||
/*right: 35px;*/
|
||||
width: 120px;
|
||||
width: 124px;
|
||||
margin-top: 2px;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
|
@ -584,4 +584,4 @@ li.spl_empty {
|
|||
}
|
||||
.expand-block-separate {
|
||||
border-top: 1px solid #5B5B5B;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
$(document).ready(function() {
|
||||
$.ajaxSetup({
|
||||
cache: false
|
||||
});
|
||||
});
|
|
@ -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) {
|
||||
|
@ -146,22 +147,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);
|
||||
|
|
|
@ -53,7 +53,8 @@ function open_audio_preview(type, id, audioFileTitle, audioFileArtist) {
|
|||
if(index != -1){
|
||||
audioFileTitle = audioFileTitle.substring(0,index);
|
||||
}
|
||||
openPreviewWindow(baseUrl+'/audiopreview/audio-preview/audioFileID/'+id+'/audioFileArtist/'+audioFileArtist+'/audioFileTitle/'+audioFileTitle+'/type/'+type);
|
||||
openPreviewWindow(baseUrl+'audiopreview/audio-preview/audioFileID/'+id+'/audioFileArtist/'+encodeURIComponent(audioFileArtist)+'/audioFileTitle/'+encodeURIComponent(audioFileTitle)+'/type/'+type);
|
||||
|
||||
_preview_window.focus();
|
||||
}
|
||||
|
||||
|
|
|
@ -815,9 +815,10 @@ var AIRTIME = (function(AIRTIME) {
|
|||
//playlist screen if this is the currently edited playlist.
|
||||
if ((data.ftype === "playlist" || data.ftype === "block") && screen === "playlist") {
|
||||
callback = function() {
|
||||
|
||||
aMedia = [];
|
||||
aMedia.push({"id": data.id, "type": data.ftype});
|
||||
if (confirm('Are you sure you want to delete the selected item?')) {
|
||||
AIRTIME.playlist.fnDelete(data.id);
|
||||
AIRTIME.library.fnDeleteItems(aMedia);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -367,7 +367,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)) {
|
||||
|
@ -394,6 +394,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);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -363,7 +363,7 @@ function setupUI() {
|
|||
|
||||
$(".playlist_type_help_icon").qtip({
|
||||
content: {
|
||||
text: "A static smart block will save the criteria and generate the block content immediately." +
|
||||
text: "A static smart block will save the criteria and generate the block content immediately. " +
|
||||
"This allows you to edit and view it in the Library before adding it to a show.<br /><br />" +
|
||||
"A dynamic smart block will only save the criteria. The block content will get generated upon " +
|
||||
"adding it to a show. You will not be able to view and edit the content in the Library."
|
||||
|
|
|
@ -206,7 +206,6 @@ function viewDisplay( view ) {
|
|||
}
|
||||
|
||||
function eventRender(event, element, view) {
|
||||
getCurrentShow();
|
||||
|
||||
$(element).data("event", event);
|
||||
|
||||
|
@ -367,7 +366,9 @@ function checkSCUploadStatus(){
|
|||
});
|
||||
});
|
||||
}
|
||||
|
||||
/** This function adds and removes the current
|
||||
* show icon
|
||||
*/
|
||||
function getCurrentShow(){
|
||||
var url = baseUrl+'/Schedule/get-current-show/format/json',
|
||||
id,
|
||||
|
|
|
@ -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,11 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
|
|||
}
|
||||
}
|
||||
|
||||
$this->fadein = $dt->format('H:i:s.u');
|
||||
if ($microsecond == 0) {
|
||||
$this->fadein = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadein = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcPlaylistcontentsPeer::FADEIN;
|
||||
|
||||
return $this;
|
||||
|
@ -71,11 +80,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 +99,11 @@ class CcPlaylistcontents extends BaseCcPlaylistcontents {
|
|||
}
|
||||
}
|
||||
|
||||
$this->fadeout = $dt->format('H:i:s.u');
|
||||
if ($microsecond == 0) {
|
||||
$this->fadeout = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadeout = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcPlaylistcontentsPeer::FADEOUT;
|
||||
|
||||
return $this;
|
||||
|
|
|
@ -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,11 @@ 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');
|
||||
if ($microsecond == 0) {
|
||||
$this->fadein = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadein = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcSchedulePeer::FADE_IN;
|
||||
|
||||
return $this;
|
||||
|
@ -134,11 +143,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 +162,11 @@ class CcSchedule extends BaseCcSchedule {
|
|||
}
|
||||
}
|
||||
|
||||
$this->fade_out = $dt->format('H:i:s.u');
|
||||
if ($microsecond == 0) {
|
||||
$this->fadeout = $dt->format('H:i:s.u');
|
||||
} else {
|
||||
$this->fadeout = $dt->format('H:i:s').".".$microsecond;
|
||||
}
|
||||
$this->modifiedColumns[] = CcSchedulePeer::FADE_OUT;
|
||||
|
||||
return $this;
|
||||
|
|
|
@ -105,6 +105,12 @@ class UpgradeCommon{
|
|||
|
||||
self::CreateIniFiles(UpgradeCommon::CONF_BACKUP_SUFFIX);
|
||||
self::MergeConfigFiles($configFiles, $suffix);
|
||||
|
||||
//HACK: This will fix a last minute bug we discovered with our upgrade scripts.
|
||||
//Will be fixed properly in 2.3.0
|
||||
$old = "list_all_db_files = 'list-all-files/format/json/api_key/%%api_key%%/dir_id/%%dir_id%%'";
|
||||
$new = "list_all_db_files = 'list-all-files/format/json/api_key/%%api_key%%/dir_id/%%dir_id%%/all/%%all%%'";
|
||||
exec("sed -i \"s#$old#$new#g\" /etc/airtime/api_client.cfg");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -162,11 +168,13 @@ class UpgradeCommon{
|
|||
foreach($sectionKeys as $sectionKey) {
|
||||
|
||||
if(isset($oldSettings[$section][$sectionKey])) {
|
||||
self::UpdateIniValue($conf, $sectionKey, $oldSettings[$section][$sectionKey]);
|
||||
self::UpdateIniValue($conf, $sectionKey,
|
||||
$oldSettings[$section][$sectionKey]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
self::UpdateIniValue($conf, $section, $oldSettings[$section]);
|
||||
self::UpdateIniValue($conf, $section,
|
||||
$oldSettings[$section]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ WHERE id IN
|
|||
(SELECT s.id
|
||||
FROM cc_schedule s
|
||||
LEFT JOIN cc_show_instances si ON s.instance_id = si.id
|
||||
AND si.modified_instance = 't');
|
||||
WHERE si.modified_instance = 't');
|
||||
|
||||
ALTER TABLE cc_files
|
||||
DROP CONSTRAINT cc_files_gunid_idx;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -399,7 +399,15 @@ class PypoPush(Thread):
|
|||
|
||||
|
||||
def date_interval_to_seconds(self, interval):
|
||||
return (interval.microseconds + (interval.seconds + interval.days * 24 * 3600) * 10 ** 6) / float(10 ** 6)
|
||||
"""
|
||||
Convert timedelta object into int representing the number of seconds. If
|
||||
number of seconds is less than 0, then return 0.
|
||||
"""
|
||||
seconds = (interval.microseconds + \
|
||||
(interval.seconds + interval.days * 24 * 3600) * 10 ** 6) / float(10 ** 6)
|
||||
if seconds < 0: seconds = 0
|
||||
|
||||
return seconds
|
||||
|
||||
def push_to_liquidsoap(self, event_chain):
|
||||
|
||||
|
|
Loading…
Reference in New Issue