From 4640e9d1153011b29d6f4af7268a8edcee06cb5c Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Mon, 9 Oct 2023 20:23:13 +0200
Subject: [PATCH] #191 - Volume trigger for eof not fading correct. Cached
 volume level war reset to early, eof trigger was call twice

---
 .../de/tobias/playpad/trigger/VolumeTriggerVolumeFilter.java | 4 ++--
 .../playpad/pad/listener/PadStatusControlListener.java       | 2 +-
 .../src/main/java/de/tobias/playpad/plugin/PadListener.java  | 2 +-
 .../src/main/java/de/tobias/playpad/tigger/Trigger.java      | 5 ++++-
 .../playpad/equalizerplugin/impl/EqualizerPluginImpl.java    | 2 +-
 .../plugin/playout/log/listener/PadPlayLogListener.java      | 2 +-
 .../plugin/api/websocket/listener/PadApiListener.scala       | 2 +-
 7 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerVolumeFilter.java b/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerVolumeFilter.java
index b8dad1b7..83a73095 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerVolumeFilter.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/trigger/VolumeTriggerVolumeFilter.java
@@ -44,8 +44,8 @@ public class VolumeTriggerVolumeFilter implements VolumeFilter, PadListener {
 	}
 
 	@Override
-	public void onStatusChange(Pad pad, PadStatus newValue) {
-		if (newValue == PadStatus.READY) {
+	public void onStatusChange(Pad pad, PadStatus oldValue, PadStatus newValue) {
+		if (oldValue == PadStatus.READY && newValue == PadStatus.PLAY) {
 			volumes.remove(pad.getUuid());
 		}
 	}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadStatusControlListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadStatusControlListener.java
index 28bb500f..5a98a8d2 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadStatusControlListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadStatusControlListener.java
@@ -32,7 +32,7 @@ public class PadStatusControlListener implements ChangeListener<PadStatus> {
 		ProfileSettings profileSettings = Profile.currentProfile().getProfileSettings();
 
 		try {
-			PlayPadPlugin.getInstance().getPadListener().forEach(listener -> listener.onStatusChange(pad, newValue));
+			PlayPadPlugin.getInstance().getPadListener().forEach(listener -> listener.onStatusChange(pad, oldValue, newValue));
 		} catch (Exception e) {
 			Logger.error(e);
 		}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/PadListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/PadListener.java
index a81a3e13..40fda9df 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/PadListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/PadListener.java
@@ -21,7 +21,7 @@ public interface PadListener {
 	 * @param pad      corresponding pad
 	 * @param newValue new status value
 	 */
-	void onStatusChange(Pad pad, PadStatus newValue);
+	void onStatusChange(Pad pad, PadStatus oldValue, PadStatus newValue);
 
 	default void onMediaPathChanged(Pad pad, ListChangeListener.Change<? extends MediaPath> value) {
 	}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
index 127c8e00..ee4a7389 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
@@ -115,8 +115,11 @@ public class Trigger {
 					break;
 				case EOF:
 					if (item.getDurationFromPoint() == Duration.ZERO) {
-						if (pad.isEof()) {
+						if (pad.isEof() && item.getPerformedAt() == null) {
+							item.setPerformedAt(currentDuration);
 							item.performAction(pad, project, mainViewController, currentProfile);
+						} else {
+							item.setPerformedAt(null);
 						}
 					} else {
 						handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
diff --git a/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java/de/tobias/playpad/equalizerplugin/impl/EqualizerPluginImpl.java b/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java/de/tobias/playpad/equalizerplugin/impl/EqualizerPluginImpl.java
index 03cacb67..5561cb96 100644
--- a/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java/de/tobias/playpad/equalizerplugin/impl/EqualizerPluginImpl.java
+++ b/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java/de/tobias/playpad/equalizerplugin/impl/EqualizerPluginImpl.java
@@ -80,7 +80,7 @@ public class EqualizerPluginImpl implements PlayPadPluginStub, PluginArtifact, M
 	}
 
 	@Override
-	public void onStatusChange(Pad pad, PadStatus newValue) {
+	public void onStatusChange(Pad pad, PadStatus oldValue, PadStatus newValue) {
 		if (newValue == PadStatus.PLAY) {
 			onPlay(pad);
 		} else if (newValue == PadStatus.STOP) {
diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/listener/PadPlayLogListener.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/listener/PadPlayLogListener.java
index 7548965d..b8c29217 100644
--- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/listener/PadPlayLogListener.java
+++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/listener/PadPlayLogListener.java
@@ -19,7 +19,7 @@ public class PadPlayLogListener implements PadListener {
 	}
 
 	@Override
-	public void onStatusChange(Pad pad, PadStatus newValue) {
+	public void onStatusChange(Pad pad, PadStatus oldValue, PadStatus newValue) {
 		if (newValue == PadStatus.PLAY) {
 			LogSeason instance = LogSeasons.getCurrentSession();
 			if (instance != null) {
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadApiListener.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadApiListener.scala
index efa8bfea..2efd7e12 100644
--- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadApiListener.scala
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadApiListener.scala
@@ -17,7 +17,7 @@ class PadApiListener extends PadListener {
 		WebSocketHandler.instance.sendUpdate("pad-name-changed", payload)
 	}
 
-	override def onStatusChange(pad: Pad, newValue: PadStatus): Unit = {
+	override def onStatusChange(pad: Pad, oldValue: PadStatus, newValue: PadStatus): Unit = {
 		val payload = new JsonObject
 
 		payload.addProperty("pad", pad.getUuid.toString)
-- 
GitLab