Huge amount of work to (mostly) allow .ogg (and maybe other) formats to skip transcode
authorChristopher Allan Webber <cwebber@dustycloud.org>
Sun, 3 Mar 2013 01:06:31 +0000 (19:06 -0600)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sun, 3 Mar 2013 01:06:31 +0000 (19:06 -0600)
 - Update get_display_media in several ways:
   - now uses the media type's own declaration of the order of things
   - returns both the media_size and the media_path, as per the docstring
   - implicitly uses self.media_files as opposed to forcing you to pass it in
 - update videos to use get_display_media
 - update images to declare media_fetch_order in the media manager (videos also)
 - update stl to use media.media_files['original'] instead of weird
   use of get_display_media
 - update sidebar to only conditionally show webm_640

TODO still: identify video type information *during* processing, show
that in the <video><source /></video> element.

This commit sponsored by Nathan Yergler.  Thanks, nyergler!

mediagoblin/db/mixin.py
mediagoblin/media_types/image/__init__.py
mediagoblin/media_types/video/__init__.py
mediagoblin/templates/mediagoblin/media_displays/stl.html
mediagoblin/templates/mediagoblin/media_displays/video.html
mediagoblin/templates/mediagoblin/user_pages/media.html
mediagoblin/tools/common.py

index 6789a970769453ef7f34d1f95a0aadb54903cc54..c4bd806c73c3ffb026213f9ef2655fe1f92b2063 100644 (file)
@@ -126,24 +126,30 @@ class MediaEntryMixin(object):
         """
         return cleaned_markdown_conversion(self.description)
 
-    def get_display_media(self, media_map,
-                          fetch_order=common.DISPLAY_IMAGE_FETCHING_ORDER):
+    def get_display_media(self, fetch_order=None):
         """
         Find the best media for display.
 
         Args:
-        - media_map: a dict like
-          {u'image_size': [u'dir1', u'dir2', u'image.jpg']}
-        - fetch_order: the order we should try fetching images in
+        - fetch_order: the order we should try fetching images in.
+            If this isn't supplied, we try checking
+            self.media_data.fetching_order if it exists.
 
         Returns:
-        (media_size, media_path)
+          (media_size, media_path)
+          or, if not found, None.
         """
-        media_sizes = media_map.keys()
+        fetch_order = self.media_manager.get("media_fetch_order")
 
-        for media_size in common.DISPLAY_IMAGE_FETCHING_ORDER:
+        # No fetching order found?  well, give up!
+        if not fetch_order:
+            return None
+
+        media_sizes = self.media_files.keys()
+
+        for media_size in fetch_order:
             if media_size in media_sizes:
-                return media_map[media_size]
+                return media_size, self.media_files[media_size]
 
     def main_mediafile(self):
         pass
index 36d7c2019a5a222e587c8f74095db6c7e6d9ae1b..3e167db1f74b7bd7d19a82c21d3a6c04ad4c19c3 100644 (file)
@@ -25,4 +25,8 @@ MEDIA_MANAGER = {
     "sniff_handler": sniff_handler,
     "display_template": "mediagoblin/media_displays/image.html",
     "default_thumb": "images/media_thumbs/image.png",
-    "accepted_extensions": ["jpg", "jpeg", "png", "gif", "tiff"]}
+    "accepted_extensions": ["jpg", "jpeg", "png", "gif", "tiff"],
+
+    # Used by the media_entry.get_display_media method
+    "media_fetch_order": [u'medium', u'original', u'thumb'],
+}
index 3faa5b9fad70e7a78b81cfe243836699ddd2fa77..fd364c027ba7ce7b20593d04989cc56b0b35a19f 100644 (file)
@@ -26,4 +26,8 @@ MEDIA_MANAGER = {
     "display_template": "mediagoblin/media_displays/video.html",
     "default_thumb": "images/media_thumbs/video.jpg",
     "accepted_extensions": [
-        "mp4", "mov", "webm", "avi", "3gp", "3gpp", "mkv", "ogv", "m4v"]}
+        "mp4", "mov", "webm", "avi", "3gp", "3gpp", "mkv", "ogv", "m4v"],
+
+    # Used by the media_entry.get_display_media method
+    "media_fetch_order": [u'webm_640', u'original'],
+}
index 043faac87012de01c2803f09dab3db87d1ca1302..a89e0b4fe72bff8c13e1d6d4248e0a43e3fc5afa 100644 (file)
@@ -23,7 +23,7 @@
 
 
 {% set model_download = request.app.public_store.file_url(
-   media.get_display_media(media.media_files)) %}
+   media.media_files['original']) %}
 {% set perspective_view = request.app.public_store.file_url(
    media.media_files['perspective']) %}
 {% set top_view = request.app.public_store.file_url(
index 9eeb7c8514a4341db55b5c7386f802d90454352c..2e33e1a363dc743ba2aafbc62adbe620abeab6a4 100644 (file)
@@ -33,7 +33,7 @@
       data-setup='{"height": {{ media.media_data.height }},
                  "width": {{ media.media_data.width }} }'>
     <source src="{{ request.app.public_store.file_url(
-          media.media_files['webm_640']) }}"
+                        media.get_display_media()[1]) }}"
             type="video/webm; codecs=&quot;vp8, vorbis&quot;" />
     <div class="no_html5">
       {%- trans -%}Sorry, this video will not work because
@@ -53,7 +53,9 @@
       <li><a href="{{ request.app.public_store.file_url(
                        media.media_files.original) }}">{% trans %}Original file{% endtrans %}</a>
     {% endif %}
-    <li><a href="{{ request.app.public_store.file_url(
-                     media.media_files.webm_640) }}">{% trans %}WebM file (640p; VP8/Vorbis){% endtrans %}</a>
+    {% if 'webm_640' in media.media_files %}
+      <li><a href="{{ request.app.public_store.file_url(
+                       media.media_files.webm_640) }}">{% trans %}WebM file (640p; VP8/Vorbis){% endtrans %}</a>
+    {% endif %}
   </ul>
 {% endblock %}
index f151c5773a9616c3b8d0023874d324f0cd5146d5..b77c12b9bcae377eb007dfa93e907b6e5de9f289 100644 (file)
@@ -47,7 +47,7 @@
     <div class="media_image_container">
       {% block mediagoblin_media %}
         {% set display_media = request.app.public_store.file_url(
-                 media.get_display_media(media.media_files)) %}
+                 media.get_display_media()[1]) %}
         {# if there's a medium file size, that means the medium size
          #  isn't the original... so link to the original!
          #}
index c9f9d0324808a79c5fdb12a6e8d9b3e59b31a177..34586611cd38a9c8c5172741af76080651022f57 100644 (file)
@@ -16,7 +16,6 @@
 
 import sys
 
-DISPLAY_IMAGE_FETCHING_ORDER = [u'medium', u'original', u'thumb']
 
 global TESTS_ENABLED
 TESTS_ENABLED = False