Add LocalArchive upload backend

pull/347/head
Mike Lang 1 year ago
parent 5e7904dab3
commit cedebff1ce

@ -17,11 +17,11 @@ from psycopg2 import sql
import common import common
from common.database import DBManager, query, get_column_placeholder from common.database import DBManager, query, get_column_placeholder
from common.segments import get_best_segments, fast_cut_segments, full_cut_segments, smart_cut_segments, extract_frame, ContainsHoles from common.segments import get_best_segments, archive_cut_segments, fast_cut_segments, full_cut_segments, smart_cut_segments, extract_frame, ContainsHoles
from common.images import compose_thumbnail_template from common.images import compose_thumbnail_template
from common.stats import timed from common.stats import timed
from .upload_backends import Youtube, Local, UploadError from .upload_backends import Youtube, Local, LocalArchive, UploadError
videos_uploaded = prom.Counter( videos_uploaded = prom.Counter(
@ -937,6 +937,8 @@ def main(
backend_type = Youtube backend_type = Youtube
elif backend_type == 'local': elif backend_type == 'local':
backend_type = Local backend_type = Local
elif backend_type == 'local-archive':
backend_type = LocalArchive
else: else:
raise ValueError("Unknown upload backend type: {!r}".format(backend_type)) raise ValueError("Unknown upload backend type: {!r}".format(backend_type))
backend = backend_type(credentials, **backend_config) backend = backend_type(credentials, **backend_config)

@ -4,6 +4,7 @@ import json
import logging import logging
import os import os
import re import re
import time
import uuid import uuid
import common import common
@ -342,3 +343,30 @@ class Local(UploadBackend):
'tags': tags, 'tags': tags,
'public': public, 'public': public,
}) + '\n') }) + '\n')
def set_thumbnail(self, video_id, thumbnail):
filepath = os.path.join(self.path, "{}.png".format(video_id))
common.atomic_write(filepath, thumbnail)
class LocalArchive(Local):
"""Similar to Local() but does archive cuts. See archive_cut_segments()."""
encoding_settings = "archive"
def upload_video(self, title, description, tags, public, tempfiles):
# make title safe by removing offending characters, replacing with '-'
safe_title = re.sub('[^A-Za-z0-9_]', '-', title)
# To aid in finding the "latest" version if re-edited, prefix with current time.
prefix = str(time.time())
video_dir = "{}-{}".format(prefix, safe_title)
common.ensure_directory(os.path.join(self.path, video_dir))
for n, tempfile in enumerate(tempfiles):
filepath = os.path.join(self.path, video_dir, "{}-{}.mkv".format(safe_title, n))
# We're assuming these are on the same filesystem. This may not always be true
# but it will be in our normal setup. If we ever need this in the future, we'll fix it then.
os.rename(tempfile, filepath)
if self.url_prefix is not None:
url = self.url_prefix + video_dir
else:
url = "file://{}".format(video_dir)
return prefix, url

Loading…
Cancel
Save