Merge branch 'devel' of dev.sourcefabric.org:airtime into devel
This commit is contained in:
commit
219fba9bee
|
@ -64,7 +64,7 @@ class PlaylistController extends Zend_Controller_Action
|
|||
unset($this->view->obj);
|
||||
}
|
||||
|
||||
private function createFullResponse($obj = null, $isJson = false)
|
||||
private function createFullResponse($obj = null, $isJson = false, $formIsValid = false)
|
||||
{
|
||||
$isBlock = false;
|
||||
$viewPath = 'playlist/playlist.phtml';
|
||||
|
@ -80,11 +80,12 @@ class PlaylistController extends Zend_Controller_Action
|
|||
if ($isBlock) {
|
||||
$form = new Application_Form_SmartBlockCriteria();
|
||||
$form->removeDecorator('DtDdWrapper');
|
||||
$form->startForm($obj->getId());
|
||||
|
||||
$form->startForm($obj->getId(), $formIsValid);
|
||||
|
||||
$this->view->form = $form;
|
||||
$this->view->obj = $obj;
|
||||
$this->view->id = $obj->getId();
|
||||
|
||||
if ($isJson) {
|
||||
return $this->view->render($viewPath);
|
||||
} else {
|
||||
|
@ -460,7 +461,7 @@ class PlaylistController extends Zend_Controller_Action
|
|||
$bl = new Application_Model_Block($params['obj_id']);
|
||||
if ($form->isValid($params)) {
|
||||
$bl->saveSmartBlockCriteria($params['data']);
|
||||
$result['html'] = $this->createFullResponse($bl, true);
|
||||
$result['html'] = $this->createFullResponse($bl, true, true);
|
||||
$result['result'] = 0;
|
||||
} else {
|
||||
$this->view->obj = $bl;
|
||||
|
@ -486,7 +487,7 @@ class PlaylistController extends Zend_Controller_Action
|
|||
if ($form->isValid($params)) {
|
||||
$result = $bl->generateSmartBlock($params['data']);
|
||||
try {
|
||||
die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true))));
|
||||
die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true, true))));
|
||||
} catch (PlaylistNotFoundException $e) {
|
||||
$this->playlistNotFound('block');
|
||||
} catch (Exception $e) {
|
||||
|
|
|
@ -88,7 +88,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
|
||||
}
|
||||
|
||||
public function startForm($p_blockId)
|
||||
public function startForm($p_blockId, $p_isValid = false)
|
||||
{
|
||||
// load type
|
||||
$out = CcBlockQuery::create()->findPk($p_blockId);
|
||||
|
@ -236,7 +236,13 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
|
||||
//getting block content candidate count that meets criteria
|
||||
$bl = new Application_Model_Block($p_blockId);
|
||||
$files = $bl->getListofFilesMeetCriteria();
|
||||
if ($p_isValid) {
|
||||
$files = $bl->getListofFilesMeetCriteria();
|
||||
$showPoolCount = true;
|
||||
} else {
|
||||
$files = null;
|
||||
$showPoolCount = false;
|
||||
}
|
||||
|
||||
$generate = new Zend_Form_Element_Button('generate_button');
|
||||
$generate->setAttrib('class', 'ui-button ui-state-default sp-button');
|
||||
|
@ -256,7 +262,8 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
|||
|
||||
$this->setDecorators(array(
|
||||
array('ViewScript', array('viewScript' => 'form/smart-block-criteria.phtml', "openOption"=> $openSmartBlockOption,
|
||||
'criteriasLength' => count($this->criteriaOptions), 'poolCount' => $files['count'], 'modRowMap' => $modRowMap))
|
||||
'criteriasLength' => count($this->criteriaOptions), 'poolCount' => $files['count'], 'modRowMap' => $modRowMap,
|
||||
'showPoolCount' => $showPoolCount))
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
@ -1187,6 +1187,16 @@ EOT;
|
|||
if (isset($criteria['extra'])) {
|
||||
$spCriteriaExtra = $criteria['extra']*1000;
|
||||
}
|
||||
/*
|
||||
* If user is searching for an exact match of length we need to
|
||||
* search as if it starts with the specified length because the
|
||||
* user only sees the rounded version (i.e. 4:02.7 is 4:02.761625
|
||||
* in the database)
|
||||
*/
|
||||
} else if ($spCriteria == 'length' && $spCriteriaModifier == "is") {
|
||||
$spCriteriaModifier = "starts with";
|
||||
$spCriteria = $spCriteria.'::text';
|
||||
$spCriteriaValue = $criteria['value'];
|
||||
} else {
|
||||
/* Propel does not escape special characters properly when using LIKE/ILIKE
|
||||
* We have to add extra slashes in these cases
|
||||
|
@ -1214,6 +1224,7 @@ EOT;
|
|||
}
|
||||
|
||||
$spCriteriaModifier = self::$modifier2CriteriaMap[$spCriteriaModifier];
|
||||
|
||||
try {
|
||||
if ($i > 0) {
|
||||
$qry->addOr($spCriteria, $spCriteriaValue, $spCriteriaModifier);
|
||||
|
|
|
@ -66,32 +66,35 @@
|
|||
<?php endif; ?>
|
||||
<br />
|
||||
</dd>
|
||||
<div class='sp_text_font sp_text_font_bold'>
|
||||
<span id='sp_pool_count' class='sp_text_font sp_text_font_bold'>
|
||||
<?php
|
||||
if ($this->poolCount > 1) {
|
||||
echo $this->poolCount;
|
||||
?>
|
||||
files meet the criteria
|
||||
</span>
|
||||
<span class='checked-icon sp-checked-icon' id='sp_pool_count_icon'></span>
|
||||
<?php
|
||||
} else if ($this->poolCount == 1) {
|
||||
echo $this->poolCount;
|
||||
?>
|
||||
file meets the criteria
|
||||
</span>
|
||||
<span class='checked-icon sp-checked-icon' id='sp_pool_count_icon'></span>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
0 files meet the criteria
|
||||
</span>
|
||||
<span class='sp-warning-icon' id='sp_pool_count_icon'></span>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php if ($this->showPoolCount) { ?>
|
||||
<div class='sp_text_font sp_text_font_bold'>
|
||||
<span id='sp_pool_count' class='sp_text_font sp_text_font_bold'>
|
||||
<?php
|
||||
if ($this->poolCount > 1) {
|
||||
echo $this->poolCount;
|
||||
?>
|
||||
files meet the criteria
|
||||
</span>
|
||||
<span class='checked-icon sp-checked-icon' id='sp_pool_count_icon'></span>
|
||||
<?php
|
||||
} else if ($this->poolCount == 1) {
|
||||
echo $this->poolCount;
|
||||
?>
|
||||
file meets the criteria
|
||||
</span>
|
||||
<span class='checked-icon sp-checked-icon' id='sp_pool_count_icon'></span>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
0 files meet the criteria
|
||||
</span>
|
||||
<span class='sp-warning-icon' id='sp_pool_count_icon'></span>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
</dl>
|
||||
|
|
|
@ -290,10 +290,11 @@ def organized_path(old_path, root_path, orig_md):
|
|||
normal_md['MDATA_KEY_BITRATE'] = formatted + 'kbps'
|
||||
else: normal_md['MDATA_KEY_BITRATE'] = unicode_unknown
|
||||
|
||||
|
||||
if is_airtime_recorded(normal_md):
|
||||
title_re = re.match("(?P<show>\w+)-(?P<date>\d+-\d+-\d+-\d+:\d+:\d+)$",
|
||||
title_re = re.match("(?P<show>.+)-(?P<date>\d+-\d+-\d+-\d+:\d+:\d+)$",
|
||||
normal_md['MDATA_KEY_TITLE'])
|
||||
show_name, = title_re.group('show'),
|
||||
show_name = title_re.group('show')
|
||||
date = title_re.group('date').replace(':','-')
|
||||
yyyy, mm, _ = normal_md['MDATA_KEY_YEAR'].split('-',2)
|
||||
fname_base = '%s-%s-%s.%s' % \
|
||||
|
|
|
@ -35,7 +35,7 @@ class TestMMP(unittest.TestCase):
|
|||
for k in def_keys: self.assertEqual( sd[k], 'DEF' )
|
||||
|
||||
def test_normalized_metadata(self):
|
||||
# Recorded show test first
|
||||
#Recorded show test first
|
||||
orig = Metadata.airtime_dict({
|
||||
'date' : [u'2012-08-21'],
|
||||
'tracknumber' : [u'2'],
|
||||
|
@ -62,6 +62,24 @@ class TestMMP(unittest.TestCase):
|
|||
organized_path = mmp.organized_path(old_path,base, normalized)
|
||||
self.assertEqual(os.path.basename(organized_path), organized_base_name)
|
||||
|
||||
def test_normalized_metadata2(self):
|
||||
"""
|
||||
cc-4305
|
||||
"""
|
||||
orig = Metadata.airtime_dict({
|
||||
'date' : [u'2012-08-27'],
|
||||
'tracknumber' : [u'3'],
|
||||
'title' : [u'18-11-00-Untitled Show'],
|
||||
'artist' : [u'Airtime Show Recorder']
|
||||
})
|
||||
old_path = "/home/rudi/recorded/doesnt_really_matter.ogg"
|
||||
normalized = mmp.normalized_metadata(orig, old_path)
|
||||
normalized['MDATA_KEY_BITRATE'] = u'256000'
|
||||
opath = mmp.organized_path(old_path, "/srv/airtime/stor/",
|
||||
normalized)
|
||||
self.assertTrue( len(opath) > 0 )
|
||||
|
||||
|
||||
def test_file_md5(self):
|
||||
p = os.path.realpath(__file__)
|
||||
m1 = mmp.file_md5(p)
|
||||
|
|
|
@ -134,21 +134,22 @@ class ShowRecorder(Thread):
|
|||
self.api_client.upload_recorded_show(datagen, headers)
|
||||
|
||||
def set_metadata_and_save(self, filepath):
|
||||
"""
|
||||
Writes song to 'filepath'. Uses metadata from:
|
||||
self.start_time, self.show_name, self.show_instance
|
||||
"""
|
||||
try:
|
||||
date = self.start_time
|
||||
md = date.split(" ")
|
||||
# TODO : rename 'time' variable to something better so that there
|
||||
# is no naming conflicts with the time module that is being
|
||||
# imported
|
||||
time = md[1].replace(":", "-")
|
||||
self.logger.info("time: %s" % time)
|
||||
|
||||
name = time + "-" + self.show_name
|
||||
record_time = md[1].replace(":", "-")
|
||||
self.logger.info("time: %s" % record_time)
|
||||
|
||||
artist = "Airtime Show Recorder"
|
||||
|
||||
#set some metadata for our file daemon
|
||||
recorded_file = mutagen.File(filepath, easy = True)
|
||||
recorded_file['title'] = name
|
||||
recorded_file['title'] = record_time + "-" + self.show_name
|
||||
recorded_file['artist'] = artist
|
||||
recorded_file['date'] = md[0]
|
||||
#recorded_file['date'] = md[0].split("-")[0]
|
||||
|
|
Loading…
Reference in New Issue