diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java index 6373d324d0f4d5d536c6c9a3167dca1776ed3e3d..1d15d9ad02184a18dc076b6cce7d739f8eba9552 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java @@ -8,6 +8,8 @@ public interface Playlistable { IntegerProperty currentPlayingMediaIndexProperty(); + boolean hasNext(); + void next(); boolean isLoaded(MediaPath mediaPath); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/listener/PadFadeContentListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/listener/PadFadeContentListener.java index ad414c8d8250053b5a3ec2f279c3b3bfd676e57c..0d7436b3405d2f89be63feebeaf36f55fe213889 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/listener/PadFadeContentListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/listener/PadFadeContentListener.java @@ -7,9 +7,12 @@ import de.tobias.playpad.pad.fade.Fadeable; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; +/** + * Remove end of file fade listener on old pad content and register on new pad content + */ public class PadFadeContentListener implements ChangeListener<PadContent> { - private Pad pad; + private final Pad pad; public PadFadeContentListener(Pad pad) { this.pad = pad; diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/listener/PadFadeDurationListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/listener/PadFadeDurationListener.java index b795033f65d4b4004432d8c53d82a8ee0f115939..214f832d81b61a8449170e5443a83a1fa32c57de 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/listener/PadFadeDurationListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/fade/listener/PadFadeDurationListener.java @@ -1,6 +1,7 @@ package de.tobias.playpad.pad.fade.listener; import de.tobias.playpad.pad.Pad; +import de.tobias.playpad.pad.content.Playlistable; import de.tobias.playpad.pad.content.play.Durationable; import de.tobias.playpad.pad.fade.Fadeable; import javafx.beans.value.ChangeListener; @@ -20,6 +21,16 @@ public class PadFadeDurationListener implements ChangeListener<Duration> { if (pad.getPadSettings().getFade().isFadeOutEof()) { final Duration fadeDuration = pad.getPadSettings().getFade().getFadeOut(); + // Do not fade out if looping is enabled + if (pad.getPadSettings().isLoop()) { + return; + } + + // Do not fade out if the playlist has a next entry + if (pad.getContent() instanceof Playlistable && ((Playlistable) pad.getContent()).hasNext()) { + return; + } + if (pad.getContent() instanceof Durationable) { final Durationable durationable = (Durationable) pad.getContent(); 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 7706ee91c62a9bc51abaceb00f35484ac8eca78e..c1db519a17b8119362c64e7385ba26d91f2b9a40 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 @@ -50,6 +50,8 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte def getMediaPlayers: ObservableList[ContentPlayerMediaContainer] = mediaPlayers + override def hasNext: Boolean = getCurrentPlayingMediaIndex + 1 < mediaPlayers.length + /* Control Methods */