From 855df9536149fc2a8751b02c9e25d95fc2a00c1c Mon Sep 17 00:00:00 2001 From: martin Date: Tue, 19 Jul 2011 16:35:19 -0400 Subject: [PATCH] CC-2568: Upgrade script fails -fixed --- .../airtime-1.9.0/airtime-upgrade.php | 11 +- .../airtimefilemonitor/__init__.py | 0 .../airtimefilemonitor/airtimemetadata.py | 155 ++++++++++++++++++ .../airtime-1.9.0/media-monitor-upgrade.py | 2 +- 4 files changed, 163 insertions(+), 5 deletions(-) create mode 100644 install/upgrades/airtime-1.9.0/airtimefilemonitor/__init__.py create mode 100644 install/upgrades/airtime-1.9.0/airtimefilemonitor/airtimemetadata.py diff --git a/install/upgrades/airtime-1.9.0/airtime-upgrade.php b/install/upgrades/airtime-1.9.0/airtime-upgrade.php index ae6b7b88b..057b3cde6 100644 --- a/install/upgrades/airtime-1.9.0/airtime-upgrade.php +++ b/install/upgrades/airtime-1.9.0/airtime-upgrade.php @@ -559,7 +559,7 @@ class Airtime190Upgrade{ echo $sql.PHP_EOL; $rows = Airtime190Upgrade::execSqlQuery($sql); - echo "Creating media-monitor log file"; + echo "Creating media-monitor log file".PHP_EOL; mkdir("/var/log/airtime/media-monitor/", 755, true); touch("/var/log/airtime/media-monitor/media-monitor.log"); @@ -570,9 +570,12 @@ class Airtime190Upgrade{ AirtimeIni::UpdateIniValue(AirtimeIni::CONF_FILE_MEDIAMONITOR, "api_key", $values["general"]["api_key"]); - echo "Reorganizing files in stor directory"; - $mediaMonitorUpgradePath = realpath(__DIR__."/../../../python_apps/media-monitor/media-monitor-upgrade.py"); - exec("su -c \"python $mediaMonitorUpgradePath\"", $output); + echo "Reorganizing files in stor directory".PHP_EOL; + + $cwd = __DIR__; + $mediaMonitorUpgradePath = __DIR__."/media-monitor-upgrade.py"; + $command = "cd $cwd && su -c \"python $mediaMonitorUpgradePath\""; + exec($command, $output); print_r($output); $oldAndNewFileNames = json_decode($output[0]); diff --git a/install/upgrades/airtime-1.9.0/airtimefilemonitor/__init__.py b/install/upgrades/airtime-1.9.0/airtimefilemonitor/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/install/upgrades/airtime-1.9.0/airtimefilemonitor/airtimemetadata.py b/install/upgrades/airtime-1.9.0/airtimefilemonitor/airtimemetadata.py new file mode 100644 index 000000000..d1a984cb9 --- /dev/null +++ b/install/upgrades/airtime-1.9.0/airtimefilemonitor/airtimemetadata.py @@ -0,0 +1,155 @@ +import os +import hashlib +import mutagen +import logging +import math + +""" +list of supported easy tags in mutagen version 1.20 +['albumartistsort', 'musicbrainz_albumstatus', 'lyricist', 'releasecountry', 'date', 'performer', 'musicbrainz_albumartistid', 'composer', 'encodedby', 'tracknumber', 'musicbrainz_albumid', 'album', 'asin', 'musicbrainz_artistid', 'mood', 'copyright', 'author', 'media', 'length', 'version', 'artistsort', 'titlesort', 'discsubtitle', 'website', 'musicip_fingerprint', 'conductor', 'compilation', 'barcode', 'performer:*', 'composersort', 'musicbrainz_discid', 'musicbrainz_albumtype', 'genre', 'isrc', 'discnumber', 'musicbrainz_trmid', 'replaygain_*_gain', 'musicip_puid', 'artist', 'title', 'bpm', 'musicbrainz_trackid', 'arranger', 'albumsort', 'replaygain_*_peak', 'organization'] +""" + +class AirtimeMetadata: + + def __init__(self): + + self.airtime2mutagen = {\ + "MDATA_KEY_TITLE": "title",\ + "MDATA_KEY_CREATOR": "artist",\ + "MDATA_KEY_SOURCE": "album",\ + "MDATA_KEY_GENRE": "genre",\ + "MDATA_KEY_MOOD": "mood",\ + "MDATA_KEY_TRACKNUMBER": "tracknumber",\ + "MDATA_KEY_BPM": "bpm",\ + "MDATA_KEY_LABEL": "organization",\ + "MDATA_KEY_COMPOSER": "composer",\ + "MDATA_KEY_ENCODER": "encodedby",\ + "MDATA_KEY_CONDUCTOR": "conductor",\ + "MDATA_KEY_YEAR": "date",\ + "MDATA_KEY_URL": "website",\ + "MDATA_KEY_ISRC": "isrc",\ + "MDATA_KEY_COPYRIGHT": "copyright",\ + } + + self.mutagen2airtime = {\ + "title": "MDATA_KEY_TITLE",\ + "artist": "MDATA_KEY_CREATOR",\ + "album": "MDATA_KEY_SOURCE",\ + "genre": "MDATA_KEY_GENRE",\ + "mood": "MDATA_KEY_MOOD",\ + "tracknumber": "MDATA_KEY_TRACKNUMBER",\ + "bpm": "MDATA_KEY_BPM",\ + "organization": "MDATA_KEY_LABEL",\ + "composer": "MDATA_KEY_COMPOSER",\ + "encodedby": "MDATA_KEY_ENCODER",\ + "conductor": "MDATA_KEY_CONDUCTOR",\ + "date": "MDATA_KEY_YEAR",\ + "website": "MDATA_KEY_URL",\ + "isrc": "MDATA_KEY_ISRC",\ + "copyright": "MDATA_KEY_COPYRIGHT",\ + } + + self.logger = logging.getLogger() + + def get_md5(self, filepath): + f = open(filepath, 'rb') + m = hashlib.md5() + m.update(f.read()) + md5 = m.hexdigest() + + return md5 + + ## mutagen_length is in seconds with the format (d+).dd + ## return format hh:mm:ss.uuu + def format_length(self, mutagen_length): + t = float(mutagen_length) + h = int(math.floor(t/3600)) + t = t % 3600 + m = int(math.floor(t/60)) + + s = t % 60 + # will be ss.uuu + s = str(s) + seconds = s.split(".") + s = seconds[0] + + # have a maximum of 6 subseconds. + if len(seconds[1]) >= 6: + ss = seconds[1][0:6] + else: + ss = seconds[1][0:] + + length = "%s:%s:%s.%s" % (h, m, s, ss) + + return length + + def save_md_to_file(self, m): + try: + airtime_file = mutagen.File(m['MDATA_KEY_FILEPATH'], easy=True) + + for key in m.keys() : + if key in self.airtime2mutagen: + value = m[key] + if ((value is not None) and (len(str(value)) > 0)): + airtime_file[self.airtime2mutagen[key]] = str(value) + + + airtime_file.save() + except Exception, e: + self.logger.error('Trying to save md') + self.logger.error('Exception: %s', e) + self.logger.error('Filepath %s', m['MDATA_KEY_FILEPATH']) + + def get_md_from_file(self, filepath): + + self.logger.info("getting info from filepath %s", filepath) + + try: + md = {} + md5 = self.get_md5(filepath) + md['MDATA_KEY_MD5'] = md5 + + file_info = mutagen.File(filepath, easy=True) + + except Exception, e: + self.logger.error("failed getting metadata from %s", filepath) + self.logger.error("Exception %s", e) + return None + + + self.logger.info(file_info) + + #check if file has any metadata + if file_info is not None: + for key in file_info.keys() : + if key in self.mutagen2airtime : + md[self.mutagen2airtime[key]] = file_info[key][0] + + if 'MDATA_KEY_TITLE' not in md: + #get rid of file extention from original name, name might have more than 1 '.' in it. + original_name = os.path.basename(filepath) + original_name = original_name.split(".")[0:-1] + original_name = ''.join(original_name) + md['MDATA_KEY_TITLE'] = original_name + + #incase track number is in format u'4/11' + if 'MDATA_KEY_TRACKNUMBER' in md: + if isinstance(md['MDATA_KEY_TRACKNUMBER'], basestring): + md['MDATA_KEY_TRACKNUMBER'] = md['MDATA_KEY_TRACKNUMBER'].split("/")[0] + + md['MDATA_KEY_BITRATE'] = file_info.info.bitrate + md['MDATA_KEY_SAMPLERATE'] = file_info.info.sample_rate + md['MDATA_KEY_DURATION'] = self.format_length(file_info.info.length) + md['MDATA_KEY_MIME'] = file_info.mime[0] + + if "mp3" in md['MDATA_KEY_MIME']: + md['MDATA_KEY_FTYPE'] = "audioclip" + elif "vorbis" in md['MDATA_KEY_MIME']: + md['MDATA_KEY_FTYPE'] = "audioclip" + + #do this so object can be urlencoded properly. + for key in md.keys(): + if(isinstance(md[key], basestring)): + md[key] = md[key].encode('utf-8') + + return md diff --git a/install/upgrades/airtime-1.9.0/media-monitor-upgrade.py b/install/upgrades/airtime-1.9.0/media-monitor-upgrade.py index bf1ce3152..6dce39c26 100644 --- a/install/upgrades/airtime-1.9.0/media-monitor-upgrade.py +++ b/install/upgrades/airtime-1.9.0/media-monitor-upgrade.py @@ -12,7 +12,7 @@ import os.path # configure logging try: - logging.config.fileConfig("%s/logging.cfg"%os.path.dirname(__file__)) + logging.config.fileConfig("logging.cfg") except Exception, e: print 'Error configuring logging: ', e sys.exit(1)