from django.conf import settings from django.contrib.contenttypes.models import ContentType from moviepy.editor import VideoFileClip from .models import Video, Playlist, TagToObject, DYNAMIC, PlaylistVideo def generate_thumbnail(video_path, video_name): clip = VideoFileClip(video_path) thumbnail_name = video_name.split('.')[0] thumbnail_name = f'{settings.MEDIA_ROOT}{thumbnail_name}.jpg' clip.save_frame(thumbnail_name, t=1.00) thumbnail_name = thumbnail_name.split('/')[-1] return thumbnail_name def add_video_to_playlist(video): video_content_type = ContentType.objects.get_for_model(Video) playlist_content_type = ContentType.objects.get_for_model(Playlist) tag_ids = list(TagToObject.objects.filter( content_type=video_content_type, object_id=video.id, ).values_list('tag_id', flat=True)) if tag_ids: playlist_ids = list(TagToObject.objects.filter( content_type=playlist_content_type, tag_id__in=tag_ids, ).values_list('object_id', flat=True)) if playlist_ids: playlists = Playlist.objects.filter(id__in=playlist_ids, type=DYNAMIC) for playlist in playlists: PlaylistVideo.objects.update_or_create( playlist=playlist, video=video, ) def add_video_to_new_playlist(playlist): video_content_type = ContentType.objects.get_for_model(Video) playlist_content_type = ContentType.objects.get_for_model(Playlist) tag_ids = list(TagToObject.objects.filter( content_type=playlist_content_type, object_id=playlist.id, ).values_list('tag_id', flat=True)) if tag_ids: video_ids = list(TagToObject.objects.filter( content_type=video_content_type, tag_id__in=tag_ids, ).values_list('object_id', flat=True)) if video_ids: for video in Video.objects.filter(id__in=video_ids): PlaylistVideo.objects.update_or_create( playlist=playlist, video=video, )