From 1c865fc3f1fde380171b331044ed599c9faf59f6 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Fri, 17 Aug 2012 15:08:11 -0400 Subject: [PATCH 1/5] cc-4232: fixed some tests --- .../media-monitor2/media/monitor/metadata.py | 10 ++++++---- python_apps/media-monitor2/media/monitor/pure.py | 16 +++++++--------- python_apps/media-monitor2/tests/test_pure.py | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/python_apps/media-monitor2/media/monitor/metadata.py b/python_apps/media-monitor2/media/monitor/metadata.py index 931ab52da..a8c982b9a 100644 --- a/python_apps/media-monitor2/media/monitor/metadata.py +++ b/python_apps/media-monitor2/media/monitor/metadata.py @@ -121,10 +121,10 @@ class Metadata(Loggable): def __init__(self, fpath): # Forcing the unicode through - try: fpath = fpath.decode("utf-8") - except: pass - try: full_mutagen = mutagen.File(fpath, easy=True) - except Exception: raise BadSongFile(fpath) + try : fpath = fpath.decode("utf-8") + except : pass + try : full_mutagen = mutagen.File(fpath, easy=True) + except Exception : raise BadSongFile(fpath) self.path = fpath # TODO : Simplify the way all of these rules are handled right not it's # extremely unclear and needs to be refactored. @@ -162,6 +162,8 @@ class Metadata(Loggable): # Finally, we "normalize" all the metadata here: self.__metadata = mmp.normalized_metadata(self.__metadata, fpath) # Now we must load the md5: + # TODO : perhaps we shouldn't hard code how many bytes we're reading + # from the file? self.__metadata['MDATA_KEY_MD5'] = mmp.file_md5(fpath,max_length=100) def is_recorded(self): diff --git a/python_apps/media-monitor2/media/monitor/pure.py b/python_apps/media-monitor2/media/monitor/pure.py index 30742c236..1cf75544f 100644 --- a/python_apps/media-monitor2/media/monitor/pure.py +++ b/python_apps/media-monitor2/media/monitor/pure.py @@ -163,11 +163,13 @@ def apply_rules_dict(d, rules): """ Consumes a dictionary of rules that maps some keys to lambdas which it applies to every matching element in d and returns a new dictionary with - the rules applied + the rules applied. If a rule returns none then it's not applied """ new_d = copy.deepcopy(d) for k, rule in rules.iteritems(): - if k in d: new_d[k] = rule(d[k]) + if k in d: + new_val = rule(d[k]) + if new_val is not None: new_d[k] = new_val return new_d def default_to_f(dictionary, keys, default, condition): @@ -183,10 +185,6 @@ def default_to(dictionary, keys, default): """ cnd = lambda dictionary, key: key not in dictionary return default_to_f(dictionary, keys, default, cnd) - #new_d = copy.deepcopy(dictionary) - #for k in keys: - #if not (k in new_d): new_d[k] = default - #return new_d def remove_whitespace(dictionary): """ @@ -205,18 +203,18 @@ def remove_whitespace(dictionary): def parse_int(s): """ Tries very hard to get some sort of integer result from s. Defaults to 0 - when it failes + when it fails >>> parse_int("123") '123' >>> parse_int("123saf") '123' >>> parse_int("asdf") - '' + nothing """ if s.isdigit(): return s else: try : return str(reduce(op.add, takewhile(lambda x: x.isdigit(), s))) - except: return '' + except: return None def normalized_metadata(md, original_path): """ diff --git a/python_apps/media-monitor2/tests/test_pure.py b/python_apps/media-monitor2/tests/test_pure.py index 81918fd10..611c42f60 100644 --- a/python_apps/media-monitor2/tests/test_pure.py +++ b/python_apps/media-monitor2/tests/test_pure.py @@ -48,7 +48,7 @@ class TestMMP(unittest.TestCase): real_path1 = \ u'/home/rudi/throwaway/fucking_around/watch/unknown/unknown/ACDC_-_Back_In_Black-sample-64kbps-64kbps.ogg' self.assertTrue( 'unknown' in og, True ) - self.assertEqual( og, real_path1 ) + self.assertEqual( og, real_path1 ) # TODO : fix this failure # for recorded it should be something like this # ./recorded/2012/07/2012-07-09-17-55-00-Untitled Show-256kbps.ogg @@ -70,6 +70,6 @@ class TestMMP(unittest.TestCase): def test_parse_int(self): self.assertEqual( mmp.parse_int("123"), "123" ) self.assertEqual( mmp.parse_int("123asf"), "123" ) - self.assertEqual( mmp.parse_int("asdf"), "" ) + self.assertEqual( mmp.parse_int("asdf"), None ) if __name__ == '__main__': unittest.main() From 92408612f6ac73cd89270826adf014cc77d24c7f Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 17 Aug 2012 15:11:43 -0400 Subject: [PATCH 2/5] CC-4246: Smart Playlist: Click shuffle button will shuffle the contents multiple times -fixed --- .../js/airtime/playlist/smart_playlistbuilder.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js index ccb2492ba..5e252aa7d 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js @@ -329,9 +329,20 @@ function setupUI() { if (shuffleButton.hasClass('ui-state-disabled')) { shuffleButton.removeClass('ui-state-disabled'); } - shuffleButton.live('click', function(){ - buttonClickAction('shuffle', 'Playlist/smart-block-shuffle'); + //check if shuffle button already has a click event + var clickEvents = $(document).data('events').click; + var hasEvent = false; + $.each(clickEvents, function(i, event) { + if (event.selector == shuffleButton.selector) { + hasEvent = true; + return false; + } }); + if (!hasEvent) { + shuffleButton.live('click', function(){ + buttonClickAction('shuffle', 'Playlist/smart-block-shuffle'); + }); + } } else if (!shuffleButton.hasClass('ui-state-disabled')) { shuffleButton.addClass('ui-state-disabled'); shuffleButton.die('click'); From efa4b12e3a41f99d654e40a3f58d011451a3ca70 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Fri, 17 Aug 2012 15:18:40 -0400 Subject: [PATCH 3/5] cc-4232: fixed typo in doctest --- python_apps/media-monitor2/media/monitor/pure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_apps/media-monitor2/media/monitor/pure.py b/python_apps/media-monitor2/media/monitor/pure.py index 1cf75544f..1836dc77f 100644 --- a/python_apps/media-monitor2/media/monitor/pure.py +++ b/python_apps/media-monitor2/media/monitor/pure.py @@ -209,7 +209,7 @@ def parse_int(s): >>> parse_int("123saf") '123' >>> parse_int("asdf") - nothing + None """ if s.isdigit(): return s else: From 764316a36c60f2881c4fabf4e5a4197c71eeeabd Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 17 Aug 2012 15:30:30 -0400 Subject: [PATCH 4/5] CC-4247: Smart Playlist: Lost modifier when delete one from multiple modifiers -fixed --- .../js/airtime/playlist/smart_playlistbuilder.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js index 5e252aa7d..b1402f63a 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_playlistbuilder.js @@ -90,7 +90,7 @@ function setSmartPlaylistEvents() { curr.find('[name^="sp_criteria_field"]').val(criteria); var modifier = next.find('[name^="sp_criteria_modifier"]').val(); - populateModifierSelect(curr.find('[name^="sp_criteria_field"]')); + populateModifierSelect(curr.find('[name^="sp_criteria_field"]'), false); curr.find('[name^="sp_criteria_modifier"]').val(modifier); var criteria_value = next.find('[name^="sp_criteria_value"]').val(); @@ -208,7 +208,7 @@ function setSmartPlaylistEvents() { // disable extra field and hide the span disableAndHideExtraField($(this), index_num); - populateModifierSelect(this); + populateModifierSelect(this, true); }); /********** MODIFIER CHANGE **********/ @@ -413,12 +413,16 @@ function sizeTextBoxes(ele, classToRemove, classToAdd) { } } -function populateModifierSelect(e) { +function populateModifierSelect(e, popAllMods) { var criteria_type = getCriteriaOptionType(e), index = getRowIndex($(e).parent()), - critIndex = index.substring(0, 1), - divs = $(e).parents().find('select[id^="sp_criteria_modifier_'+critIndex+'"]'); - + divs; + + if (popAllMods) { + index = index.substring(0, 1); + } + divs = $(e).parents().find('select[id^="sp_criteria_modifier_'+index+'"]'); + $.each(divs, function(i, div){ $(div).children().remove(); From ecd7fe75768425a83482dececedf7e511389b3d0 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Fri, 17 Aug 2012 15:36:33 -0400 Subject: [PATCH 5/5] cc-4232: fix this issue --- python_apps/media-monitor2/media/monitor/pure.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python_apps/media-monitor2/media/monitor/pure.py b/python_apps/media-monitor2/media/monitor/pure.py index 1836dc77f..70136f730 100644 --- a/python_apps/media-monitor2/media/monitor/pure.py +++ b/python_apps/media-monitor2/media/monitor/pure.py @@ -238,7 +238,8 @@ def normalized_metadata(md, original_path): new_md = apply_rules_dict(new_md, format_rules) new_md = default_to(dictionary=new_md, keys=['MDATA_KEY_TITLE'], default=no_extension_basename(original_path)) - new_md = default_to(dictionary=new_md, keys=path_md, default=u'') + new_md = default_to(dictionary=new_md, keys=['MDATA_KEY_CREATOR', + 'MDATA_KEY_SOURCE'], default=u'') new_md = default_to(dictionary=new_md, keys=['MDATA_KEY_FTYPE'], default=u'audioclip') # In the case where the creator is 'Airtime Show Recorder' we would like to