diff options
Diffstat (limited to 'mediagoblin')
-rw-r--r-- | mediagoblin/media_types/audio/__init__.py | 2 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/media_displays/ascii.html | 4 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/media_displays/audio.html | 2 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/media_displays/image.html | 14 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/media_displays/video.html | 22 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/user_pages/media.html | 48 | ||||
-rw-r--r-- | mediagoblin/tools/exif.py | 15 | ||||
-rw-r--r-- | mediagoblin/tools/files.py | 19 | ||||
-rw-r--r-- | mediagoblin/user_pages/views.py | 13 |
9 files changed, 99 insertions, 40 deletions
diff --git a/mediagoblin/media_types/audio/__init__.py b/mediagoblin/media_types/audio/__init__.py index 9b33f9e3..4f3ead60 100644 --- a/mediagoblin/media_types/audio/__init__.py +++ b/mediagoblin/media_types/audio/__init__.py @@ -22,4 +22,4 @@ MEDIA_MANAGER = { 'processor': process_audio, 'sniff_handler': sniff_handler, 'display_template': 'mediagoblin/media_displays/audio.html', - 'accepted_extensions': ['mp3', 'flac', 'ogg', 'wav', 'm4a']} + 'accepted_extensions': ['mp3', 'flac', 'wav', 'm4a']} diff --git a/mediagoblin/templates/mediagoblin/media_displays/ascii.html b/mediagoblin/templates/mediagoblin/media_displays/ascii.html index 6330595b..3cc5e0ab 100644 --- a/mediagoblin/templates/mediagoblin/media_displays/ascii.html +++ b/mediagoblin/templates/mediagoblin/media_displays/ascii.html @@ -27,7 +27,11 @@ {%- endautoescape -%} </pre> </div> +{% endblock %} + +{% block mediagoblin_sidebar %} {% if 'original' in media.media_files %} + <h3>{% trans %}Download{% endtrans %}</h3> <p> <a href="{{ request.app.public_store.file_url( media.media_files['original']) }}"> diff --git a/mediagoblin/templates/mediagoblin/media_displays/audio.html b/mediagoblin/templates/mediagoblin/media_displays/audio.html index 9713aa49..95bc6e88 100644 --- a/mediagoblin/templates/mediagoblin/media_displays/audio.html +++ b/mediagoblin/templates/mediagoblin/media_displays/audio.html @@ -57,7 +57,7 @@ <ul> {% if 'original' in media.media_files %} <li><a href="{{ request.app.public_store.file_url( - media.media_files.original) }}">{% trans %}original file{% endtrans %}</a> + media.media_files.original) }}">{% trans %}Original file{% endtrans %}</a> {% endif %} <li><a href="{{ request.app.public_store.file_url( media.media_files.webm_audio) }}">{% trans %}WebM file (Vorbis codec){% endtrans %}</a> diff --git a/mediagoblin/templates/mediagoblin/media_displays/image.html b/mediagoblin/templates/mediagoblin/media_displays/image.html index 7dfecb11..86725cca 100644 --- a/mediagoblin/templates/mediagoblin/media_displays/image.html +++ b/mediagoblin/templates/mediagoblin/media_displays/image.html @@ -17,3 +17,17 @@ #} {% extends 'mediagoblin/user_pages/media.html' %} + +{% block mediagoblin_sidebar %} + {% if 'original' in media.media_files %} + <h3>{% trans %}Download{% endtrans %}</h3> + <p> + <a href="{{ request.app.public_store.file_url( + media.media_files['original']) }}"> + {%- trans -%} + Original + {%- endtrans -%} + </a> + </p> + {% endif %} +{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/media_displays/video.html b/mediagoblin/templates/mediagoblin/media_displays/video.html index 86c277aa..d72de2ca 100644 --- a/mediagoblin/templates/mediagoblin/media_displays/video.html +++ b/mediagoblin/templates/mediagoblin/media_displays/video.html @@ -46,14 +46,16 @@ </div> </video> </div> - {% if 'original' in media.media_files %} - <p> - <a href="{{ request.app.public_store.file_url( - media.media_files['original']) }}"> - {%- trans -%} - Original - {%- endtrans -%} - </a> - </p> - {% endif %} +{% endblock %} + +{% block mediagoblin_sidebar %} + <h3>{% trans %}Download{% endtrans %}</h3> + <ul> + {% if 'original' in media.media_files %} + <li><a href="{{ request.app.public_store.file_url( + media.media_files.original) }}">{% trans %}Original file{% endtrans %}</a> + {% endif %} + <li><a href="{{ request.app.public_store.file_url( + media.media_files.webm_640) }}">{% trans %}WebM file (640p; VP8/Vorbis){% endtrans %}</a> + </ul> {% endblock %} diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html index 21990442..15ac4988 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/media.html +++ b/mediagoblin/templates/mediagoblin/user_pages/media.html @@ -93,28 +93,6 @@ {% autoescape False %} <p>{{ media.description_html }}</p> {% endautoescape %} - {% if media.attachment_files|count %} - <h3>Attachments</h3> - <ul> - {% for attachment in media.attachment_files %} - <li> - <a href="{{ request.app.public_store.file_url(attachment.filepath) }}"> - {{ attachment.name }} - </a> - </li> - {% endfor %} - </ul> - {% endif %} - {% if app_config['allow_attachments'] - and request.user - and (media.uploader == request.user._id - or request.user.is_admin) %} - <p> - <a href="{{ request.urlgen('mediagoblin.edit.attachments', - user=media.get_uploader.username, - media=media._id) }}">Add attachment</a> - </p> - {% endif %} {% if comments %} <a {% if not request.user %} @@ -185,6 +163,32 @@ {% include "mediagoblin/utils/exif.html" %} + {% if media.attachment_files|count %} + <h3>{% trans %}Attachments{% endtrans %}</h3> + <ul> + {% for attachment in media.attachment_files %} + <li> + <a href="{{ request.app.public_store.file_url(attachment.filepath) }}"> + {{ attachment.name }} + </a> + </li> + {% endfor %} + </ul> + {% endif %} + {% if app_config['allow_attachments'] + and request.user + and (media.uploader == request.user._id + or request.user.is_admin) %} + {% if not media.attachment_files|count %} + <h3>{% trans %}Attachments{% endtrans %}</h3> + {% endif %} + <p> + <a href="{{ request.urlgen('mediagoblin.edit.attachments', + user=media.get_uploader.username, + media=media._id) }}">{% trans %}Add attachment{% endtrans %}</a> + </p> + {% endif %} + {% block mediagoblin_sidebar %} {% endblock %} </div> diff --git a/mediagoblin/tools/exif.py b/mediagoblin/tools/exif.py index c4fc1fe5..98c3de27 100644 --- a/mediagoblin/tools/exif.py +++ b/mediagoblin/tools/exif.py @@ -102,6 +102,10 @@ def clean_exif(exif): def _ifd_tag_to_dict(tag): + ''' + Takes an IFD tag object from the EXIF library and converts it to a dict + that can be stored as JSON in the database. + ''' data = { 'printable': tag.printable, 'tag': tag.tag, @@ -109,6 +113,11 @@ def _ifd_tag_to_dict(tag): 'field_offset': tag.field_offset, 'field_length': tag.field_length, 'values': None} + + if isinstance(tag.printable, str): + # Force it to be decoded as UTF-8 so that it'll fit into the DB + data['printable'] = tag.printable.decode('utf8', 'replace') + if type(tag.values) == list: data['values'] = [] for val in tag.values: @@ -118,7 +127,11 @@ def _ifd_tag_to_dict(tag): else: data['values'].append(val) else: - data['values'] = tag.values + if isinstance(tag.values, str): + # Force UTF-8, so that it fits into the DB + data['values'] = tag.values.decode('utf8', 'replace') + else: + data['values'] = tag.values return data diff --git a/mediagoblin/tools/files.py b/mediagoblin/tools/files.py index 25c1a6e6..fd38f05e 100644 --- a/mediagoblin/tools/files.py +++ b/mediagoblin/tools/files.py @@ -16,6 +16,7 @@ from mediagoblin import mg_globals + def delete_media_files(media): """ Delete all files associated with a MediaEntry @@ -23,10 +24,20 @@ def delete_media_files(media): Arguments: - media: A MediaEntry document """ + no_such_files = [] for listpath in media.media_files.itervalues(): - mg_globals.public_store.delete_file( - listpath) + try: + mg_globals.public_store.delete_file( + listpath) + except OSError: + no_such_files.append("/".join(listpath)) for attachment in media.attachment_files: - mg_globals.public_store.delete_file( - attachment['filepath']) + try: + mg_globals.public_store.delete_file( + attachment['filepath']) + except OSError: + no_such_files.append("/".join(attachment)) + + if no_such_files: + raise OSError(", ".join(no_such_files)) diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index a9b17b3b..0e061c46 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -15,6 +15,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. from webob import exc +import logging from mediagoblin import messages, mg_globals from mediagoblin.db.util import DESCENDING, ObjectId @@ -33,6 +34,9 @@ from werkzeug.contrib.atom import AtomFeed from mediagoblin.media_types import get_media_manager +_log = logging.getLogger(__name__) +_log.setLevel(logging.DEBUG) + @uses_pagination def user_home(request, page): """'Homepage' of a User()""" @@ -185,7 +189,14 @@ def media_confirm_delete(request, media): comment.delete() # Delete all files on the public storage - delete_media_files(media) + try: + delete_media_files(media) + except OSError, error: + _log.error('No such files from the user "{1}"' + ' to delete: {0}'.format(str(error), username)) + messages.add_message(request, messages.ERROR, + _('Some of the files with this entry seem' + ' to be missing. Deleting anyway.')) media.delete() messages.add_message( |