Merge branch 'master' into 201207-testfixes
This commit is contained in:
@@ -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']}
|
||||
|
||||
@@ -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']) }}">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user