From 3306292f93068c10f636ee2365da1db8c5aa1060 Mon Sep 17 00:00:00 2001 From: james Date: Tue, 28 Jun 2011 12:26:34 -0400 Subject: [PATCH 1/4] CC-2463:Install doesn't overwrite cron file -fixed --- install/include/airtime-install.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/include/airtime-install.php b/install/include/airtime-install.php index 717198a92..b260179a1 100644 --- a/install/include/airtime-install.php +++ b/install/include/airtime-install.php @@ -151,7 +151,7 @@ AirtimeInstall::CreateZendPhpLogFile(); $hour = rand(0,23); $minute = rand(0,59); -$fp = fopen('/etc/cron.d/airtime-crons','a'); +$fp = fopen('/etc/cron.d/airtime-crons','w'); fwrite($fp, "$minute $hour * * * root /usr/lib/airtime/utils/phone_home_stat\n"); fclose($fp); From f8a1990ec1261e1a7938559335d6d54b44614687 Mon Sep 17 00:00:00 2001 From: james Date: Tue, 28 Jun 2011 12:34:47 -0400 Subject: [PATCH 2/4] CC-2469:Client is sending data without checkout feedback flag - fixed --- utils/phone_home_stat.php | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/utils/phone_home_stat.php b/utils/phone_home_stat.php index 84cedb5d7..61436ae89 100644 --- a/utils/phone_home_stat.php +++ b/utils/phone_home_stat.php @@ -55,17 +55,19 @@ if (PEAR::isError($CC_DBC)) { echo "* Connected to database".PHP_EOL; $CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC); } -$infoArray = Application_Model_Preference::GetSystemInfo(true); - -$ch = curl_init(); -curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); -curl_setopt($ch, CURLOPT_POST, 1); -curl_setopt($ch, CURLOPT_URL, 'http://stat.sourcefabric.org/index.php?p=airtime'); - -$data = json_encode($infoArray); - -$dataArray = array("data" => $data ); - -curl_setopt($ch, CURLOPT_POSTFIELDS, $dataArray); -$result = curl_exec($ch); +if(Application_Model_Preference::GetSupportFeedback() == '1'){ + $infoArray = Application_Model_Preference::GetSystemInfo(true); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_URL, 'http://stat.sourcefabric.org/index.php?p=airtime'); + + $data = json_encode($infoArray); + + $dataArray = array("data" => $data ); + + curl_setopt($ch, CURLOPT_POSTFIELDS, $dataArray); + $result = curl_exec($ch); +} ?> \ No newline at end of file From 33a247c4debd96917fa68d5263d9c3290df7bbc0 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Tue, 28 Jun 2011 18:40:38 +0200 Subject: [PATCH 3/4] cc-1799 : Filesystem handling replacing of files in gui, need to handle closing down processes on exit. --- python_apps/media-monitor/MediaMonitor.py | 12 +++++++++--- .../airtimefilemonitor/airtimeprocessevent.py | 14 ++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/python_apps/media-monitor/MediaMonitor.py b/python_apps/media-monitor/MediaMonitor.py index 004455122..e6aca761c 100644 --- a/python_apps/media-monitor/MediaMonitor.py +++ b/python_apps/media-monitor/MediaMonitor.py @@ -15,9 +15,15 @@ from airtimefilemonitor.airtimeprocessevent import AirtimeProcessEvent from airtimefilemonitor.mediaconfig import AirtimeMediaConfig def handleSigTERM(signum, frame): + logger = logging.getLogger() logger.info("Main Process Shutdown, TERM signal caught. %d") - if p is not None: + for p in processes: p.terminate() + logger.info("Killed process. %d", p.pid) + + notifier_daemon_pid = open('/var/run/airtime-notifier.pid', 'r').read() + os.kill(int(notifier_daemon_pid), 9) + logger.info("Killed process. %d", int(notifier_daemon_pid)) sys.exit(0) @@ -30,7 +36,7 @@ except Exception, e: sys.exit() logger = logging.getLogger() -p = None +processes = [] try: config = AirtimeMediaConfig() @@ -43,7 +49,7 @@ try: #create 5 worker processes for i in range(5): p = Process(target=notifier.process_file_events, args=(pe.multi_queue,)) - p.daemon = True + processes.append(p) p.start() signal.signal(signal.SIGTERM, handleSigTERM) diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py b/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py index 6b18a77dd..7ec3c941d 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py @@ -31,6 +31,7 @@ class AirtimeProcessEvent(ProcessEvent): self.supported_file_formats = ['mp3', 'ogg'] self.temp_files = {} self.moved_files = {} + self.gui_replaced = {} self.renamed_files = {} self.file_events = [] self.multi_queue = mpQueue() @@ -222,16 +223,18 @@ class AirtimeProcessEvent(ProcessEvent): def process_IN_MODIFY(self, event): if not event.dir: - #self.logger.info("%s: %s", event.maskname, event.pathname) + self.logger.info("%s: %s", event.maskname, event.pathname) if event.pathname in self.renamed_files: pass elif self.is_audio_file(event.name): self.file_events.append({'filepath': event.pathname, 'mode': self.config.MODE_MODIFY}) def process_IN_MOVED_FROM(self, event): - #self.logger.info("%s: %s", event.maskname, event.pathname) + self.logger.info("%s: %s", event.maskname, event.pathname) if not event.dir: - if event.pathname in self.temp_files: + if "goutputstream" in event.pathname: + self.gui_replaced[event.cookie] = None + elif event.pathname in self.temp_files: del self.temp_files[event.pathname] self.temp_files[event.cookie] = event.pathname elif event.pathname in self.renamed_files: @@ -240,13 +243,16 @@ class AirtimeProcessEvent(ProcessEvent): self.moved_files[event.cookie] = event.pathname def process_IN_MOVED_TO(self, event): - #self.logger.info("%s: %s", event.maskname, event.pathname) + self.logger.info("%s: %s", event.maskname, event.pathname) #if stuff dropped in stor via a UI move must change file permissions. self.set_needed_file_permissions(event.pathname, event.dir) if not event.dir: if event.cookie in self.temp_files: del self.temp_files[event.cookie] self.file_events.append({'filepath': event.pathname, 'mode': self.config.MODE_MODIFY}) + elif event.cookie in self.gui_replaced: + del self.gui_replaced[event.cookie] + self.file_events.append({'filepath': event.pathname, 'mode': self.config.MODE_MODIFY}) elif event.cookie in self.moved_files: old_filepath = self.moved_files[event.cookie] del self.moved_files[event.cookie] From 2163efc1be1a2101bbed3cd14ffc6d15ecdc4ce8 Mon Sep 17 00:00:00 2001 From: james Date: Tue, 28 Jun 2011 12:47:54 -0400 Subject: [PATCH 4/4] CC-2425:Tweaks to phone home metrics - In order for the user to click the "Yes, Help Airtime" button, both "send support feedback" AND "privacy policy" should be checked --- airtime_mvc/public/js/airtime/nowplaying/register.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/nowplaying/register.js b/airtime_mvc/public/js/airtime/nowplaying/register.js index d2b4fb18b..f55a58559 100644 --- a/airtime_mvc/public/js/airtime/nowplaying/register.js +++ b/airtime_mvc/public/js/airtime/nowplaying/register.js @@ -1,5 +1,6 @@ $(document).ready(function(){ var dialogGlob; + $.get("/Preference/register", {format:"json"}, function(json){ var dialog = $(json.dialog); dialogGlob = dialog; @@ -51,12 +52,18 @@ $(document).ready(function(){ $("#SupportFeedback").live('click', function(){ var pub = $("#Publicise"); + var privacy = $("#Privacy"); + var button = $("#help_airtime"); if( !$(this).is(':checked') ){ pub.removeAttr("checked"); pub.attr("disabled", true); $("#public-info").hide(); + button.attr('disabled', 'disabled' ).addClass('ui-state-disabled'); }else{ pub.removeAttr("disabled"); + if(privacy.is(':checked')){ + button.removeAttr('disabled').removeClass('ui-state-disabled'); + } } }); @@ -69,8 +76,9 @@ $(document).ready(function(){ }); $("#Privacy").live('click', function(){ + var support = $("#SupportFeedback"); var button = $("#help_airtime"); - if($(this).is(':checked')){ + if($(this).is(':checked') && support.is(':checked')){ button.removeAttr('disabled').removeClass('ui-state-disabled'); }else{ button.attr('disabled', 'disabled' ).addClass('ui-state-disabled');