Sync the bundled .proto definitions with greyshirtguy/ProPresenter7-Proto "Proto 19beta" (dumped from ProPresenter v19 beta build 318767123, 2025-06-05). This pulls in the schema for ProPresenter 19 features including new advertisement groups, custom options, media metadata, prop API v1, transport API, feature flags, PSB workspace, and zone definitions, plus refactored analytics tracked events. Strategy: merge rather than wholesale replace. All Proto 19beta files overwrite our existing copies so we pick up the field/message updates upstream made between 7.16.2 and 19beta. Eleven new .proto files are added: advertisementGroup, analyticsEdit, analyticsMediaManagement, analyticsPowerPoint, analyticsTrackedEvents, analyticsTriggerCue, customOptions, mediaMetadata, proCoreFeatureFlags, psbWorkspace, zone. Three google/protobuf well-known types (any, source_context, type) are added for completeness; only descriptor.proto is actually imported. Five proto files are kept that are not part of Proto 19beta upstream: calendar.proto and keyMappings.proto were extracted from PP binaries to support our parse-calendar and parse-key-mappings tools, while analyticsCapture/Update/WHMStore.proto are retained from the prior 7.16.2 set so existing generated descriptors keep loading. generated/ is regenerated from scratch with `protoc --php_out=generated --proto_path=proto *.proto` (protoc 29.3, google/protobuf PHP 4.33.5). The full PHPUnit suite (369 tests, 1298 assertions) still passes without any source changes - the new schema is wire-compatible with our reference files and high-level wrappers. Documentation references to "v7.16.2" are updated to "Proto 19beta" in LICENSE, doc/formats/pp_song_spec.md, pp_playlist_spec.md, pp_bundle_spec.md, and doc/internal/decisions.md.
142 lines
3.3 KiB
Protocol Buffer
Executable file
142 lines
3.3 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 "action.proto";
|
|
import "cue.proto";
|
|
import "presentation.proto";
|
|
import "playlist.proto";
|
|
import "uuid.proto";
|
|
|
|
message TriggerSource {
|
|
message Library {
|
|
string path = 1;
|
|
string presentation_name = 2;
|
|
}
|
|
|
|
message Playlist {
|
|
.rv.data.UUID identifier = 1;
|
|
.rv.data.UUID item_identifier = 2;
|
|
}
|
|
|
|
oneof Location {
|
|
.rv.data.TriggerSource.Library library_location = 1;
|
|
.rv.data.TriggerSource.Playlist playlist_location = 2;
|
|
.rv.data.TriggerSource.Playlist media_playlist_location = 3;
|
|
.rv.data.TriggerSource.Playlist audio_playlist_location = 4;
|
|
}
|
|
}
|
|
|
|
message TimedPlayback {
|
|
message Sequence {
|
|
message SequenceItem {
|
|
.rv.data.UUID identifier = 1;
|
|
double time = 2;
|
|
.rv.data.TriggerSource trigger_source = 3;
|
|
.rv.data.Action.ContentDestination content_destination = 4;
|
|
double end_time = 7;
|
|
oneof Item {
|
|
.rv.data.Cue cue = 5;
|
|
.rv.data.Action action = 6;
|
|
}
|
|
}
|
|
|
|
repeated .rv.data.TimedPlayback.Sequence.SequenceItem sequence = 1;
|
|
.rv.data.Action.ContentDestination content_destination = 2;
|
|
.rv.data.Presentation presentation = 3;
|
|
.rv.data.Playlist playlist = 4;
|
|
}
|
|
|
|
message Timing {
|
|
message LayerTransport {
|
|
int32 layer = 1;
|
|
}
|
|
|
|
message SMPTETimecode {
|
|
enum Format {
|
|
FORMAT_24_FPS = 0;
|
|
FORMAT_25_FPS = 1;
|
|
FORMAT_29_97_FPS = 2;
|
|
FORMAT_30_FPS = 3;
|
|
}
|
|
|
|
string device_identifier = 1;
|
|
int32 channel = 2;
|
|
.rv.data.TimedPlayback.Timing.SMPTETimecode.Format format = 3;
|
|
double offset = 4;
|
|
}
|
|
|
|
message Internal {
|
|
double duration = 1;
|
|
bool should_loop = 2;
|
|
}
|
|
|
|
oneof Source {
|
|
.rv.data.TimedPlayback.Timing.LayerTransport layer_transport = 1;
|
|
.rv.data.TimedPlayback.Timing.SMPTETimecode smpte_timecode = 2;
|
|
.rv.data.TimedPlayback.Timing.Internal internal = 3;
|
|
}
|
|
}
|
|
|
|
message Update {
|
|
message Play {
|
|
}
|
|
|
|
message Record {
|
|
bool is_recording = 1;
|
|
}
|
|
|
|
message Pause {
|
|
}
|
|
|
|
message Reset {
|
|
}
|
|
|
|
message JumpToTime {
|
|
double time = 1;
|
|
}
|
|
|
|
message StartScrub {
|
|
double time = 1;
|
|
}
|
|
|
|
message EndScrub {
|
|
double time = 2;
|
|
}
|
|
|
|
message Duration {
|
|
double duration = 1;
|
|
}
|
|
|
|
message Loop {
|
|
bool loop = 1;
|
|
}
|
|
|
|
message MonitorSource {
|
|
bool enable = 1;
|
|
}
|
|
|
|
oneof ActionType {
|
|
.rv.data.TimedPlayback.Update.Play play = 1;
|
|
.rv.data.TimedPlayback.Update.Record record = 2;
|
|
.rv.data.TimedPlayback.Update.Pause pause = 3;
|
|
.rv.data.TimedPlayback.Update.Reset reset = 4;
|
|
.rv.data.TimedPlayback.Update.JumpToTime jump_to_time = 5;
|
|
.rv.data.TimedPlayback.Update.StartScrub start_scrub = 6;
|
|
.rv.data.TimedPlayback.Update.EndScrub end_scrub = 7;
|
|
.rv.data.TimedPlayback.Update.Duration duration = 8;
|
|
.rv.data.TimedPlayback.Update.Loop loop = 9;
|
|
.rv.data.TimedPlayback.Sequence update_sequence = 10;
|
|
.rv.data.TimedPlayback.Update.MonitorSource monitor_source = 11;
|
|
}
|
|
}
|
|
|
|
.rv.data.TimedPlayback.Sequence sequence = 1;
|
|
.rv.data.TimedPlayback.Timing timing = 2;
|
|
}
|
|
|