mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-08-17 08:21:05 +02:00
73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
import os
|
|
import tempfile
|
|
|
|
from django.conf import settings
|
|
from django.db import models
|
|
from django.urls import reverse
|
|
|
|
from .. import helpers
|
|
from .utils import subtitles_file_path
|
|
|
|
|
|
class Language(models.Model):
|
|
"""Language model
|
|
to be used with Subtitles
|
|
"""
|
|
|
|
code = models.CharField(max_length=12, help_text="language code")
|
|
|
|
title = models.CharField(max_length=100, help_text="language code")
|
|
|
|
class Meta:
|
|
ordering = ["id"]
|
|
|
|
def __str__(self):
|
|
return f"{self.code}-{self.title}"
|
|
|
|
|
|
class Subtitle(models.Model):
|
|
"""Subtitles model"""
|
|
|
|
language = models.ForeignKey(Language, on_delete=models.CASCADE)
|
|
|
|
media = models.ForeignKey("Media", on_delete=models.CASCADE, related_name="subtitles")
|
|
|
|
subtitle_file = models.FileField(
|
|
"Subtitle/CC file",
|
|
help_text="File has to be WebVTT format",
|
|
upload_to=subtitles_file_path,
|
|
max_length=500,
|
|
)
|
|
|
|
user = models.ForeignKey("users.User", on_delete=models.CASCADE)
|
|
|
|
class Meta:
|
|
ordering = ["language__title"]
|
|
|
|
def __str__(self):
|
|
return f"{self.media.title}-{self.language.title}"
|
|
|
|
def get_absolute_url(self):
|
|
return f"{reverse('edit_subtitle')}?id={self.id}"
|
|
|
|
@property
|
|
def url(self):
|
|
return self.get_absolute_url()
|
|
|
|
def convert_to_srt(self):
|
|
input_path = self.subtitle_file.path
|
|
with tempfile.TemporaryDirectory(dir=settings.TEMP_DIRECTORY) as tmpdirname:
|
|
pysub = settings.PYSUBS_COMMAND
|
|
|
|
cmd = [pysub, input_path, "--to", "vtt", "-o", tmpdirname]
|
|
stdout = helpers.run_command(cmd)
|
|
|
|
list_of_files = os.listdir(tmpdirname)
|
|
if list_of_files:
|
|
subtitles_file = os.path.join(tmpdirname, list_of_files[0])
|
|
cmd = ["cp", subtitles_file, input_path]
|
|
stdout = helpers.run_command(cmd) # noqa
|
|
else:
|
|
raise Exception("Could not convert to srt")
|
|
return True
|