Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 2nd, 2012  |  syntax: None  |  size: 4.30 KB  |  hits: 16  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py
  2. index bf825a2..a2b5b72 100644
  3. --- a/mediagoblin/db/models.py
  4. +++ b/mediagoblin/db/models.py
  5. @@ -24,6 +24,7 @@ from mediagoblin import mg_globals
  6.  from mediagoblin.db import migrations
  7.  from mediagoblin.db.util import DESCENDING, ObjectId
  8.  from mediagoblin.util import Pagination
  9. +from mediagoblin.util import IMAGE_FETCHING_ORDER
  10.  
  11.  ###################
  12.  # Custom validators
  13. @@ -109,6 +110,24 @@ class MediaEntry(Document):
  14.  
  15.      migration_handler = migrations.MediaEntryMigration
  16.  
  17. +    def get_display_media(self, media_map, fetch_order=IMAGE_FETCHING_ORDER):
  18. +        """
  19. +        Find the best media for display.
  20. +
  21. +        Args:
  22. +        - media_map: a dict like
  23. +          {u'image_size': [u'dir1', u'dir2', u'image.jpg']}
  24. +        - fetch_order: the order we should try fetching images in
  25. +
  26. +        Returns:
  27. +        (media_size, media_path)
  28. +        """
  29. +        media_sizes = media_map.keys()
  30. +        print media_sizes
  31. +        for media_size in IMAGE_FETCHING_ORDER:
  32. +            if media_size in media_sizes:
  33. +                return media_map[media_size]
  34. +
  35.      def main_mediafile(self):
  36.          pass
  37.      
  38. diff --git a/mediagoblin/process_media/__init__.py b/mediagoblin/process_media/__init__.py
  39. index 0d1abcb..9b8171c 100644
  40. --- a/mediagoblin/process_media/__init__.py
  41. +++ b/mediagoblin/process_media/__init__.py
  42. @@ -57,19 +57,25 @@ def process_media_initial(media_id):
  43.          thumb.save(thumb_file, "JPEG")
  44.  
  45.      """
  46. -    Create medium file, used in `media.html`
  47. +    If the size of the original file exceeds the specified size of a `medium`
  48. +    file, a `medium.jpg` files is created and later associated with the media
  49. +    entry.
  50.      """
  51.      medium = Image.open(queued_filename)
  52. -    medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS)
  53. +    medium_processed = False
  54.  
  55. -    if medium.mode != "RGB":
  56. -        medium = medium.convert("RGB")
  57. +    if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]:
  58. +        medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS)
  59.  
  60. -    medium_filepath = create_pub_filepath(entry, 'medium.jpg')
  61. +        if medium.mode != "RGB":
  62. +            medium = medium.convert("RGB")
  63.  
  64. -    medium_file = mgg.public_store.get_file(medium_filepath, 'w')
  65. -    with medium_file:
  66. -        medium.save(medium_file, "JPEG")
  67. +        medium_filepath = create_pub_filepath(entry, 'medium.jpg')
  68. +
  69. +        medium_file = mgg.public_store.get_file(medium_filepath, 'w')
  70. +        with medium_file:
  71. +            medium.save(medium_file, "JPEG")
  72. +            medium_processed = True
  73.  
  74.      # we have to re-read because unlike PIL, not everything reads
  75.      # things in string representation :)
  76. @@ -86,7 +92,8 @@ def process_media_initial(media_id):
  77.      media_files_dict = entry.setdefault('media_files', {})
  78.      media_files_dict['thumb'] = thumb_filepath
  79.      media_files_dict['main'] = main_filepath
  80. -    media_files_dict['medium'] = medium_filepath
  81. +    if medium_processed:
  82. +        media_files_dict['medium'] = medium_filepath
  83.      entry['state'] = u'processed'
  84.      entry.save()
  85.  
  86. diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html
  87. index e16f1e0..56d7966 100644
  88. --- a/mediagoblin/templates/mediagoblin/user_pages/media.html
  89. +++ b/mediagoblin/templates/mediagoblin/user_pages/media.html
  90. @@ -26,13 +26,8 @@
  91.        <h1>
  92.          {{media.title}}
  93.        </h1>
  94. -      {% if media.media_files.medium %}
  95. -        <img class="media_image" src="{{ request.app.public_store.file_url(
  96. -                                     media.media_files.medium) }}" />
  97. -      {% else %}
  98. -        <img class="media_image" src="{{ request.app.public_store.file_url(
  99. -                  media.media_files.main) }}" />
  100. -      {% endif %}
  101. +      <img class="media_image" src="{{ request.app.public_store.file_url(
  102. +                                         media.get_display_media(media.media_files)) }}" />
  103.        <p>
  104.          Uploaded on
  105.          {{ "%4d-%02d-%02d"|format(media.created.year,
  106. diff --git a/mediagoblin/util.py b/mediagoblin/util.py
  107. index a20e87c..2698fb6 100644
  108. --- a/mediagoblin/util.py
  109. +++ b/mediagoblin/util.py
  110. @@ -35,6 +35,8 @@ from mediagoblin import mg_globals
  111.  from mediagoblin import messages
  112.  from mediagoblin.db.util import ObjectId
  113.  
  114. +IMAGE_FETCHING_ORDER = [u'medium', u'main', u'thumb']
  115. +
  116.  TESTS_ENABLED = False
  117.  def _activate_testing():
  118.      """