Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
digitalascetic/batch-util / ProgressBarMonitor.php
Size: Mime:
<?php
/**
 * Created by IntelliJ IDEA.
 * User: martino
 * Date: 08/03/17
 * Time: 01:04
 */

namespace DigitalAscetic\BatchUtil;


use ReflectionClass;
use Symfony\Component\Console\Helper\ProgressBar;

/**
 * Class ProgressBarMonitor
 * @package DigitalAscetic\BatchUtil
 */
class ProgressBarMonitor extends AbstractProgressMonitor
{

    /** @var  ProgressBar */
    private ProgressBar $progressBar;

    /**
     * ProgressBarMonitor constructor.
     * @param ProgressBar $progressBar
     */
    public function __construct(ProgressBar $progressBar)
    {
        parent::__construct();
        $this->progressBar = $progressBar;
    }

    public function start($data = null): void
    {
        $this->progressBar->start();
        $this->started = true;
    }

    public function advance($data = null): void
    {
        $this->progressBar->advance();
    }

    public function finish($data = null): void
    {
        $this->progressBar->finish();
        $this->finished = true;
    }

    public function message($data = null): void
    {
        $this->progressBar->setMessage($data);
    }

    /**
     * @param int $count
     *
     * @throws \ReflectionException
     */
    public function setTotalSteps(int $count = 0): void
    {
        // ProgressBar setMaxSteps method is private...
        $reflection = new ReflectionClass($this->progressBar);
        $method = $reflection->getMethod('setMaxSteps');
        $method->setAccessible(true);
        $method->invoke($this->progressBar, $count);
        $this->setDefaultRedrawFrequency();
    }

    public function setRedrawFrequency(float $freq)
    {
        $this->progressBar->setRedrawFrequency($freq);
    }

    protected function setDefaultRedrawFrequency()
    {
        $this->progressBar->setRedrawFrequency($this->progressBar->getMaxSteps() / 1000);
    }

}