From ae26821526320b49c83402feffc646b926c29c57 Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Tue, 8 Dec 2020 22:12:20 +0100
Subject: [PATCH] Do not fade out on end of file in playlists with next item or
 while looping

---
 .../de/tobias/playpad/pad/content/Playlistable.java   |  2 ++
 .../pad/fade/listener/PadFadeContentListener.java     |  5 ++++-
 .../pad/fade/listener/PadFadeDurationListener.java    | 11 +++++++++++
 .../plugin/content/pad/ContentPlayerPadContent.scala  |  2 ++
 4 files changed, 19 insertions(+), 1 deletion(-)

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 6373d324..1d15d9ad 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 ad414c8d..0d7436b3 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 b795033f..214f832d 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 7706ee91..c1db519a 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
 	 */
-- 
GitLab