PHP 8.4 library and CLI tools to read, modify, and generate ProPresenter 7 files: songs (.pro), playlists (.proplaylist), bundles (.probundle), themes, and the global library files (Macros, Labels, Groups, ClearGroups, CCLI, Messages, Timers, Stage, Workspace, Props, TestPatterns, Calendar, KeyMappings, CommunicationDevices). Built on the MIT-licensed ProPresenter7-Proto schema by greyshirtguy (v7.16.2). Includes 18 CLI parsers, comprehensive API docs in doc/, binary-format specs, and a synthetic 369-test PHPUnit suite covering RTF extraction, translation slides, ZIP64 repair, round-trip fidelity, and end-to-end generation.
124 lines
2.9 KiB
Protocol Buffer
Executable file
124 lines
2.9 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 "proApiV1LayerType.proto";
|
|
import "uuid.proto";
|
|
|
|
message API_v1_Transport_Request {
|
|
message Play {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
}
|
|
|
|
message Pause {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
}
|
|
|
|
message SkipBackward {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
double seconds = 2;
|
|
}
|
|
|
|
message SkipForward {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
double seconds = 2;
|
|
}
|
|
|
|
message GoToEnd {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
double seconds = 2;
|
|
}
|
|
|
|
message GetTime {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
}
|
|
|
|
message PutTime {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
double seconds = 2;
|
|
}
|
|
|
|
message GetAutoAdvance {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
}
|
|
|
|
message DeleteAutoAdvance {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
}
|
|
|
|
message GetCurrentMedia {
|
|
.rv.data.API_v1_LayerType layer = 1;
|
|
}
|
|
|
|
oneof Request {
|
|
.rv.data.API_v1_Transport_Request.Play play = 1;
|
|
.rv.data.API_v1_Transport_Request.Pause pause = 2;
|
|
.rv.data.API_v1_Transport_Request.SkipBackward skip_backward = 3;
|
|
.rv.data.API_v1_Transport_Request.SkipForward skip_forward = 4;
|
|
.rv.data.API_v1_Transport_Request.GoToEnd go_to_end = 5;
|
|
.rv.data.API_v1_Transport_Request.GetTime get_time = 6;
|
|
.rv.data.API_v1_Transport_Request.PutTime put_time = 7;
|
|
.rv.data.API_v1_Transport_Request.GetAutoAdvance get_auto_advance = 8;
|
|
.rv.data.API_v1_Transport_Request.DeleteAutoAdvance delete_auto_advance = 9;
|
|
.rv.data.API_v1_Transport_Request.GetCurrentMedia get_current_media = 10;
|
|
}
|
|
}
|
|
|
|
message API_v1_Transport_Response {
|
|
message Play {
|
|
}
|
|
|
|
message Pause {
|
|
}
|
|
|
|
message SkipBackward {
|
|
}
|
|
|
|
message SkipForward {
|
|
}
|
|
|
|
message GoToEnd {
|
|
}
|
|
|
|
message GetTime {
|
|
double seconds = 1;
|
|
}
|
|
|
|
message PutTime {
|
|
}
|
|
|
|
message GetAutoAdvance {
|
|
bool auto_advance = 1;
|
|
}
|
|
|
|
message DeleteAutoAdvance {
|
|
}
|
|
|
|
message GetCurrentMedia {
|
|
bool is_playing = 1;
|
|
.rv.data.UUID uuid = 2;
|
|
string name = 3;
|
|
string artist = 4;
|
|
bool audio_only = 5;
|
|
double duration = 6;
|
|
}
|
|
|
|
oneof Response {
|
|
.rv.data.API_v1_Transport_Response.Play play = 1;
|
|
.rv.data.API_v1_Transport_Response.Pause pause = 2;
|
|
.rv.data.API_v1_Transport_Response.SkipBackward skip_backward = 3;
|
|
.rv.data.API_v1_Transport_Response.SkipForward skip_forward = 4;
|
|
.rv.data.API_v1_Transport_Response.GoToEnd go_to_end = 5;
|
|
.rv.data.API_v1_Transport_Response.GetTime get_time = 6;
|
|
.rv.data.API_v1_Transport_Response.PutTime put_time = 7;
|
|
.rv.data.API_v1_Transport_Response.GetAutoAdvance get_auto_advance = 8;
|
|
.rv.data.API_v1_Transport_Response.DeleteAutoAdvance delete_auto_advance = 9;
|
|
.rv.data.API_v1_Transport_Response.GetCurrentMedia get_current_media = 10;
|
|
}
|
|
}
|
|
|