Commit graph

2 commits

Author SHA1 Message Date
Thorsten Bus c3c8f7f50d fix(export): restructure keyvisual/nametag sequence and macro placement
- MacroResolutionService: rank by position specificity (by_label >
  first/last > all_slides) so a broad all_slides macro no longer masks
  first_slide/last_slide assignments
- ProBundleExportService: resolve macros in a second pass over emitted
  slides, so last_slide still matches when files were skipped
- PlaylistExportService: keyvisual is now a transition between content
  items instead of a one-shot fallback; nametags use a unified 3-cue
  sequence (kv -> kv+name 10s auto-next -> kv) for moderator and preacher
- PlaylistExportService: prepend countdown standby slide (clock + kv)
  when the add_countdown_slide setting is enabled
2026-08-03 08:59:54 +02:00
Thorsten Bus fdabaadb89 fix(export): preserve probundle extension and attach slide macros
- store() persisted uploads under Laravel's MIME-guessed extension,
  turning a .probundle (a ZIP) into .zip; embedExportProFile then
  branched on the stored path, missed the bundle branch and embedded
  the raw ZIP as a broken .pro (ProPresenter showed an empty slide).
  Store with the real client extension and derive the bundle type from
  the original filename, treating .zip as a bundle for legacy uploads.
- Skip export .pro/.probundle files that parse to zero content slides,
  recording a German warning instead of injecting an empty slide.
- Attach position macros (first_slide/last_slide/all_slides) per slide
  for information/moderation/sermon parts in the agenda and legacy paths.
- Cover both with ExportProFileProbundleEmbedTest and PlaylistSermonMacroTest.
2026-07-06 11:19:56 +02:00