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.
2.8 KiB
2.8 KiB
Messages Library API
PHP module for reading and writing the global ProPresenter
Messagesfile (raw protobuf, no extension) and exposing each message definition.
Quick Reference
use ProPresenter\Parser\MessagesFileReader;
use ProPresenter\Parser\MessagesFileWriter;
$library = MessagesFileReader::read('/path/to/Messages');
foreach ($library->getMessages() as $message) {
$message->getTitle();
$message->getUuid();
$message->getMessageText();
}
$library->addMessage('Lobby Notice', '11111111-1111-1111-1111-111111111111');
MessagesFileWriter::write($library, '/path/to/Messages');
File Layout
The Messages file is the protobuf-serialised
MessageDocument:
| Field | Type | Description |
|---|---|---|
application_info |
ApplicationInfo |
ProPresenter metadata |
messages |
repeated Message |
Message definitions in document order |
Reading
$library = MessagesFileReader::read('/Users/me/.../Messages');
Throws InvalidArgumentException for missing files and RuntimeException for
empty / unreadable files.
MessageLibrary
$library->getMessages(); // Message[]
$library->count(); // int
$library->getMessageByUuid($uuid); // ?Message (case-insensitive)
$library->getMessageByName($title); // ?Message (case-sensitive title)
$library->addMessage($title, $uuid); // Message
$library->removeMessage($uuid); // bool
$library->getApplicationInfo(); // ?\Rv\Data\ApplicationInfo
$library->getDocument(); // \Rv\Data\MessageDocument
Message
$message->getUuid();
$message->setUuid($uuid);
$message->getTitle();
$message->setTitle($title);
$message->getTimeToRemove();
$message->setTimeToRemove($seconds);
$message->isVisibleOnNetwork();
$message->setVisibleOnNetwork(true);
$message->getMessageText();
$message->setMessageText($text);
$message->getClearType();
$message->setClearType($enumValue);
$message->getTokens(); // raw repeated Token protos
$message->getProto(); // \Rv\Data\Message
CLI Tool
php bin/parse-messages.php /path/to/Messages
Key Files
| File | Purpose |
|---|---|
src/MessageLibrary.php |
Document wrapper with title / UUID indexes |
src/Message.php |
Single message wrapper |
src/MessagesFileReader.php |
Reads the Messages file |
src/MessagesFileWriter.php |
Writes the Messages file |
bin/parse-messages.php |
CLI summary tool |
generated/Rv/Data/MessageDocument.php |
Generated document class |
Scope Notes
Tokens and token values are preserved as raw generated protobuf objects. The wrapper exposes them for advanced callers but does not interpret template rendering semantics.