Huge amount of work to (mostly) allow .ogg (and maybe other) formats to skip transcode

- 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!
This commit is contained in:
Christopher Allan Webber 2013-03-02 19:06:31 -06:00
parent fd693e368b
commit ddbf6af1e2
7 changed files with 32 additions and 17 deletions

View File

@ -126,24 +126,30 @@ class MediaEntryMixin(object):
""" """
return cleaned_markdown_conversion(self.description) return cleaned_markdown_conversion(self.description)
def get_display_media(self, media_map, def get_display_media(self, fetch_order=None):
fetch_order=common.DISPLAY_IMAGE_FETCHING_ORDER):
""" """
Find the best media for display. Find the best media for display.
Args: Args:
- media_map: a dict like - fetch_order: the order we should try fetching images in.
{u'image_size': [u'dir1', u'dir2', u'image.jpg']} If this isn't supplied, we try checking
- fetch_order: the order we should try fetching images in self.media_data.fetching_order if it exists.
Returns: 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: if media_size in media_sizes:
return media_map[media_size] return media_size, self.media_files[media_size]
def main_mediafile(self): def main_mediafile(self):
pass pass

View File

@ -25,4 +25,8 @@ MEDIA_MANAGER = {
"sniff_handler": sniff_handler, "sniff_handler": sniff_handler,
"display_template": "mediagoblin/media_displays/image.html", "display_template": "mediagoblin/media_displays/image.html",
"default_thumb": "images/media_thumbs/image.png", "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'],
}

View File

@ -26,4 +26,8 @@ MEDIA_MANAGER = {
"display_template": "mediagoblin/media_displays/video.html", "display_template": "mediagoblin/media_displays/video.html",
"default_thumb": "images/media_thumbs/video.jpg", "default_thumb": "images/media_thumbs/video.jpg",
"accepted_extensions": [ "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'],
}

View File

@ -23,7 +23,7 @@
{% set model_download = request.app.public_store.file_url( {% 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( {% set perspective_view = request.app.public_store.file_url(
media.media_files['perspective']) %} media.media_files['perspective']) %}
{% set top_view = request.app.public_store.file_url( {% set top_view = request.app.public_store.file_url(

View File

@ -33,7 +33,7 @@
data-setup='{"height": {{ media.media_data.height }}, data-setup='{"height": {{ media.media_data.height }},
"width": {{ media.media_data.width }} }'> "width": {{ media.media_data.width }} }'>
<source src="{{ request.app.public_store.file_url( <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;" /> type="video/webm; codecs=&quot;vp8, vorbis&quot;" />
<div class="no_html5"> <div class="no_html5">
{%- trans -%}Sorry, this video will not work because {%- trans -%}Sorry, this video will not work because
@ -53,7 +53,9 @@
<li><a href="{{ request.app.public_store.file_url( <li><a href="{{ request.app.public_store.file_url(
media.media_files.original) }}">{% trans %}Original file{% endtrans %}</a> media.media_files.original) }}">{% trans %}Original file{% endtrans %}</a>
{% endif %} {% endif %}
<li><a href="{{ request.app.public_store.file_url( {% if 'webm_640' in media.media_files %}
media.media_files.webm_640) }}">{% trans %}WebM file (640p; VP8/Vorbis){% endtrans %}</a> <li><a href="{{ request.app.public_store.file_url(
media.media_files.webm_640) }}">{% trans %}WebM file (640p; VP8/Vorbis){% endtrans %}</a>
{% endif %}
</ul> </ul>
{% endblock %} {% endblock %}

View File

@ -47,7 +47,7 @@
<div class="media_image_container"> <div class="media_image_container">
{% block mediagoblin_media %} {% block mediagoblin_media %}
{% set display_media = request.app.public_store.file_url( {% 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 {# if there's a medium file size, that means the medium size
# isn't the original... so link to the original! # isn't the original... so link to the original!
#} #}

View File

@ -16,7 +16,6 @@
import sys import sys
DISPLAY_IMAGE_FETCHING_ORDER = [u'medium', u'original', u'thumb']
global TESTS_ENABLED global TESTS_ENABLED
TESTS_ENABLED = False TESTS_ENABLED = False