{% if media.item.file and media.is_published or user.is_superuser or user.is_staff %}
{% if not "video" in media.mime_type or perms.telemeta.can_play_all_items or request.user_agent.os.family == 'iOS' %}
<div class="module_action">
- <a href="{{ MEDIA_URL }}{{ media.item.file }}" class="component_icon button" id="action_red"><img src="/static/teleforma/images/download_media.png" alt="" style="vertical-align:middle" /> {% trans "Download" %}</a>
+ <a href="{% url 'teleforma-media-download' period.id media.pk %}" class="component_icon button" id="action_red"><img src="/static/teleforma/images/download_media.png" alt="" style="vertical-align:middle" /> {% trans "Download" %}</a>
</div>
{% endif %}
{% endif %}
{% if "video" in media.mime_type %}
<div class="video">
<video id="my_video_1" class="video-js vjs-default-skin" width="864" height="480" controls preload="auto" data-setup='{}' {% if media.item.related.all %}{% for related in media.item.related.all %}{% if related.title == "preview" %}{% thumbnail related.file "640" as im %}poster="{{ im.url }}"{% endthumbnail %}{% endif %}{% endfor %}{% endif %}>
- <source src="{{ MEDIA_URL }}{{ media.item.file }}" type="{{ media.mime_type }}" />
+ <source src="{% url 'teleforma-media-streaming' period.id media.pk %}" type="{{ media.mime_type }}" />
</video>
</div>
</div>
<div class="audio">
<audio controls preload="auto">
- <source src="{{ MEDIA_URL }}{{ media.item.file }}" type="{{ media.mime_type }}" />
+ <source src="{% url 'teleforma-media-streaming' period.id media.pk %}" type="{{ media.mime_type }}" />
</audio>
</div>
{% endif %}
url(r'^desk/periods/(?P<period_id>.*)/medias/(?P<pk>.*)/detail/$', MediaView.as_view(), name="teleforma-media-detail"),
url(r'^desk/periods/(?P<period_id>.*)/medias/(?P<pk>.*)/embed/$', MediaViewEmbed.as_view(), name="teleforma-media-embed"),
- url(r'^desk/periods/(?P<period_id>.*)/medias/(?P<pk>.*)/download/$', media.download, name="teleforma-media-download"),
+ url(r'^desk/periods/(?P<period_id>.*)/medias/(?P<pk>.*)/download/$', MediaDownloadView.as_view(), name="teleforma-media-download"),
+ url(r'^desk/periods/(?P<period_id>.*)/medias/(?P<pk>.*)/streaming/$', MediaStreamingView.as_view(), name="teleforma-media-streaming"),
url(r'^desk/documents/(?P<pk>.*)/detail/$', DocumentView.as_view(),
name="teleforma-document-detail"),
from django.contrib.auth import authenticate, login, get_backends
from django.template import RequestContext, loader, Context
from django import template
-from django.http import HttpResponse, HttpResponseRedirect, FileResponse, Http404
+from django.http import HttpResponse, HttpResponseRedirect
+from django.http import Http404
from django.shortcuts import render_to_response, redirect, get_object_or_404
from django.views.generic import *
from django.views.generic.base import *
def serve_media(media_path, content_type="", buffering=True, streaming=False):
+ if not content_type:
+ content_type = mimetypes.guess_type(media_path)[0]
+
if not settings.DEBUG:
return nginx_media_accel(media_path, content_type=content_type,
buffering=buffering, streaming=streaming)
else:
- try:
- response = FileResponse(open(media_path, 'rb'))
- except:
- response = StreamingHttpResponse(stream_from_file(media_path), content_type=content_type)
+ response = StreamingHttpResponse(stream_from_file(media_path), content_type=content_type)
filename = os.path.basename(media_path)
if not streaming:
response['Content-Disposition'] = 'attachment; ' + 'filename=' + filename
def dispatch(self, *args, **kwargs):
return super(MediaView, self).dispatch(*args, **kwargs)
- def download(self, request, pk):
- courses = get_courses(request.user)
- media = Media.objects.get(id=pk)
- if get_access(media, courses):
- path = media.item.file.path
- filename, ext = os.path.splitext(path)
- filename = filename.split(os.sep)[-1]
- fsock = open(media.item.file.path, 'r')
- view = ItemView()
- mimetype = view.item_analyze(media.item)
- extension = mimetypes.guess_extension(mimetype)
- if not extension:
- extension = ext
- response = HttpResponse(fsock, mimetype=mimetype)
-
- response['Content-Disposition'] = "attachment; filename=%s%s" % \
- (filename.encode('utf8'), extension)
- return response
- else:
- return redirect('teleforma-media-detail', self.context['period'].id, media.id)
-
-
@jsonrpc_method('teleforma.publish_media')
def publish(request, id):
media = Media.objects.get(id=id)
media.save()
+class MediaStreamingView(MediaView):
+
+ streaming = True
+
+ def get(self):
+ courses = get_courses(self.request.user)
+ media = Media.objects.get(id=self.kwargs['pk'])
+ if get_access(media, courses):
+ media_path = media.item.file.path
+ return serve_media(media_path, streaming=streaming)
+ else:
+ return redirect('teleforma-media-detail', self.context['period'].id, media.id)
+
+
+class MediaDownloadView(MediaStreamingView):
+
+ streaming = False
+
+
class MediaPendingView(ListView):
model = Media