Proyectos de Subversion LeadersLinked - Services

Rev

Rev 333 | Rev 345 | Ir a la última revisión | 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\Video::extractPoster($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;
    }
    
    
    
}