From b4f1cc13c0927d8baa045c052bf7edbd188ac63c Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Sat, 14 Jul 2012 23:36:33 -0400 Subject: [PATCH] CC-430: Audio normalization (Replaygain Support) make code simpler (don't download database to file) --- .../application/controllers/ApiController.php | 3 +- airtime_mvc/application/models/StoredFile.php | 6 +-- .../api/get-files-without-replay-gain.phtml | 7 +--- python_apps/api_clients/api_client.cfg | 2 +- python_apps/api_clients/api_client.py | 15 ++++++-- .../airtimefilemonitor/replaygainupdater.py | 37 ++++++++----------- 6 files changed, 31 insertions(+), 39 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 2082c0aed..0babd0d06 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -954,7 +954,6 @@ class ApiController extends Zend_Controller_Action $dir_id = $this->_getParam('dir_id'); //connect to db and get get sql - $this->view->rows = Application_Model_StoredFile::listAllFiles2($dir_id, 0); - + $this->view->rows = Application_Model_StoredFile::listAllFiles2($dir_id, 100); } } diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 51ab1c409..0e39759e7 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -975,13 +975,11 @@ Logging::log("getting media! - 2"); ." FROM CC_FILES" ." WHERE directory = $dir_id" ." AND file_exists = 'TRUE'"; - if (!is_null($limit) && is_int($limit)) { $sql .= " LIMIT $limit"; } - - $rows = $con->query($sql, PDO::FETCH_ASSOC); - + + $rows = $con->query($sql, PDO::FETCH_ASSOC)->fetchAll(); return $rows; } diff --git a/airtime_mvc/application/views/scripts/api/get-files-without-replay-gain.phtml b/airtime_mvc/application/views/scripts/api/get-files-without-replay-gain.phtml index 9d38517bd..7681cf29c 100644 --- a/airtime_mvc/application/views/scripts/api/get-files-without-replay-gain.phtml +++ b/airtime_mvc/application/views/scripts/api/get-files-without-replay-gain.phtml @@ -1,8 +1,3 @@ rows as $row) { - echo json_encode($row)."\n"; -} +echo json_encode($this->rows); diff --git a/python_apps/api_clients/api_client.cfg b/python_apps/api_clients/api_client.cfg index 1cbf9e322..b58d97005 100644 --- a/python_apps/api_clients/api_client.cfg +++ b/python_apps/api_clients/api_client.cfg @@ -113,5 +113,5 @@ update_source_status = 'update-source-status/format/json/api_key/%%api_key%%/sou get_bootstrap_info = 'get-bootstrap-info/format/json/api_key/%%api_key%%' -get-files-without-replay-gain = 'get-files-without-replay-gain/api_key/%%api_key%%/dir_id/%%dir_id%%'' +get-files-without-replay-gain = 'get-files-without-replay-gain/api_key/%%api_key%%/dir_id/%%dir_id%%' diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index d2aea1e45..e99ffc374 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -381,7 +381,11 @@ class AirTimeApiClient(): self.logger.debug("Warning: Sending a request element without a 'mode'") self.logger.debug("Here is the the request: '%s'" % str(action) ) else: valid_actions.append(action) - md_list = { i : json.dumps(convert_dict_value_to_utf8(md)) for i,md in enumerate(valid_actions) } + + md_list = dict((i, json.dumps(convert_dict_value_to_utf8(md))) for i,md in enumerate(valid_actions)) + #Doesn't work in Python 2.6 + #md_list = {i : json.dumps(convert_dict_value_to_utf8(md)) for i,md in enumerate(valid_actions) } + data = urllib.urlencode(md_list) req = urllib2.Request(url, data) response = self.get_response_from_server(req) @@ -625,12 +629,15 @@ class AirTimeApiClient(): url = "http://%(base_url)s:%(base_port)s/%(api_base)s/%(get-files-without-replay-gain)s/" % (self.config) url = url.replace("%%api_key%%", self.config["api_key"]) url = url.replace("%%dir_id%%", dir_id) + response = self.get_response_from_server(url) - file_path = self.get_response_into_file(url) + logger.info("update file system mount: %s", response) + response = json.loads(response) + #file_path = self.get_response_into_file(url) except Exception, e: - file_path = None + response = None logger.error('Exception: %s', e) logger.error("traceback: %s", traceback.format_exc()) - return file_path + return response diff --git a/python_apps/media-monitor/airtimefilemonitor/replaygainupdater.py b/python_apps/media-monitor/airtimefilemonitor/replaygainupdater.py index 48d73f58f..f73c9396e 100644 --- a/python_apps/media-monitor/airtimefilemonitor/replaygainupdater.py +++ b/python_apps/media-monitor/airtimefilemonitor/replaygainupdater.py @@ -12,10 +12,10 @@ import replaygain class ReplayGainUpdater(Thread): """ The purpose of the class is to query the server for a list of files which do not have a ReplayGain - value calculated. This class will iterate over the list calculate the values, update the server and + value calculated. This class will iterate over the list calculate the values, update the server and repeat the process until the the server reports there are no files left. - - This class will see heavy activity right after a 2.1->2.2 upgrade since 2.2 introduces ReplayGain + + This class will see heavy activity right after a 2.1->2.2 upgrade since 2.2 introduces ReplayGain normalization. A fresh install of Airtime 2.2 will see this class not used at all since a file imported in 2.2 will automatically have its ReplayGain value calculated. """ @@ -27,42 +27,35 @@ class ReplayGainUpdater(Thread): def main(self): - #TODO + #TODO make sure object has 'dirs' attr directories = self.api_client.list_all_watched_dirs()['dirs'] for dir_id, dir_path in directories.iteritems(): try: processed_data = [] - #keep getting 100 rows at a time for current music_dir (stor or watched folder). - #When we get a response with 0 rows, then we will set response to True. + #keep getting few rows at a time for current music_dir (stor or watched folder). + #When we get a response with 0 rows, then we will set 'finished' to True. finished = False while not finished: # return a list of pairs where the first value is the file's database row id # and the second value is the filepath - file_path = self.api_client.get_files_without_replay_gain_value(dir_id) - print "temp file saved to %s" % file_path + files = self.api_client.get_files_without_replay_gain_value(dir_id) + self.logger.debug(files) - num_lines = 0 + for f in files: + full_path = os.path.join(dir_path, f['fp']) + processed_data.append((f['id'], replaygain.calculate_replay_gain(full_path))) - with open(file_path) as f: - for line in f: - num_lines += 1 - data = json.loads(line.strip()) - track_path = os.path.join(dir_path, data['fp']) - processed_data.append((data['id'], replaygain.calculate_replay_gain(track_path))) - - if num_lines == 0: - finished = True - - os.remove(file_path) + #finished = (len(files) == 0) + finished = True #send data here - pass + print processed_data except Exception, e: print e - + print traceback.format_exc() def run(self): try: self.main() except Exception, e: