diff options
author | Christopher Allan Webber <cwebber@dustycloud.org> | 2011-07-16 16:28:12 -0500 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2011-07-16 16:28:12 -0500 |
commit | 5f72a4c3314a6e6c0d05d916f380557fdf744d57 (patch) | |
tree | 1e6958635f398cf29089a082bd62727bcdf11ff1 | |
parent | 8e9331c1069e5c5bcf1b8d68b59eeff63123fd14 (diff) | |
parent | 380ac094f6ebcf7b457d98a86ac7cc0af2347ba4 (diff) | |
download | mediagoblin-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.py | 22 | ||||
-rw-r--r-- | mediagoblin/process_media/__init__.py | 33 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/user_pages/media.html | 9 | ||||
-rw-r--r-- | mediagoblin/util.py | 2 |
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(): """ |