userDidStartWatchingEvent
Indicates that a user has started watching an event and initializes the event view model.
Overview
When a user starts watching an event, call this method to initialize the necessary components for the Maestro panel and interactive features. This method creates a new event view model and establishes the connection between the SDK and your application's event delegate.
Method Signature
userDidStartWatchingEvent(eventID: string, delegate: IMaestroEventDelegate): Promise<IMaestroEvent>
Parameters
Parameter | Type | Description |
---|---|---|
eventID | string | The unique identifier for the event being watched |
delegate | IMaestroEventDelegate | An implementation of the event delegate interface that handles callbacks from the SDK and and communicate with the client app |
IMaestroEventDelegate Interface
/**
* @description Allows the SDK to tell the client app that the user has encountered an error screen for lack of valid key
plays data, indicating the client app should call `updateKeyPlaysData` as soon as possible.
*/
userRequestedNewKeyPlaysData(): Promise<void>;
/**
* Allows the SDK to request the client app play a particular key plays clip, given its array index in the key plays list. Note that the `MaestroKeyPlaysResponse` subdivides the key plays by section, so the `index` referenced here assumes the client app has access to a flattened list of the key plays, disregarding the sectional subdivisions.
*/
playClip(atIndex: number): void;
/**
* @description SDK can notify the client app when its time to handle the focus management
*/
startFocusManagement(): Promise<void>;
Return Value
A Promise that resolves to an IMaestroEvent
instance, which provides methods for interacting with the current event.
Example
import SDK, { IMaestroEventDelegate, IMaestroEvent } from '@maestro_io/maestro-web-sdk';
// Implement the event delegate interface
class MyEventDelegate implements IMaestroEventDelegate {
async userRequestedNewKeyPlaysData(): Promise<void> {
// Fetch new key plays data from your API
const keyPlaysData = await fetchKeyPlaysData();
// Update the SDK with the new data
const event = SDK.getMaestroEventViewModel();
await event.updateKeyPlaysData(keyPlaysData);
}
playClip(atIndex: number): void {
// Implement clip playback in your video player
const event = SDK.getMaestroEventViewModel();
// Start playing the clip
myVideoPlayer.play(atIndex);
// Notify SDK that playback has started
event.didStartPlayingClip(atIndex);
// Track playback progress and report to SDK
myVideoPlayer.onProgress((progress) => {
event.didUpdatePlaybackProgressOfClip(atIndex, progress);
});
// Notify SDK when playback completes
myVideoPlayer.onComplete(() => {
event.didStopPlayingClip(atIndex);
});
}
startFocusManagement(): Promise<void> {
// Set focus back to your application's UI
document.getElementById('my-app-control').focus();
return Promise.resolve();
}
}
// Start watching an event
async function startWatchingEvent(eventID: string) {
const delegate = new MyEventDelegate();
try {
// Initialize the event in the SDK
const event: IMaestroEvent = await SDK.userDidStartWatchingEvent(eventID, delegate);
// Render the panel if needed
await SDK.renderPanel('panel-container');
return event;
} catch (error) {
console.error('Failed to start watching event:', error);
throw error;
}
}
Notes
- The SDK must be configured with
configure()
before calling this method.