static files too

This commit is contained in:
Markos Gogoulos
2025-05-21 16:03:09 +03:00
parent 378e10d1f2
commit f5176d12d7
23 changed files with 67 additions and 37 deletions
+22 -6
View File
@@ -2,13 +2,11 @@
# related content
import itertools
import json
import logging
import os
import random
import re
import tempfile
from datetime import datetime
import subprocess
from django.conf import settings
from django.core.cache import cache
@@ -17,7 +15,6 @@ from django.core.mail import EmailMessage
from django.db.models import Q
from django.utils import timezone
from contextlib import contextmanager
from django.db.models.signals import post_save
from cms import celery_app
@@ -414,6 +411,25 @@ def clean_comment(raw_comment):
return cleaned_comment
def kill_ffmpeg_process(filepath):
"""Kill ffmpeg process that is processing a specific file
Args:
filepath: Path to the file being processed by ffmpeg
Returns:
subprocess.CompletedProcess: Result of the kill command
"""
cmd = "ps aux|grep 'ffmpeg'|grep %s|grep -v grep |awk '{print $2}'" % filepath
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
pid = result.stdout.decode("utf-8").strip()
if pid:
logger.info("Killing ffmpeg process with PID: %s", pid)
cmd = "kill -9 %s" % pid
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
return result
def copy_video(original_media, copy_encodings=True, title_suffix="(Trimmed)"):
"""Create a copy of a media object
@@ -446,7 +462,7 @@ def copy_video(original_media, copy_encodings=True, title_suffix="(Trimmed)"):
if copy_encodings:
for encoding in original_media.encodings.filter(status="success", chunk=False):
for encoding in original_media.encodings.filter(chunk=False):
if encoding.media_file:
with open(encoding.media_file.path, "rb") as f:
myfile = File(f)
@@ -454,7 +470,7 @@ def copy_video(original_media, copy_encodings=True, title_suffix="(Trimmed)"):
media_file=myfile,
media=new_media,
profile=encoding.profile,
status="success",
status=encoding.status,
progress=100,
chunk=False,
logs=f"Copied from encoding {encoding.id}"
+10 -7
View File
@@ -319,7 +319,6 @@ class Media(models.Model):
self.__original_uploaded_poster = self.uploaded_poster
def save(self, *args, **kwargs):
print(f"SAVE called for {self.friendly_token}")
if not self.title:
self.title = self.media_file.path.split("/")[-1]
@@ -680,7 +679,8 @@ class Media(models.Model):
if ret:
return helpers.url_from_path(ret.media_file.path)
return None
# showing the original file
return helpers.url_from_path(self.media_file.path)
@property
@@ -688,7 +688,7 @@ class Media(models.Model):
if self.media_type not in ["video"]:
return None
ret = self.encodings.filter(status="success", profile__extension='mp4').order_by("-profile__resolution").first()
ret = self.encodings.filter(status="success", profile__extension='mp4', chunk=False).order_by("-profile__resolution").first()
if ret:
return ret.media_file.path
@@ -705,12 +705,17 @@ class Media(models.Model):
for key in ENCODE_RESOLUTIONS_KEYS:
ret[key] = {}
# if this is enabled, return original file on a way
# that video.js can consume
# if DO_NOT_TRANSCODE_VIDEO enabled, return original file on a way
# that video.js can consume. Or also if encoding_status is running, do the
# same so that the video appears on the player
if settings.DO_NOT_TRANSCODE_VIDEO:
ret['0-original'] = {"h264": {"url": helpers.url_from_path(self.media_file.path), "status": "success", "progress": 100}}
return ret
if self.encoding_status in ["running", "pending"]:
ret['0-original'] = {"h264": {"url": helpers.url_from_path(self.media_file.path), "status": "success", "progress": 100}}
return ret
for encoding in self.encodings.select_related("profile").filter(chunk=False):
if encoding.profile.extension == "gif":
continue
@@ -1577,7 +1582,6 @@ def media_save(sender, instance, created, **kwargs):
# once model is saved
# SOS: do not put anything here, as if more logic is added,
# we have to disconnect signal to avoid infinite recursion
print(f'mpainei media_save gia {instance.friendly_token}')
if not instance.friendly_token:
return False
@@ -1599,7 +1603,6 @@ def media_save(sender, instance, created, **kwargs):
tag.update_tag_media()
instance.update_search_vector()
print(f'EXIT media_save gia {instance.friendly_token}')
@receiver(pre_delete, sender=Media)
+11
View File
@@ -606,6 +606,17 @@ def view_media(request):
context["CAN_DELETE_MEDIA"] = True
context["CAN_EDIT_MEDIA"] = True
context["CAN_DELETE_COMMENTS"] = True
# TODO: explaim
if media.media_type == 'video':
video_msg = None
if media.encoding_status == "pending":
video_msg = "Media encoding hasn't started yet. Attempting to show the original video file"
if media.encoding_status == "running":
video_msg = "Media encoding is under processing. Attempting to show the original video file"
if video_msg:
messages.add_message(request, messages.INFO, video_msg)
return render(request, "cms/media.html", context)