From 1816be156f8971283d043e5aabcd9733f885dce8 Mon Sep 17 00:00:00 2001 From: Duncan Sommerville Date: Thu, 16 Jul 2015 16:26:52 -0400 Subject: [PATCH] SAAS-922 - change file extensions in pypo based on mime-type, update lists of accepted mime types --- .../application/common/FileDataHelper.php | 33 ++++++++++--------- .../public/js/airtime/library/plupload.js | 2 +- python_apps/pypo/pypo/mime.types | 17 ++++++++++ python_apps/pypo/pypo/pypofetch.py | 17 +++++++++- python_apps/pypo/setup.py | 2 +- 5 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 python_apps/pypo/pypo/mime.types diff --git a/airtime_mvc/application/common/FileDataHelper.php b/airtime_mvc/application/common/FileDataHelper.php index 2c5648f9f..25318333b 100644 --- a/airtime_mvc/application/common/FileDataHelper.php +++ b/airtime_mvc/application/common/FileDataHelper.php @@ -4,22 +4,23 @@ class FileDataHelper { public static function getAudioMimeTypeArray() { return array( - "audio/ogg" => "ogg", - "application/ogg" => "ogg", - "audio/vorbis" => "ogg", - "audio/mp3" => "mp3", - "audio/mpeg" => "mp3", - "audio/mpeg3" => "mp3", - "audio/aac" => "aac", - "audio/aacp" => "aac", - "audio/mp4" => "mp4", - "audio/x-flac" => "flac", - "audio/wav" => "wav", - "audio/x-wav" => "wav", - "audio/mp2" => "mp2", - "audio/mp1" => "mp1", - "audio/x-ms-wma" => "wma", - "audio/basic" => "au", + "audio/ogg" => "ogg", + "application/ogg" => "ogg", + "audio/vorbis" => "ogg", + "audio/mp3" => "mp3", + "audio/mpeg" => "mp3", + "audio/mpeg3" => "mp3", + "audio/x-aac" => "aac", + "audio/aac" => "aac", + "audio/aacp" => "aac", + "audio/mp4" => "mp4", + "audio/x-flac" => "flac", + "audio/wav" => "wav", + "audio/x-wav" => "wav", + "audio/mp2" => "mp2", + "audio/mp1" => "mp1", + "audio/x-ms-wma" => "wma", + "audio/basic" => "au", ); } diff --git a/airtime_mvc/public/js/airtime/library/plupload.js b/airtime_mvc/public/js/airtime/library/plupload.js index ef5e7d1f1..11e9823f3 100644 --- a/airtime_mvc/public/js/airtime/library/plupload.js +++ b/airtime_mvc/public/js/airtime/library/plupload.js @@ -22,7 +22,7 @@ $(document).ready(function() { unique_names : 'true', multiple_queues : 'true', filters : [ - {title: "Audio Files", extensions: "ogg,mp3,oga,flac,wav,m4a,mp4,opus"} + {title: "Audio Files", extensions: "ogg,mp3,oga,flac,wav,m4a,mp4,opus,aac,oga,mp1,mp2,wma,au"} ], multipart_params : { "csrf_token" : $("#csrf").attr('value'), diff --git a/python_apps/pypo/pypo/mime.types b/python_apps/pypo/pypo/mime.types new file mode 100644 index 000000000..9f05f6b44 --- /dev/null +++ b/python_apps/pypo/pypo/mime.types @@ -0,0 +1,17 @@ +audio/ogg ogg +application/ogg ogg +audio/vorbis ogg +audio/mp3 mp3 +audio/mpeg mp3 +audio/mpeg3 mp3 +audio/x-aac aac +audio/aac aac +audio/aacp aac +audio/mp4 mp4 +audio/x-flac flac +audio/wav wav +audio/x-wav wav +audio/mp2 mp2 +audio/mp1 mp1 +audio/x-ms-wma wma +audio/basic au diff --git a/python_apps/pypo/pypo/pypofetch.py b/python_apps/pypo/pypo/pypofetch.py index 598d2abbc..c6fcd2468 100644 --- a/python_apps/pypo/pypo/pypofetch.py +++ b/python_apps/pypo/pypo/pypofetch.py @@ -12,7 +12,7 @@ import signal from datetime import datetime import traceback import pure - +import mimetypes from Queue import Empty from threading import Thread, Timer from subprocess import Popen, PIPE @@ -377,6 +377,21 @@ class PypoFetch(Thread): start = datetime.strptime(media_item['start'], "%Y-%m-%d-%H-%M-%S") end = datetime.strptime(media_item['end'], "%Y-%m-%d-%H-%M-%S") + root, ext = os.path.splitext(media_item['uri']) + mime = media_item['metadata']['mime'] + mimetypes.init() + mime_ext = mimetypes.guess_extension(mime, strict=False) + + if mime_ext is None: + mimes = mimetypes.read_mime_types("%s/mime.types" % os.path.dirname(os.path.realpath(__file__))) + for k, v in mimes.iteritems(): + if v == mime: + mime_ext = k + + if mime_ext is not None and mime_ext != ext: + self.logger.info("Invalid extension %s for file %s, changing to %s" % (ext, root, mime_ext)) + media_item['uri'] = root + mime_ext + length1 = pure.date_interval_to_seconds(end - start) length2 = media_item['cue_out'] - media_item['cue_in'] diff --git a/python_apps/pypo/setup.py b/python_apps/pypo/setup.py index 76011e72d..a5b33b74d 100644 --- a/python_apps/pypo/setup.py +++ b/python_apps/pypo/setup.py @@ -39,7 +39,7 @@ setup(name='airtime-playout', license='AGPLv3', packages=['pypo', 'pypo.media', 'pypo.media.update', 'liquidsoap', 'liquidsoap.library'], - package_data={'': ['*.liq', '*.cfg']}, + package_data={'': ['*.liq', '*.cfg', '*.types']}, scripts=[ 'bin/airtime-playout', 'bin/airtime-liquidsoap',