Created
July 3, 2011 02:19
-
-
Save joar/1061889 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py | |
index bf825a2..a2b5b72 100644 | |
--- a/mediagoblin/db/models.py | |
+++ b/mediagoblin/db/models.py | |
@@ -24,6 +24,7 @@ from mediagoblin import mg_globals | |
from mediagoblin.db import migrations | |
from mediagoblin.db.util import DESCENDING, ObjectId | |
from mediagoblin.util import Pagination | |
+from mediagoblin.util import IMAGE_FETCHING_ORDER | |
################### | |
# Custom validators | |
@@ -109,6 +110,24 @@ class MediaEntry(Document): | |
migration_handler = migrations.MediaEntryMigration | |
+ def get_display_media(self, media_map, fetch_order=IMAGE_FETCHING_ORDER): | |
+ """ | |
+ 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 | |
+ | |
+ Returns: | |
+ (media_size, media_path) | |
+ """ | |
+ media_sizes = media_map.keys() | |
+ print media_sizes | |
+ for media_size in IMAGE_FETCHING_ORDER: | |
+ if media_size in media_sizes: | |
+ return media_map[media_size] | |
+ | |
def main_mediafile(self): | |
pass | |
diff --git a/mediagoblin/process_media/__init__.py b/mediagoblin/process_media/__init__.py | |
index 0d1abcb..9b8171c 100644 | |
--- a/mediagoblin/process_media/__init__.py | |
+++ b/mediagoblin/process_media/__init__.py | |
@@ -57,19 +57,25 @@ def process_media_initial(media_id): | |
thumb.save(thumb_file, "JPEG") | |
""" | |
- Create medium file, used in `media.html` | |
+ If the size of the original file exceeds the specified size of a `medium` | |
+ file, a `medium.jpg` files is created and later associated with the media | |
+ entry. | |
""" | |
medium = Image.open(queued_filename) | |
- medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS) | |
+ medium_processed = False | |
- if medium.mode != "RGB": | |
- medium = medium.convert("RGB") | |
+ if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]: | |
+ medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS) | |
- medium_filepath = create_pub_filepath(entry, 'medium.jpg') | |
+ if medium.mode != "RGB": | |
+ medium = medium.convert("RGB") | |
- medium_file = mgg.public_store.get_file(medium_filepath, 'w') | |
- with medium_file: | |
- medium.save(medium_file, "JPEG") | |
+ medium_filepath = create_pub_filepath(entry, 'medium.jpg') | |
+ | |
+ medium_file = mgg.public_store.get_file(medium_filepath, 'w') | |
+ with medium_file: | |
+ medium.save(medium_file, "JPEG") | |
+ medium_processed = True | |
# we have to re-read because unlike PIL, not everything reads | |
# things in string representation :) | |
@@ -86,7 +92,8 @@ def process_media_initial(media_id): | |
media_files_dict = entry.setdefault('media_files', {}) | |
media_files_dict['thumb'] = thumb_filepath | |
media_files_dict['main'] = main_filepath | |
- media_files_dict['medium'] = medium_filepath | |
+ if medium_processed: | |
+ media_files_dict['medium'] = medium_filepath | |
entry['state'] = u'processed' | |
entry.save() | |
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html | |
index e16f1e0..56d7966 100644 | |
--- a/mediagoblin/templates/mediagoblin/user_pages/media.html | |
+++ b/mediagoblin/templates/mediagoblin/user_pages/media.html | |
@@ -26,13 +26,8 @@ | |
<h1> | |
{{media.title}} | |
</h1> | |
- {% if media.media_files.medium %} | |
- <img class="media_image" src="{{ request.app.public_store.file_url( | |
- media.media_files.medium) }}" /> | |
- {% else %} | |
- <img class="media_image" src="{{ request.app.public_store.file_url( | |
- media.media_files.main) }}" /> | |
- {% endif %} | |
+ <img class="media_image" src="{{ request.app.public_store.file_url( | |
+ media.get_display_media(media.media_files)) }}" /> | |
<p> | |
Uploaded on | |
{{ "%4d-%02d-%02d"|format(media.created.year, | |
diff --git a/mediagoblin/util.py b/mediagoblin/util.py | |
index a20e87c..2698fb6 100644 | |
--- a/mediagoblin/util.py | |
+++ b/mediagoblin/util.py | |
@@ -35,6 +35,8 @@ from mediagoblin import mg_globals | |
from mediagoblin import messages | |
from mediagoblin.db.util import ObjectId | |
+IMAGE_FETCHING_ORDER = [u'medium', u'main', u'thumb'] | |
+ | |
TESTS_ENABLED = False | |
def _activate_testing(): | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment