diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala index 9ff6ed5cdf443d24afbeb66eba4ff1d56064e78d..76089ee8711fdb1b2b438f38d014a9614695719b 100644 --- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala +++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala @@ -33,6 +33,8 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte private var showingLastFrame: Boolean = false private var isPause: Boolean = false + var stopMediaByOtherPlayer = false + private val fadeController = new LinearFadeController(value => { if (getCurrentPlayingMediaIndex >= 0) { ContentPluginMain.playerViewController.setFadeValue(getSelectedZones, value) @@ -75,10 +77,12 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte override def stop(): Boolean = { isPause = false - mediaPlayers(getCurrentPlayingMediaIndex).stop() + if (getCurrentPlayingMediaIndex != -1) { + mediaPlayers(getCurrentPlayingMediaIndex).stop() - if (showingLastFrame) { - ContentPluginMain.playerViewController.clearHold(mediaPlayers(getCurrentPlayingMediaIndex)) + if (showingLastFrame) { + ContentPluginMain.playerViewController.clearHold(mediaPlayers(getCurrentPlayingMediaIndex)) + } } currentRunningIndexProperty.set(-1) diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/player/ContentPlayerBinding.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/player/ContentPlayerBinding.scala index d19f4ef0655c8c1aabae1806eea1a40a4329b386..6b1b9c61448edfe4f5ff0be1973e205879f3b655 100644 --- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/player/ContentPlayerBinding.scala +++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/player/ContentPlayerBinding.scala @@ -40,6 +40,17 @@ class ContentPlayerBinding(val player: ContentPlayer, val zone: Zone) { }) def play(media: ContentPlayerMediaContainer, withFadeIn: Boolean): Unit = { + if (currentMedia.get() != null && currentMedia.get().content.getPad != media.content.getPad) { + if (currentMedia.get().content.getPad.isPlay) { + // Stop the current playing media on this player and hold the last frame + currentMedia.get().content.stopMediaByOtherPlayer = true + currentMedia.get().content.getPad.stop() + } else if (currentMedia.get().content.getPad.isPaused) { + // The player mist be resumed before playing the next media + player.Resume(withFadeIn) + currentMedia.get().content.getPad.stop() + } + } player.Play(media.getPath, withFadeIn) currentMedia.set(media) } @@ -51,7 +62,15 @@ class ContentPlayerBinding(val player: ContentPlayer, val zone: Zone) { def pause(media: ContentPlayerMediaContainer): Unit = player.Pause() - def stop(media: ContentPlayerMediaContainer): Unit = player.Stop() + def stop(media: ContentPlayerMediaContainer): Unit = { + // If media is stopped by a different pad, the current media should keep playing to have a smooth transition + // to the new media. Otherwise the media will be stopped normally. + if (media.content.stopMediaByOtherPlayer) { + media.content.stopMediaByOtherPlayer = false + } else { + player.Stop() + } + } def clearHold(): Unit = player.ClearHold()