diff --git a/app/Services/ProBundleExportService.php b/app/Services/ProBundleExportService.php index 41a4442..6e36ce3 100644 --- a/app/Services/ProBundleExportService.php +++ b/app/Services/ProBundleExportService.php @@ -15,6 +15,10 @@ class ProBundleExportService { private const ALLOWED_BLOCK_TYPES = ['information', 'moderation', 'sermon']; + public function __construct( + private readonly MacroResolutionService $macroResolutionService, + ) {} + public function generateBundle(Service $service, string $blockType): string { if (! in_array($blockType, self::ALLOWED_BLOCK_TYPES, true)) { @@ -28,7 +32,7 @@ public function generateBundle(Service $service, string $blockType): string $groupName = ucfirst($blockType); - return $this->buildBundleFromSlides($slides, $groupName); + return $this->buildBundleFromSlides($slides, $groupName, $service, $blockType); } public function generateAgendaItemBundle(ServiceAgendaItem $agendaItem): string @@ -68,11 +72,11 @@ public function generateAgendaItemBundle(ServiceAgendaItem $agendaItem): string ->orderBy('sort_order') ->get(); - return $this->buildBundleFromSlides($slides, $title); + return $this->buildBundleFromSlides($slides, $title, $agendaItem->service, 'agenda_item'); } /** @param \Illuminate\Database\Eloquent\Collection $slides */ - private function buildBundleFromSlides($slides, string $groupName): string + private function buildBundleFromSlides($slides, string $groupName, ?Service $service = null, ?string $partType = null): string { $slideData = []; $mediaFiles = []; @@ -91,11 +95,28 @@ private function buildBundleFromSlides($slides, string $groupName): string $mediaFiles[$imageFilename] = $imageContent; - $slideData[] = [ + $singleSlideData = [ 'media' => $imageFilename, 'format' => 'JPG', 'label' => $slide->original_filename, ]; + + if ($service !== null && $partType !== null) { + $slideIndex = count($slideData); + $totalSlides = $slides->count(); + $macros = $this->macroResolutionService->macrosForSlide( + $service, + $partType, + ['index' => $slideIndex, 'total' => $totalSlides, 'label_id' => null], + ); + + if (! empty($macros)) { + // ProPresenter parser currently supports one `macro` entry per slide + $singleSlideData['macro'] = $macros[0]; + } + } + + $slideData[] = $singleSlideData; } $groups = [