propresenter-php/proto/slide.proto
Thorsten Bus 22ba4aff7d refactor: make repo Composer-compatible by moving php/ to root and ref/ to doc/reference_samples
- Move src/, tests/, bin/, generated/, proto/, composer.json, composer.lock, phpunit.xml from php/ to repo root
- Move ref/ to doc/reference_samples/ for better organization
- Remove vendor/ from git tracking (now properly gitignored)
- Update all test file paths (dirname adjustments and ref/ -> doc/reference_samples/)
- Update all documentation paths (AGENTS.md, doc/*.md)
- Remove php.bak/ directory
- All 252 tests pass
2026-03-30 13:26:29 +02:00

516 lines
18 KiB
Protocol Buffer
Executable file

syntax = "proto3";
package rv.data;
option cc_enable_arenas = true;
option csharp_namespace = "Pro.SerializationInterop.RVProtoData";
option swift_prefix = "RVData_";
import "alignmentGuide.proto";
import "color.proto";
import "effects.proto";
import "graphicsData.proto";
import "timers.proto";
import "url.proto";
import "uuid.proto";
message Slide {
message Element {
message Build {
enum Start {
START_ON_CLICK = 0;
START_WITH_PREVIOUS = 1;
START_AFTER_PREVIOUS = 2;
START_WITH_SLIDE = 3;
}
.rv.data.UUID uuid = 1;
.rv.data.UUID elementUUID = 2;
.rv.data.Slide.Element.Build.Start start = 3;
double delayTime = 4;
.rv.data.Transition transition = 5;
}
message ChildBuild {
.rv.data.UUID uuid = 1;
.rv.data.Slide.Element.Build.Start start = 2;
double delayTime = 3;
uint32 index = 4;
}
message DataLink {
message RSSFeed {
enum ContentType {
CONTENT_TYPE_TITLE_ONLY = 0;
CONTENT_TYPE_TITLE_AND_DESCRIPTION = 1;
}
.rv.data.URL url = 1;
.rv.data.Slide.Element.DataLink.RSSFeed.ContentType content = 2;
string text_delimiter = 3;
}
message FileFeed {
.rv.data.URL url = 1;
}
message Ticker {
message TextType {
string text = 1;
}
message RSSType {
enum ContentType {
CONTENT_TYPE_TITLE_ONLY = 0;
CONTENT_TYPE_TITLE_AND_DESCRIPTION = 1;
}
.rv.data.URL url = 1;
.rv.data.Slide.Element.DataLink.Ticker.RSSType.ContentType content = 2;
}
message FileType {
.rv.data.URL url = 1;
}
double play_rate = 4;
bool should_loop = 5;
double loop_delay = 6;
string text_delimiter = 7;
oneof SourceType {
.rv.data.Slide.Element.DataLink.Ticker.TextType text_type = 1;
.rv.data.Slide.Element.DataLink.Ticker.RSSType rss_type = 2;
.rv.data.Slide.Element.DataLink.Ticker.FileType file_type = 3;
}
}
message AlternateElementText {
enum TextTransformOption {
TEXT_TRANSFORM_OPTION_NONE = 0;
TEXT_TRANSFORM_OPTION_REMOVE_LINE_RETURNS = 1;
TEXT_TRANSFORM_OPTION_ONE_WORD_PER_LINE = 2;
TEXT_TRANSFORM_OPTION_ONE_CHARACTER_PER_LINE = 3;
}
.rv.data.UUID other_element_uuid = 1;
string other_element_name = 2;
uint32 text_transform_options = 3;
.rv.data.Slide.Element.DataLink.AlternateElementText.TextTransformOption text_transform = 4;
}
message CCLIText {
}
message ColorTrigger {
double time = 1;
.rv.data.Color color = 2;
}
message TimerText {
.rv.data.UUID timer_uuid = 1;
string timer_name = 2;
.rv.data.Timer.Format timer_format = 3;
string timer_format_string = 4;
repeated .rv.data.Slide.Element.DataLink.ColorTrigger color_triggers = 5;
}
message ClockText {
reserved 2;
reserved 3;
reserved 4;
string clock_format_string = 1;
.rv.data.Clock.Format format = 5;
}
message ChordChart {
}
message OutputScreen {
.rv.data.UUID screen_id = 1;
string screen_name = 2;
}
message PCOLive {
reserved 1;
enum Theme {
PCOLIVE_THEME_LIGHT = 0;
PCOLIVE_THEME_DARK = 1;
}
enum CountdownType {
COUNTDOWN_TYPE_FULL_ITEM_LENGTH = 0;
COUNTDOWN_TYPE_END_ITEM_ON_TIME = 1;
COUNTDOWN_TYPE_END_SERVICE_ON_TIME = 2;
}
.rv.data.Slide.Element.DataLink.PCOLive.Theme theme = 2;
.rv.data.Slide.Element.DataLink.PCOLive.CountdownType countdown_type = 3;
}
message AlternateElementFill {
.rv.data.UUID other_element_uuid = 1;
string other_element_name = 2;
}
message VisibilityLink {
message Condition {
message ElementVisibility {
enum ElementVisibilityCriterion {
ELEMENT_VISIBILITY_CRITERION_HAS_TEXT = 0;
ELEMENT_VISIBILITY_CRITERION_HAS_NO_TEXT = 1;
}
.rv.data.UUID other_element_uuid = 1;
string other_element_name = 2;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.ElementVisibility.ElementVisibilityCriterion visibility_criterion = 3;
}
message TimerVisibility {
enum TimerVisibilityCriterion {
TIMER_VISIBILITY_CRITERION_HAS_TIME_REMAINING = 0;
TIMER_VISIBILITY_CRITERION_HAS_EXPIRED = 1;
TIMER_VISIBILITY_CRITERION_IS_RUNNING = 2;
TIMER_VISIBILITY_CRITERION_NOT_RUNNING = 3;
}
.rv.data.UUID timer_uuid = 1;
string timer_name = 2;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.TimerVisibility.TimerVisibilityCriterion visibility_criterion = 3;
}
message VideoCountdownVisibility {
enum VideoCountdownVisibilityCriterion {
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_HAS_TIME_REMAINING = 0;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_HAS_EXPIRED = 1;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_IS_RUNNING = 2;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_NOT_RUNNING = 3;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_LOOPING = 4;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_NOT_LOOPING = 5;
}
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.VideoCountdownVisibility.VideoCountdownVisibilityCriterion visibility_criterion = 1;
}
message AudioCountdownVisibility {
enum AudioCountdownVisibilityCriterion {
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_HAS_TIME_REMAINING = 0;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_HAS_EXPIRED = 1;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_IS_RUNNING = 2;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_NOT_RUNNING = 3;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_LOOPING = 4;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_NOT_LOOPING = 5;
}
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.AudioCountdownVisibility.AudioCountdownVisibilityCriterion visibility_criterion = 1;
}
message CaptureSessionVisibility {
enum CaptureSessionVisibilityCriterion {
CAPTURE_SESSION_VISIBILITY_CRITERION_ACTIVE = 0;
CAPTURE_SESSION_VISIBILITY_CRITERION_INACTIVE = 1;
}
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.CaptureSessionVisibility.CaptureSessionVisibilityCriterion visibility_criterion = 1;
}
message VideoInputVisibility {
enum VideoInputVisibilityCriterion {
VIDEO_INPUT_VISIBILITY_CRITERION_ACTIVE = 0;
VIDEO_INPUT_VISIBILITY_CRITERION_INACTIVE = 1;
}
int32 video_input_index = 1;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.VideoInputVisibility.VideoInputVisibilityCriterion visibility_criterion = 2;
}
oneof ConditionType {
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.ElementVisibility element_visibility = 1;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.TimerVisibility timer_visibility = 2;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.VideoCountdownVisibility video_countdown_visibility = 3;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.CaptureSessionVisibility capture_session_visibility = 4;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.VideoInputVisibility video_input_visibility = 5;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.AudioCountdownVisibility audio_countdown_visibility = 6;
}
}
enum VisibilityCriterion {
VISIBILITY_CRITERION_ALL = 0;
VISIBILITY_CRITERION_ANY = 1;
VISIBILITY_CRITERION_NONE = 2;
}
.rv.data.Slide.Element.DataLink.VisibilityLink.VisibilityCriterion visibility_criterion = 1;
repeated .rv.data.Slide.Element.DataLink.VisibilityLink.Condition conditions = 2;
}
message SlideText {
enum TextSourceOption {
TEXT_SOURCE_OPTION_TEXT = 0;
TEXT_SOURCE_OPTION_NOTES = 1;
TEXT_SOURCE_OPTION_ELEMENT_MATCHING_NAME = 2;
}
.rv.data.Slide.Element.DataLink.SlideSourceType source_slide = 1;
.rv.data.Slide.Element.DataLink.SlideText.TextSourceOption source_option = 2;
bool preserve_notes_format = 3;
string name_to_match = 4;
.rv.data.Slide.Element.DataLink.AlternateElementText.TextTransformOption element_text_transform = 5;
}
message SlideImage {
.rv.data.Slide.Element.DataLink.SlideSourceType source_slide = 1;
}
message StageMessage {
bool should_flash = 1;
.rv.data.Color flash_color = 2;
}
message VideoCountdown {
enum VideoCountdownSource {
VIDEO_COUNTDOWN_SOURCE_PRESENTATION = 0;
VIDEO_COUNTDOWN_SOURCE_ANNOUNCEMENT = 1;
}
.rv.data.Timer.Format timer_format = 1;
string timer_format_string = 2;
repeated .rv.data.Slide.Element.DataLink.ColorTrigger color_triggers = 3;
bool ignore_looping_videos = 4;
.rv.data.Slide.Element.DataLink.VideoCountdown.VideoCountdownSource video_countdown_source = 5;
}
message AudioCountdown {
.rv.data.Timer.Format timer_format = 1;
string timer_format_string = 2;
repeated .rv.data.Slide.Element.DataLink.ColorTrigger color_triggers = 3;
bool ignore_looping_audio = 4;
}
message GroupName {
.rv.data.Slide.Element.DataLink.GroupSourceType groupSource = 1;
}
message GroupColor {
.rv.data.Slide.Element.DataLink.GroupSourceType groupSource = 1;
}
message SlideLabelText {
.rv.data.Slide.Element.DataLink.SlideLabelSource slide_label_source = 1;
}
message SlideLabelColor {
.rv.data.Slide.Element.DataLink.SlideLabelSource slide_label_source = 1;
}
message PresentationNotes {
}
message Presentation {
enum PresentationSource {
PRESENTATION_SOURCE_PRESENTATION = 0;
PRESENTATION_SOURCE_ANNOUNCEMENT = 1;
}
.rv.data.Slide.Element.DataLink.Presentation.PresentationSource presentation_source = 1;
}
message PlaylistItem {
enum PlaylistItemSourceType {
PLAYLIST_ITEM_SOURCE_TYPE_CURRENT = 0;
PLAYLIST_ITEM_SOURCE_TYPE_NEXT = 1;
PLAYLIST_ITEM_SOURCE_TYPE_CURRENT_HEADER = 2;
PLAYLIST_ITEM_SOURCE_TYPE_NEXT_HEADER = 3;
PLAYLIST_ITEM_SOURCE_TYPE_PARENT_PLAYLIST = 4;
}
.rv.data.Slide.Element.DataLink.PlaylistItem.PlaylistItemSourceType playlistItemSource = 1;
bool showArrangement = 2;
}
message AutoAdvanceTimeRemaining {
enum AutoAdvanceSource {
AUTO_ADVANCE_SOURCE_PRESENTATION = 0;
AUTO_ADVANCE_SOURCE_ANNOUNCEMENT = 1;
}
.rv.data.Slide.Element.DataLink.AutoAdvanceTimeRemaining.AutoAdvanceSource auto_advance_source = 1;
.rv.data.Timer.Format timer_format = 2;
}
message CaptureStatusText {
message StatusText {
}
message ElapsedTime {
.rv.data.Timer.Format timer_format = 1;
}
oneof TextType {
.rv.data.Slide.Element.DataLink.CaptureStatusText.StatusText status_text = 1;
.rv.data.Slide.Element.DataLink.CaptureStatusText.ElapsedTime elapsed_time = 2;
}
}
message CaptureStatusColor {
}
message SlideCount {
enum SlideCountSourceType {
SLIDE_COUNT_SOURCE_TYPE_CURRENT = 0;
SLIDE_COUNT_SOURCE_TYPE_REMAINING = 1;
SLIDE_COUNT_SOURCE_TYPE_TOTAL = 2;
}
.rv.data.Slide.Element.DataLink.SlideCount.SlideCountSourceType slideCountSourceType = 1;
}
message PlaybackMarkerIdentifier {
enum Type {
PLAYBACK_MARKER_IDENTIFIER_FIRST = 0;
PLAYBACK_MARKER_IDENTIFIER_PREVIOUS = 1;
PLAYBACK_MARKER_IDENTIFIER_NEXT = 2;
PLAYBACK_MARKER_IDENTIFIER_LAST = 3;
PLAYBACK_MARKER_IDENTIFIER_NAME = 4;
}
enum Destination {
PLAYBACK_MARKER_DESTINATION_PRESENTATION = 0;
PLAYBACK_MARKER_DESTINATION_ANNOUNCEMENT = 1;
PLAYBACK_MARKER_DESTINATION_AUDIO = 2;
}
.rv.data.Slide.Element.DataLink.PlaybackMarkerIdentifier.Destination destination = 1;
.rv.data.Slide.Element.DataLink.PlaybackMarkerIdentifier.Type type = 2;
string name = 3;
}
message PlaybackMarkerText {
message Name {
}
message Time {
.rv.data.Timer.Format format = 1;
}
.rv.data.Slide.Element.DataLink.PlaybackMarkerIdentifier identifier = 1;
bool should_use_marker_color = 4;
oneof TextType {
.rv.data.Slide.Element.DataLink.PlaybackMarkerText.Name name = 2;
.rv.data.Slide.Element.DataLink.PlaybackMarkerText.Time time = 3;
}
}
message ChordProChart {
}
message TimecodeText {
}
message TimecodeStatus {
}
enum SlideSourceType {
SLIDE_SOURCE_TYPE_CURRENT_SLIDE = 0;
SLIDE_SOURCE_TYPE_NEXT_SLIDE = 1;
}
enum GroupSourceType {
GROUP_SOURCE_TYPE_CURRENT_SLIDE = 0;
GROUP_SOURCE_TYPE_NEXT_SLIDE = 1;
GROUP_SOURCE_TYPE_NEXT_GROUP = 2;
}
enum SlideLabelSource {
SLIDE_LABEL_SOURCE_CURRENT_SLIDE = 0;
SLIDE_LABEL_SOURCE_NEXT_SLIDE = 1;
}
oneof PropertyType {
.rv.data.Slide.Element.DataLink.Ticker ticker = 1;
.rv.data.Slide.Element.DataLink.AlternateElementText alternate_text = 2;
.rv.data.Slide.Element.DataLink.TimerText timer_text = 3;
.rv.data.Slide.Element.DataLink.ClockText clock_text = 4;
.rv.data.Slide.Element.DataLink.ChordChart chord_chart = 5;
.rv.data.Slide.Element.DataLink.OutputScreen output_screen = 6;
.rv.data.Slide.Element.DataLink.PCOLive pco_live = 7;
.rv.data.Slide.Element.DataLink.AlternateElementFill alternate_fill = 8;
.rv.data.Slide.Element.DataLink.VisibilityLink visibility_link = 9;
.rv.data.Slide.Element.DataLink.SlideText slide_text = 10;
.rv.data.Slide.Element.DataLink.StageMessage stage_message = 11;
.rv.data.Slide.Element.DataLink.VideoCountdown video_countdown = 12;
.rv.data.Slide.Element.DataLink.SlideImage slide_image = 13;
.rv.data.Slide.Element.DataLink.CCLIText ccli_text = 14;
.rv.data.Slide.Element.DataLink.GroupName group_name = 15;
.rv.data.Slide.Element.DataLink.GroupColor group_color = 16;
.rv.data.Slide.Element.DataLink.PresentationNotes presentation_notes = 17;
.rv.data.Slide.Element.DataLink.PlaylistItem playlist_item = 18;
.rv.data.Slide.Element.DataLink.AutoAdvanceTimeRemaining auto_advance_time_remaining = 19;
.rv.data.Slide.Element.DataLink.CaptureStatusText capture_status_text = 20;
.rv.data.Slide.Element.DataLink.CaptureStatusColor capture_status_color = 21;
.rv.data.Slide.Element.DataLink.SlideCount slide_count = 22;
.rv.data.Slide.Element.DataLink.AudioCountdown audio_countdown = 23;
.rv.data.Slide.Element.DataLink.Presentation presentation = 24;
.rv.data.Slide.Element.DataLink.SlideLabelText slide_Label_Text = 25;
.rv.data.Slide.Element.DataLink.SlideLabelColor slide_Label_Color = 26;
.rv.data.Slide.Element.DataLink.RSSFeed rss_feed = 27;
.rv.data.Slide.Element.DataLink.FileFeed file_feed = 28;
.rv.data.Slide.Element.DataLink.ChordProChart chord_pro_chart = 29;
.rv.data.Slide.Element.DataLink.PlaybackMarkerText playback_marker_text = 30;
.rv.data.Slide.Element.DataLink.PlaybackMarkerIdentifier playback_marker_color = 32;
.rv.data.Slide.Element.DataLink.TimecodeText timecode_text = 33;
.rv.data.Slide.Element.DataLink.TimecodeStatus timecode_status = 34;
}
}
message TextScroller {
enum Direction {
DIRECTION_LEFT = 0;
DIRECTION_RIGHT = 1;
DIRECTION_UP = 2;
DIRECTION_DOWN = 3;
}
bool should_scroll = 1;
double scroll_rate = 2;
bool should_repeat = 3;
double repeat_distance = 4;
.rv.data.Slide.Element.TextScroller.Direction scrolling_direction = 5;
bool starts_off_screen = 6;
double fade_left = 7;
double fade_right = 8;
}
enum TextRevealType {
TEXT_REVEAL_TYPE_NONE = 0;
TEXT_REVEAL_TYPE_BULLET = 1;
TEXT_REVEAL_TYPE_UNDERLINE = 2;
}
enum Info {
INFO_NONE = 0;
INFO_IS_TEMPLATE_ELEMENT = 1;
INFO_IS_TEXT_ELEMENT = 2;
INFO_IS_TEXT_TICKER = 4;
}
.rv.data.Graphics.Element element = 1;
.rv.data.Slide.Element.Build build_in = 2;
.rv.data.Slide.Element.Build build_out = 3;
uint32 info = 4;
.rv.data.Slide.Element.TextRevealType reveal_type = 5;
repeated .rv.data.Slide.Element.DataLink data_links = 6;
repeated .rv.data.Slide.Element.ChildBuild childBuilds = 7;
uint32 reveal_from_index = 8;
.rv.data.Slide.Element.TextScroller text_scroller = 9;
}
repeated .rv.data.Slide.Element elements = 1;
repeated .rv.data.UUID element_build_order = 2;
repeated .rv.data.AlignmentGuide guidelines = 3;
bool draws_background_color = 4;
.rv.data.Color background_color = 5;
.rv.data.Graphics.Size size = 6;
.rv.data.UUID uuid = 7;
}