aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Allan Webber <cwebber@dustycloud.org>2011-07-16 16:28:12 -0500
committerChristopher Allan Webber <cwebber@dustycloud.org>2011-07-16 16:28:12 -0500
commit5f72a4c3314a6e6c0d05d916f380557fdf744d57 (patch)
tree1e6958635f398cf29089a082bd62727bcdf11ff1
parent8e9331c1069e5c5bcf1b8d68b59eeff63123fd14 (diff)
parent380ac094f6ebcf7b457d98a86ac7cc0af2347ba4 (diff)
downloadmediagoblin-5f72a4c3314a6e6c0d05d916f380557fdf744d57.tar.lz
mediagoblin-5f72a4c3314a6e6c0d05d916f380557fdf744d57.tar.xz
mediagoblin-5f72a4c3314a6e6c0d05d916f380557fdf744d57.zip
Merge remote branch 'remotes/jwandborg/feature_400-resize_images_to_fit_page'
Conflicts: mediagoblin/db/migrations.py mediagoblin/db/models.py mediagoblin/process_media/__init__.py mediagoblin/templates/mediagoblin/user_pages/media.html mediagoblin/util.py
-rw-r--r--mediagoblin/db/models.py22
-rw-r--r--mediagoblin/process_media/__init__.py33
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media.html9
-rw-r--r--mediagoblin/util.py2
4 files changed, 46 insertions, 20 deletions
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py
index ba8162ed..9d7bcf6b 100644
--- a/mediagoblin/db/models.py
+++ b/mediagoblin/db/models.py
@@ -21,7 +21,11 @@ from mongokit import Document
from mediagoblin import util
from mediagoblin.auth import lib as auth_lib
from mediagoblin import mg_globals
+from mediagoblin.db import migrations
from mediagoblin.db.util import ASCENDING, DESCENDING, ObjectId
+from mediagoblin.util import Pagination
+from mediagoblin.util import DISPLAY_IMAGE_FETCHING_ORDER
+
###################
# Custom validators
@@ -108,6 +112,24 @@ class MediaEntry(Document):
return self.db.MediaComment.find({
'media_entry': self['_id']}).sort('created', DESCENDING)
+ def get_display_media(self, media_map, fetch_order=DISPLAY_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()
+
+ for media_size in DISPLAY_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 da3e887e..125b24e0 100644
--- a/mediagoblin/process_media/__init__.py
+++ b/mediagoblin/process_media/__init__.py
@@ -57,36 +57,43 @@ def process_media_initial(media_id):
thumb.save(thumb_file, "JPEG", quality=90)
"""
- 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", quality=90)
+ 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", quality=90)
+ medium_processed = True
# we have to re-read because unlike PIL, not everything reads
# things in string representation :)
queued_file = file(queued_filename, 'rb')
with queued_file:
- main_filepath = create_pub_filepath(entry, queued_filepath[-1])
+ original_filepath = create_pub_filepath(entry, queued_filepath[-1])
- with mgg.public_store.get_file(main_filepath, 'wb') as main_file:
- main_file.write(queued_file.read())
+ with mgg.public_store.get_file(original_filepath, 'wb') as original_file:
+ original_file.write(queued_file.read())
mgg.queue_store.delete_file(queued_filepath)
entry['queued_media_file'] = []
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
+ media_files_dict['original'] = original_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 3f4dce3b..dc0b6210 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media.html
@@ -23,13 +23,8 @@
{% block mediagoblin_content %}
{% if media %}
<div class="grid_11 alpha">
- {% if media.media_files.medium %}
- <img src="{{ request.app.public_store.file_url(
- media.media_files.medium) }}" />
- {% else %}
- <img 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)) }}" />
<h2>
{{media.title}}
diff --git a/mediagoblin/util.py b/mediagoblin/util.py
index 9c4d024a..1892378c 100644
--- a/mediagoblin/util.py
+++ b/mediagoblin/util.py
@@ -39,6 +39,8 @@ from mediagoblin.db.util import ObjectId
from itertools import izip, count
+DISPLAY_IMAGE_FETCHING_ORDER = [u'medium', u'original', u'thumb']
+
TESTS_ENABLED = False
def _activate_testing():
"""