Proyectos de Subversion LeadersLinked - Services

Rev

Rev 345 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php
declare(strict_types = 1);
namespace LeadersLinked\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Log\LoggerInterface;
use LeadersLinked\Mapper\VideoConvertMapper;
use LeadersLinked\Model\VideoConvert;
use Laminas\Mvc\I18n\Translator;
use LeadersLinked\Cache\CacheInterface;
use LeadersLinked\Library\Storage;

class ProcessQueueVideoConvertCommand extends Command
{

    /**
     *
     * @var \Laminas\Db\Adapter\AdapterInterface
     */
    private $adapter;

    /**
     *
     * @var \LeadersLinked\Cache\CacheInterface
     */
    private $cache;

    /**
     *
     * @var \Laminas\Log\LoggerInterface
     */
    private $logger;

    /**
     *
     * @var array
     */
    private $config;

    /**
     *
     * @var \Laminas\Mvc\I18n\Translator
     */
    private $translator;

    /**
     *
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
     * @param \LeadersLinked\Cache\CacheInterface $cache
     * @param
     *            \Laminas\Log\LoggerInterface
     * @param array $config
     * @param \Laminas\Mvc\I18n\Translator $translator
     */
    public function __construct($adapter, $cache, $logger, $config, $translator)
    {
        $this->adapter = $adapter;
        $this->cache = $cache;
        $this->logger = $logger;
        $this->config = $config;
        $this->translator = $translator;

        parent::__construct();
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $checkExists = true;
        $videos_procesados = 0;
        $videos_ignorados = 0;

        $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
        $videos = $videoConvertMapper->fetchBatch();

        $storage = Storage::getInstance($this->config, $this->adapter);

        foreach ($videos as $video) {

            if ($video->type == VideoConvert::TYPE_FEED) {
                $targe_path = $storage->getPathFeed();
            } else if ($video->type == VideoConvert::TYPE_MICRO_LEARNING_SLIDES) {
                $targe_path = $storage->getPathMicrolearningSlide();
            } else if ($video->type == VideoConvert::TYPE_MEDIA) {
                $targe_path = $storage->getPathMedia();
            } else if ($video->type == VideoConvert::TYPE_HABIT_CONTENT) {
                $targe_path = $storage->getPathHabitContent();
            } else {
                $targe_path = '';
            }

            if (empty($targe_path)) {
                $videos_ignorados ++;
                $videoConvertMapper->delete($video);
                continue;
            }

            $directory = $storage->getDirectoryFromDisk($targe_path, $video->uuid);

            $currentfile = $directory . DIRECTORY_SEPARATOR . $video->filename;
            $posterfile = $directory . DIRECTORY_SEPARATOR . substr($video->filename, 0, strrpos($video->filename, '.')) . '.jpg';

            if (! file_exists($currentfile)) {
                $videos_ignorados ++;
                $videoConvertMapper->delete($video);
                continue;
            }

            $s = explode('.', $video->filename);

            $tmpfile = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $s[0] . '-tmp.' . $s[1];
            $newfile = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $video->filename;

            if (! @copy($currentfile, $tmpfile)) {
                $videos_ignorados ++;
                $videoConvertMapper->delete($video);
                continue;
            }

            if (file_exists($tmpfile)) {

                if (! file_exists($posterfile)) {
                    \LeadersLinked\Library\Storage::extractPosterFromVideo($tmpfile, $posterfile);
                }

                $cmd = "/usr/bin/ffmpeg -y -i $tmpfile  -preset medium -crf 24 -codec:v libx264 $newfile";
                $output->writeln("command  : $cmd");
                exec($cmd);

                @copy($newfile, $currentfile);

                @unlink($tmpfile);
                @unlink($newfile);

                $videos_procesados ++;
                $videoConvertMapper->delete($video);
            } else {
                $videoConvertMapper->delete($video);
                $output->writeln("El video no existe  : " . $video->filename);
                $videos_ignorados ++;
            }
        }

        $output->writeln('Videos procesados:' . $videos_procesados);
        $output->writeln('Videos ignorados:' . $videos_ignorados);

        $output->writeln('Fin del proceso de la cola de  Videos');

        return 0;
    }
}