summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/media.c8
-rw-r--r--src/media.h1
-rw-r--r--src/ui/documentwidget.c14
3 files changed, 22 insertions, 1 deletions
diff --git a/src/media.c b/src/media.c
index c0d6d3de..dcda0664 100644
--- a/src/media.c
+++ b/src/media.c
@@ -24,6 +24,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
24#include "gmdocument.h" 24#include "gmdocument.h"
25#include "ui/window.h" 25#include "ui/window.h"
26#include "audio/player.h" 26#include "audio/player.h"
27#include "app.h"
27 28
28#include <the_Foundation/ptrarray.h> 29#include <the_Foundation/ptrarray.h>
29#include <stb_image.h> 30#include <stb_image.h>
@@ -214,8 +215,9 @@ void setData_Media(iMedia *d, iGmLinkId linkId, const iString *mime, const iBloc
214 updateSourceData_Player(audio->player, NULL, NULL, complete_PlayerUpdate); 215 updateSourceData_Player(audio->player, NULL, NULL, complete_PlayerUpdate);
215 } 216 }
216 pushBack_PtrArray(&d->audio, audio); 217 pushBack_PtrArray(&d->audio, audio);
217 /* TEST: Start playing right away. */ 218 /* Start playing right away. */
218 start_Player(audio->player); 219 start_Player(audio->player);
220 postCommandf_App("media.player.started player:%p", audio->player);
219 } 221 }
220 } 222 }
221} 223}
@@ -231,6 +233,10 @@ iMediaId findLinkImage_Media(const iMedia *d, iGmLinkId linkId) {
231 return 0; 233 return 0;
232} 234}
233 235
236size_t numAudio_Media(const iMedia *d) {
237 return size_PtrArray(&d->audio);
238}
239
234iMediaId findLinkAudio_Media(const iMedia *d, iGmLinkId linkId) { 240iMediaId findLinkAudio_Media(const iMedia *d, iGmLinkId linkId) {
235 /* TODO: use a hash */ 241 /* TODO: use a hash */
236 iConstForEach(PtrArray, i, &d->audio) { 242 iConstForEach(PtrArray, i, &d->audio) {
diff --git a/src/media.h b/src/media.h
index c19ad8ae..9db6659d 100644
--- a/src/media.h
+++ b/src/media.h
@@ -60,6 +60,7 @@ iMediaId findLinkImage_Media (const iMedia *, uint16_t linkId);
60iBool imageInfo_Media (const iMedia *, iMediaId imageId, iGmImageInfo *info_out); 60iBool imageInfo_Media (const iMedia *, iMediaId imageId, iGmImageInfo *info_out);
61SDL_Texture * imageTexture_Media (const iMedia *, iMediaId imageId); 61SDL_Texture * imageTexture_Media (const iMedia *, iMediaId imageId);
62 62
63size_t numAudio_Media (const iMedia *);
63iMediaId findLinkAudio_Media (const iMedia *, uint16_t linkId); 64iMediaId findLinkAudio_Media (const iMedia *, uint16_t linkId);
64iBool audioInfo_Media (const iMedia *, iMediaId audioId, iGmAudioInfo *info_out); 65iBool audioInfo_Media (const iMedia *, iMediaId audioId, iGmAudioInfo *info_out);
65iPlayer * audioPlayer_Media (const iMedia *, iMediaId audioId); 66iPlayer * audioPlayer_Media (const iMedia *, iMediaId audioId);
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index b977e4d9..573cd3e3 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -1421,6 +1421,18 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
1421 else if (equal_Command(cmd, "media.updated") || equal_Command(cmd, "media.finished")) { 1421 else if (equal_Command(cmd, "media.updated") || equal_Command(cmd, "media.finished")) {
1422 return handleMediaCommand_DocumentWidget_(d, cmd); 1422 return handleMediaCommand_DocumentWidget_(d, cmd);
1423 } 1423 }
1424 else if (equal_Command(cmd, "media.player.started")) {
1425 /* When one media player starts, pause the others that may be playing. */
1426 const iPlayer *startedPlr = pointerLabel_Command(cmd, "player");
1427 const iMedia * media = media_GmDocument(d->doc);
1428 const size_t num = numAudio_Media(media);
1429 for (size_t id = 1; id <= num; id++) {
1430 iPlayer *plr = audioPlayer_Media(media, id);
1431 if (plr != startedPlr) {
1432 setPaused_Player(plr, iTrue);
1433 }
1434 }
1435 }
1424 else if (equal_Command(cmd, "document.stop") && document_App() == d) { 1436 else if (equal_Command(cmd, "document.stop") && document_App() == d) {
1425 if (d->request) { 1437 if (d->request) {
1426 postCommandf_App( 1438 postCommandf_App(
@@ -2064,6 +2076,8 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
2064 if (!isFinished_GmRequest(req->req)) { 2076 if (!isFinished_GmRequest(req->req)) {
2065 cancel_GmRequest(req->req); 2077 cancel_GmRequest(req->req);
2066 removeMediaRequest_DocumentWidget_(d, linkId); 2078 removeMediaRequest_DocumentWidget_(d, linkId);
2079 /* Note: Some of the audio IDs have changed now, layout must
2080 be redone. */
2067 } 2081 }
2068 } 2082 }
2069 redoLayout_GmDocument(d->doc); 2083 redoLayout_GmDocument(d->doc);