feat: refactor copy_video

This commit is contained in:
Markos Gogoulos 2025-05-15 18:49:10 +03:00
parent d940cad56b
commit 22db570836

View File

@ -424,10 +424,9 @@ def copy_video(original_media, copy_encodings=True, title_suffix="(Trimmed)"):
New Media object New Media object
""" """
with disable_signal(post_save, models.media_save, models.Media):
with open(original_media.media_file.path, "rb") as f: with open(original_media.media_file.path, "rb") as f:
myfile = File(f) myfile = File(f)
new_media = models.Media.objects.create( new_media = models.Media(
media_file=myfile, media_file=myfile,
title=f"{original_media.title} {title_suffix}", title=f"{original_media.title} {title_suffix}",
description=original_media.description, description=original_media.description,
@ -439,14 +438,16 @@ def copy_video(original_media, copy_encodings=True, title_suffix="(Trimmed)"):
is_reviewed=original_media.is_reviewed, is_reviewed=original_media.is_reviewed,
add_date=timezone.now() add_date=timezone.now()
) )
models.Media.objects.bulk_create([new_media])
# avoids calling signals
if copy_encodings: if copy_encodings:
for encoding in original_media.encodings.filter(status="success", chunk=False): for encoding in original_media.encodings.filter(status="success", chunk=False):
if encoding.media_file: if encoding.media_file:
with disable_signal(post_save, models.encoding_file_save, models.Encoding):
with open(encoding.media_file.path, "rb") as f: with open(encoding.media_file.path, "rb") as f:
myfile = File(f) myfile = File(f)
new_encoding = models.Encoding.objects.create( new_encoding = models.Encoding(
media_file=myfile, media_file=myfile,
media=new_media, media=new_media,
profile=encoding.profile, profile=encoding.profile,
@ -455,7 +456,9 @@ def copy_video(original_media, copy_encodings=True, title_suffix="(Trimmed)"):
chunk=False, chunk=False,
logs=f"Copied from encoding {encoding.id}" logs=f"Copied from encoding {encoding.id}"
) )
new_encoding.save() models.Encoding.objects.bulk_create([new_encoding])
# avoids calling signals
# TODO: check size
# Copy categories and tags # Copy categories and tags
for category in original_media.category.all(): for category in original_media.category.all():