elevenlabs_field-1.0.0-beta7/src/Batch/BatchGenerate.php
src/Batch/BatchGenerate.php
<?php namespace Drupal\elevenlabs_field\Batch; use Drupal\Core\Entity\ContentEntityInterface; /** * Batch Job. */ class BatchGenerate { /** * {@inheritdoc} */ public static function setBatchJob(ContentEntityInterface $entity, $field) { $operations = []; foreach ($entity->{$field} as $key => $value) { $operations[] = [ '\Drupal\elevenlabs_field\Batch\BatchGenerate::generateItem', [ [ 'entity' => $entity, 'item' => $value, 'field' => $field, 'key' => $key, ], ], ]; } $batch = [ 'title' => 'Creating Audio', 'init_message' => 'Generating Audios', 'operations' => $operations, 'finished' => '\Drupal\elevenlabs_field\Batch\BatchGenerate::finishedBatching', ]; batch_set($batch); } /** * Batch function. */ public static function generateItem($item, &$context) { $eItem = $item['item']; // If already set. if ($eItem->target_id || !$eItem->text) { return; } $generator = \Drupal::service('elevenlabs_field.generator_service'); $model = $generator->validateModel($eItem->model_id, $eItem->getEntity()); $data = $generator->generateFile($eItem->text, $eItem->speaker, $eItem->getFieldDefinition(), $model, [ 'stability' => ($eItem->stability / 100), 'similarity_boost' => ($eItem->similarity_boost / 100), 'style' => ($eItem->style_exaggeration / 100), 'use_speaker_boost' => $eItem->speaker_boost ? TRUE : FALSE, ]); if (!empty($data['file'])) { // Remove old data if exists. if ($eItem->target_id) { $generator->removeFile($eItem->target_id); } $eItem->entity = $data['file']; $eItem->set('target_id', $data['file']->id()); $eItem->set('history_item_id', $data['history_item_id']); } // Resave them. if (!isset($context['results']['entity'])) { $context['results']['entity'] = $item['entity']; } $context['results']['entity']->{$item['field']}[$item['key']] = $eItem; } /** * Finished function. */ public static function finishedBatching($success, $results, $operations) { if (isset($results['entity'])) { $results['entity']->save(); } } }