media-sucker/src/encoder.py

59 lines
1.5 KiB
Python

#! /usr/bin/python3
import os
import subprocess
import glob
import os
import json
import io
import shutil
import time
import re
import logging
import dvd
import cd
import traceback
import worker
class Encoder(worker.Worker):
def __init__(self, directory=None):
self.status = {}
self.directory = directory
return super().__init__(directory)
def run(self):
while True:
wait = True
self.status = {"type": "encoder", "state": "idle"}
for fn in glob.glob(self.workdir("*", "sucker.json")):
directory = os.path.dirname(fn)
state = self.read_state(directory)
try:
self.encode(directory, state)
except Exception as e:
logging.error("Error encoding %s: %s" % (directory, e))
logging.error(traceback.format_exc())
wait = False
if wait:
time.sleep(12)
def encode(self, directory, state):
self.status["state"] = "encoding"
self.status["title"] = state["title"]
if state["video"]:
media = dvd
else:
media = cd
logging.info("Encoding %s (%s)" % (directory, state["title"]))
for pct in media.encode(state, directory):
self.status["complete"] = pct
media.clean(state, directory)
self.clear_state(directory)
logging.info("Finished encoding")
# vi: sw=4 ts=4 et ai