mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-12-25 21:02:30 -05:00
replace media, shared state, better category options
This commit is contained in:
@@ -32,6 +32,7 @@ from .pages import members # noqa: F401
|
||||
from .pages import publish_media # noqa: F401
|
||||
from .pages import recommended_media # noqa: F401
|
||||
from .pages import record_screen # noqa: F401
|
||||
from .pages import replace_media # noqa: F401
|
||||
from .pages import search # noqa: F401
|
||||
from .pages import setlanguage # noqa: F401
|
||||
from .pages import sitemap # noqa: F401
|
||||
|
||||
@@ -226,8 +226,13 @@ class MediaList(APIView):
|
||||
elif duration == '60-120':
|
||||
media = media.filter(duration__gte=3600)
|
||||
|
||||
if publish_state and publish_state in ['private', 'public', 'unlisted']:
|
||||
media = media.filter(state=publish_state)
|
||||
if publish_state:
|
||||
if publish_state == 'shared':
|
||||
# Filter media that have custom permissions OR RBAC categories
|
||||
shared_conditions = Q(permissions__isnull=False) | Q(category__is_rbac_category=True)
|
||||
media = media.filter(shared_conditions).distinct()
|
||||
elif publish_state in ['private', 'public', 'unlisted']:
|
||||
media = media.filter(state=publish_state)
|
||||
|
||||
if not already_sorted:
|
||||
media = media.order_by(f"{ordering}{sort_by}")
|
||||
@@ -799,13 +804,14 @@ class MediaDetail(APIView):
|
||||
|
||||
serializer = MediaSerializer(media, data=request.data, context={"request": request})
|
||||
if serializer.is_valid():
|
||||
serializer.save(user=request.user)
|
||||
# no need to update the media file itself, only the metadata
|
||||
# if request.data.get('media_file'):
|
||||
# media_file = request.data["media_file"]
|
||||
# serializer.save(user=request.user, media_file=media_file)
|
||||
# media_file = request.data["media_file"]
|
||||
# media.state = helpers.get_default_state(request.user)
|
||||
# media.listable = False
|
||||
# serializer.save(user=request.user, media_file=media_file)
|
||||
# else:
|
||||
# serializer.save(user=request.user)
|
||||
# serializer.save(user=request.user)
|
||||
serializer.save(user=request.user)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import json
|
||||
import os
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
@@ -18,6 +19,7 @@ from ..forms import (
|
||||
EditSubtitleForm,
|
||||
MediaMetadataForm,
|
||||
MediaPublishForm,
|
||||
ReplaceMediaForm,
|
||||
SubtitleForm,
|
||||
WhisperSubtitlesForm,
|
||||
)
|
||||
@@ -363,6 +365,76 @@ def publish_media(request):
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def replace_media(request):
|
||||
"""Replace media file"""
|
||||
|
||||
if not getattr(settings, 'ALLOW_MEDIA_REPLACEMENT', False):
|
||||
return HttpResponseRedirect("/")
|
||||
|
||||
friendly_token = request.GET.get("m", "").strip()
|
||||
if not friendly_token:
|
||||
return HttpResponseRedirect("/")
|
||||
media = Media.objects.filter(friendly_token=friendly_token).first()
|
||||
|
||||
if not media:
|
||||
return HttpResponseRedirect("/")
|
||||
|
||||
if not (request.user.has_contributor_access_to_media(media) or is_mediacms_editor(request.user)):
|
||||
return HttpResponseRedirect("/")
|
||||
|
||||
if not is_media_allowed_type(media):
|
||||
return HttpResponseRedirect(media.get_absolute_url())
|
||||
|
||||
if request.method == "POST":
|
||||
form = ReplaceMediaForm(media, request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
new_media_file = form.cleaned_data.get("new_media_file")
|
||||
|
||||
media.encodings.all().delete()
|
||||
|
||||
if media.thumbnail:
|
||||
helpers.rm_file(media.thumbnail.path)
|
||||
media.thumbnail = None
|
||||
if media.poster:
|
||||
helpers.rm_file(media.poster.path)
|
||||
media.poster = None
|
||||
if media.uploaded_thumbnail:
|
||||
helpers.rm_file(media.uploaded_thumbnail.path)
|
||||
media.uploaded_thumbnail = None
|
||||
if media.uploaded_poster:
|
||||
helpers.rm_file(media.uploaded_poster.path)
|
||||
media.uploaded_poster = None
|
||||
if media.sprites:
|
||||
helpers.rm_file(media.sprites.path)
|
||||
media.sprites = None
|
||||
if media.preview_file_path:
|
||||
helpers.rm_file(media.preview_file_path)
|
||||
media.preview_file_path = ""
|
||||
|
||||
if media.hls_file:
|
||||
hls_dir = os.path.dirname(media.hls_file)
|
||||
helpers.rm_dir(hls_dir)
|
||||
media.hls_file = ""
|
||||
|
||||
media.media_file = new_media_file
|
||||
|
||||
media.listable = False
|
||||
media.state = helpers.get_default_state(request.user)
|
||||
media.save()
|
||||
|
||||
messages.add_message(request, messages.INFO, translate_string(request.LANGUAGE_CODE, "Media file was replaced successfully"))
|
||||
return HttpResponseRedirect(media.get_absolute_url())
|
||||
else:
|
||||
form = ReplaceMediaForm(media)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"cms/replace_media.html",
|
||||
{"form": form, "media_object": media, "add_subtitle_url": media.add_subtitle_url},
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def edit_chapters(request):
|
||||
"""Edit chapters"""
|
||||
|
||||
Reference in New Issue
Block a user