Events: Add media events

Adds the following events:

- `MediaPlaying`
- `MediaPaused`
- `MediaRestarted`
- `MediaStopped`
- `MediaNext`
- `MediaPrevious`
- `MediaStarted`
- `MediaEnded`
This commit is contained in:
tt2468
2020-05-16 12:56:42 -07:00
parent 31a085db73
commit 7918438747
2 changed files with 217 additions and 0 deletions

View File

@ -275,6 +275,15 @@ void WSEvents::connectSourceSignals(obs_source_t* source) {
signal_handler_connect(sh, "filter_add", OnSourceFilterAdded, this);
signal_handler_connect(sh, "filter_remove", OnSourceFilterRemoved, this);
signal_handler_connect(sh, "reorder_filters", OnSourceFilterOrderChanged, this);
signal_handler_connect(sh, "media_play", OnMediaPlaying, this);
signal_handler_connect(sh, "media_pause", OnMediaPaused, this);
signal_handler_connect(sh, "media_restart", OnMediaRestarted, this);
signal_handler_connect(sh, "media_stopped", OnMediaStopped, this);
signal_handler_connect(sh, "media_next", OnMediaNext, this);
signal_handler_connect(sh, "media_previous", OnMediaPrevious, this);
signal_handler_connect(sh, "media_started", OnMediaStarted, this);
signal_handler_connect(sh, "media_ended", OnMediaEnded, this);
if (sourceType == OBS_SOURCE_TYPE_SCENE) {
signal_handler_connect(sh, "reorder", OnSceneReordered, this);
@ -322,6 +331,15 @@ void WSEvents::disconnectSourceSignals(obs_source_t* source) {
signal_handler_disconnect(sh, "transition_start", OnTransitionBegin, this);
signal_handler_disconnect(sh, "transition_stop", OnTransitionEnd, this);
signal_handler_disconnect(sh, "transition_video_stop", OnTransitionVideoEnd, this);
signal_handler_disconnect(sh, "media_play", OnMediaPlaying, this);
signal_handler_disconnect(sh, "media_pause", OnMediaPaused, this);
signal_handler_disconnect(sh, "media_restart", OnMediaRestarted, this);
signal_handler_disconnect(sh, "media_stopped", OnMediaStopped, this);
signal_handler_disconnect(sh, "media_next", OnMediaNext, this);
signal_handler_disconnect(sh, "media_previous", OnMediaPrevious, this);
signal_handler_disconnect(sh, "media_started", OnMediaStarted, this);
signal_handler_disconnect(sh, "media_ended", OnMediaEnded, this);
}
void WSEvents::connectFilterSignals(obs_source_t* filter) {
@ -1335,6 +1353,196 @@ void WSEvents::OnSourceFilterOrderChanged(void* param, calldata_t* data) {
self->broadcastUpdate("SourceFiltersReordered", fields);
}
/**
* A media source has started playing.
*
* @return {String} `sourceName` Source name
*
* @api events
* @name MediaPlaying
* @category media
* @since 4.9.0
*/
void WSEvents::OnMediaPlaying(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
self->broadcastUpdate("MediaPlaying", fields);
}
/**
* A media source has been paused.
*
* @return {String} `sourceName` Source name
*
* @api events
* @name MediaPaused
* @category media
* @since 4.9.0
*/
void WSEvents::OnMediaPaused(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
self->broadcastUpdate("MediaPaused", fields);
}
/**
* A media source has been restarted.
*
* @return {String} `sourceName` Source name
*
* @api events
* @name MediaRestarted
* @category media
* @since 4.9.0
*/
void WSEvents::OnMediaRestarted(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
self->broadcastUpdate("MediaRestarted", fields);
}
/**
* A media source has been stopped.
*
* @return {String} `sourceName` Source name
*
* @api events
* @name MediaStopped
* @category media
* @since 4.9.0
*/
void WSEvents::OnMediaStopped(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
self->broadcastUpdate("MediaStopped", fields);
}
/**
* A media source has gone to the next item in the playlist.
*
* @return {String} `sourceName` Source name
*
* @api events
* @name MediaNext
* @category media
* @since 4.9.0
*/
void WSEvents::OnMediaNext(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
self->broadcastUpdate("MediaNext", fields);
}
/**
* A media source has gone to the previous item in the playlist.
*
* @return {String} `sourceName` Source name
*
* @api events
* @name MediaPrevious
* @category media
* @since 4.9.0
*/
void WSEvents::OnMediaPrevious(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
self->broadcastUpdate("MediaPrevious", fields);
}
/**
* A media source has been started. (Does not mean that it is playing. See [`MediaPlaying`](#mediaplaying))
*
* Note: For VLC, this means that the source and therefore playlist has started.
* For the normal Media Source, this just means that the source has been started.
*
* @return {String} `sourceName` Source name
*
* @api events
* @name MediaStarted
* @category media
* @since 4.9.0
*/
void WSEvents::OnMediaStarted(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
self->broadcastUpdate("MediaStarted", fields);
}
/**
* A media source has ended.
*
* Note: For VLC, this means that the source and therefore playlist has ended.
* For the normal Media Source, this just means that the source has been stopped/ended.
*
* @return {String} `sourceName` Source name
*
* @api events
* @name MediaEnded
* @category media
* @since 4.9.0
*/
void WSEvents::OnMediaEnded(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
self->broadcastUpdate("MediaEnded", fields);
}
/**
* Scene items have been reordered.
*

View File

@ -133,6 +133,15 @@ private:
static void OnSourceFilterRemoved(void* param, calldata_t* data);
static void OnSourceFilterVisibilityChanged(void* param, calldata_t* data);
static void OnSourceFilterOrderChanged(void* param, calldata_t* data);
static void OnMediaPlaying(void* param, calldata_t* data);
static void OnMediaPaused(void* param, calldata_t* data);
static void OnMediaRestarted(void* param, calldata_t* data);
static void OnMediaStopped(void* param, calldata_t* data);
static void OnMediaNext(void* param, calldata_t* data);
static void OnMediaPrevious(void* param, calldata_t* data);
static void OnMediaStarted(void* param, calldata_t* data);
static void OnMediaEnded(void* param, calldata_t* data);
static void OnSceneReordered(void* param, calldata_t* data);
static void OnSceneItemAdd(void* param, calldata_t* data);