Merge remote branch 'remotes/jwandborg/feature_400-resize_images_to_fit_page'
authorChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 16 Jul 2011 21:28:12 +0000 (16:28 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 16 Jul 2011 21:28:12 +0000 (16:28 -0500)
Conflicts:
mediagoblin/db/migrations.py
mediagoblin/db/models.py
mediagoblin/process_media/__init__.py
mediagoblin/templates/mediagoblin/user_pages/media.html
mediagoblin/util.py

1  2 
mediagoblin/db/models.py
mediagoblin/process_media/__init__.py
mediagoblin/templates/mediagoblin/user_pages/media.html
mediagoblin/util.py

index ba8162ed0193e8ba5c14be9c4e6c67617ad779ee,2d6a71f7892e32bb6b8dc8f8d7b88b38222c5ee9..9d7bcf6bbfe738cafd7634e88e53b9b7b253e04f
@@@ -21,8 -21,11 +21,12 @@@ from mongokit import Documen
  from mediagoblin import util
  from mediagoblin.auth import lib as auth_lib
  from mediagoblin import mg_globals
 -from mediagoblin.db.util import DESCENDING, ObjectId
+ 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
  ###################
@@@ -104,13 -108,44 +108,31 @@@ class MediaEntry(Document)
          'created': datetime.datetime.utcnow,
          'state': u'unprocessed'}
  
 -    migration_handler = migrations.MediaEntryMigration
 +    def get_comments(self):
 +        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
 -    
 -    def get_comments(self, page):
 -        cursor = self.db.MediaComment.find({
 -                'media_entry': self['_id']}).sort('created', DESCENDING)
 -        
 -        pagination = Pagination(page, cursor)
 -        comments = pagination()
 -        
 -        data = list()
 -        for comment in comments:
 -            comment['author'] = self.db.User.find_one({
 -                    '_id': comment['author']})
 -            data.append(comment)
 -            
 -        return (data, pagination)
 -        
 +
      def generate_slug(self):
          self['slug'] = util.slugify(self['title'])
  
index da3e887ebdeb1b6ecb46e637cd5637134847824b,9e0ceff78499b8ebf6e3169b86f4c42e0b817b15..125b24e01048dfb087501af8d15642744b78e1ae
@@@ -54,22 -54,28 +54,28 @@@ def process_media_initial(media_id)
  
      thumb_file = mgg.public_store.get_file(thumb_filepath, 'w')
      with thumb_file:
 -        thumb.save(thumb_file, "JPEG")
 +        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")
++            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 :)
index 3f4dce3b565431eea69e5662ad010b54e1a3f221,56d79662219928b92b8f1691dfdee27df5fd56bc..dc0b6210158b2817094e5042f0fb8e6900854e59
  {% extends "mediagoblin/base.html" %}
  
  {% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
 +{% from "mediagoblin/utils/pagination.html" import render_pagination %}
  
  {% block mediagoblin_content %}
 -  {# temporarily, an "image gallery" that isn't one really ;) #}
    {% if media %}
 -    <div class="grid_8 alpha media_image">
 -      <h1>
 -        {{media.title}}
 -      </h1>
 +    <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}}
 +      </h2>
 +
 +      {% autoescape False %}
 +        <p>{{ media.description_html }}</p>
 +      {% endautoescape %}
 +
        <p>
 -        Uploaded on
 +        &mdash;&nbsp;uploaded on
          {{ "%4d-%02d-%02d"|format(media.created.year,
                                    media.created.month, media.created.day) }}
          by
index 9c4d024a533ef6fd532340aaaea68f37fc3cfbcb,a542566356d4bcc580fd7fb95a4fa2b26eb7ef3c..1892378ccf6db98e30586131319c88a8a5d0ec71
@@@ -37,8 -35,8 +37,10 @@@ from mediagoblin import mg_global
  from mediagoblin import messages
  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():
      """