You are here

MediaPdfThumbnailQueueManager.php in Media PDF Thumbnail 8.4

File

src/Manager/MediaPdfThumbnailQueueManager.php
View source
<?php

namespace Drupal\media_pdf_thumbnail\Manager;

use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\Queue\QueueFactory;
use Drupal\Core\Queue\QueueWorkerManagerInterface;
use Drupal\Core\Queue\SuspendQueueException;
use Drupal\media\MediaInterface;
use Drupal\media_pdf_thumbnail\Form\BundlesSettingsForm;
use Drupal\media_pdf_thumbnail\Plugin\QueueWorker\MediaPdfThumbnailGeneratorCronQueue;
use Drupal\media_pdf_thumbnail\Plugin\QueueWorker\MediaPdfThumbnailGeneratorInstantQueue;
use Exception;

/**
 * Class MediaPdfThumbnailQueueManager
 *
 * @package Drupal\media_pdf_thumbnail\Manager
 */
class MediaPdfThumbnailQueueManager {

  /**
   * @var \Drupal\Core\Queue\QueueInterface
   */
  protected $queue;

  /**
   * @var \Drupal\Core\Queue\QueueInterface
   */
  protected $cronQueue;

  /**
   * @var object
   */
  protected $queueWorker;

  /**
   * @var \Drupal\Core\Logger\LoggerChannelInterface
   */
  protected $logger;

  /**
   * @var \Drupal\Core\Config\ImmutableConfig
   */
  protected $mediaPdfThumbnailConfig;

  /**
   * MediaPdfThumbnailQueueManager constructor.
   *
   * @param \Drupal\Core\Queue\QueueFactory $queueFactory
   * @param \Drupal\Core\Queue\QueueWorkerManagerInterface $queueWorkerManager
   * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $loggerChannelFactory
   * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory
   *
   * @throws \Drupal\Component\Plugin\Exception\PluginException
   */
  public function __construct(QueueFactory $queueFactory, QueueWorkerManagerInterface $queueWorkerManager, LoggerChannelFactoryInterface $loggerChannelFactory, ConfigFactoryInterface $configFactory) {
    $this->queue = $queueFactory
      ->get(MediaPdfThumbnailGeneratorInstantQueue::ID);
    $this->cronQueue = $queueFactory
      ->get(MediaPdfThumbnailGeneratorCronQueue::ID);
    $this->queueWorker = $queueWorkerManager
      ->createInstance(MediaPdfThumbnailGeneratorInstantQueue::ID);
    $this->logger = $loggerChannelFactory
      ->get('MediaPdfThumbnail - Queue manager');
    $this->mediaPdfThumbnailConfig = $configFactory
      ->get(BundlesSettingsForm::SETTINGS);
  }

  /**
   * @param \Drupal\media\MediaInterface $media
   * @param $pdfFieldName
   * @param $thumbnailType
   * @param false $cron
   */
  public function createItem(MediaInterface $media, $pdfFieldName, $thumbnailType, bool $cron = FALSE) {

    // Create item.
    $data = new \stdClass();
    $data->media = $media;
    $data->field = $pdfFieldName;
    $data->thumbnailType = $thumbnailType;
    if ($cron) {
      $this->cronQueue
        ->createItem($data);
    }
    else {
      $this->queue
        ->createItem($data);
    }
  }
  public function executeQueue() {

    // Execute queue.
    while ($item = $this->queue
      ->claimItem()) {
      try {
        $this->queueWorker
          ->processItem($item->data);
        $this->queue
          ->deleteItem($item);
      } catch (SuspendQueueException $e) {
        $this->queue
          ->releaseItem($item);
        $this->logger
          ->error($e
          ->getMessage());
        break;
      } catch (Exception $e) {
        $this->logger
          ->error($e
          ->getMessage());
      }
    }
    $this->queue
      ->deleteQueue();
  }

  /**
   * @return int
   */
  public function numberOfItems() {
    return $this->queue
      ->numberOfItems();
  }

}

Classes

Namesort descending Description
MediaPdfThumbnailQueueManager Class MediaPdfThumbnailQueueManager