From f2dbba1ef34a65bf0e485e007a4c339bfcaa7252 Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Sun, 21 Nov 2021 20:59:07 +0100
Subject: [PATCH] #178 - Merge trigger point "end" with "end of file", fix
 trigger firing

---
 .../src/main/resources/lang/_de.properties    |  1 -
 .../trigger/PadTriggerStatusListener.java     |  8 ++---
 .../de/tobias/playpad/tigger/Trigger.java     | 30 ++++++++++---------
 .../tobias/playpad/tigger/TriggerPoint.java   |  3 +-
 4 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/PlayWall/src/main/resources/lang/_de.properties b/PlayWall/src/main/resources/lang/_de.properties
index 33029a52..9a34ee6f 100755
--- a/PlayWall/src/main/resources/lang/_de.properties
+++ b/PlayWall/src/main/resources/lang/_de.properties
@@ -214,7 +214,6 @@ Trigger.Volume.Name=Lautst\u00E4rke
 TriggerPoint.START=Start
 TriggerPoint.STOP=Stop
 TriggerPoint.EOF=Ende
-TriggerPoint.EOF_STATE=Ende (EoF)
 
 # Drag and Drop Mode
 DnDMode.Replace=Ersetzen
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java
index 94459f05..5f28296a 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java
@@ -21,17 +21,17 @@ public class PadTriggerStatusListener implements ChangeListener<PadStatus> {
 	}
 
 	@Override
-	public void changed(ObservableValue<? extends PadStatus> observable, PadStatus oldValue, PadStatus newValue) {
+	public void changed(ObservableValue<? extends PadStatus> observable, PadStatus oldState, PadStatus newValue) {
 		if (!pad.isIgnoreTrigger()) {
 			PadSettings padSettings = pad.getPadSettings();
 
 			// Execute Trigger
 			if (newValue == PadStatus.PLAY) {
 				executeTrigger(padSettings.getTriggers().get(TriggerPoint.START));
-			} else if (newValue == PadStatus.STOP) {
+			} else if (newValue == PadStatus.STOP && !pad.isEof()) {
 				executeTrigger(padSettings.getTriggers().get(TriggerPoint.STOP));
-			} else if (oldValue == PadStatus.PLAY && newValue == PadStatus.READY && pad.isEof()) {
-				executeTrigger(padSettings.getTriggers().get(TriggerPoint.EOF_STATE));
+			} else if (oldState == PadStatus.STOP && newValue == PadStatus.READY && pad.isEof()){
+				executeTrigger(padSettings.getTriggers().get(TriggerPoint.EOF));
 			}
 		} else {
 			pad.setIgnoreTrigger(false);
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 ba284a16..f0516d5a 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
@@ -109,25 +109,17 @@ public class Trigger {
 			if (triggerPoint == TriggerPoint.START) {
 				handleStartPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
 			} else if (triggerPoint == TriggerPoint.STOP) {
-				handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
-			} else if (triggerPoint == TriggerPoint.EOF) {
-				handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
-			} else if (triggerPoint == TriggerPoint.EOF_STATE) {
 				item.performAction(pad, project, mainViewController, currentProfile);
+			} else if (triggerPoint == TriggerPoint.EOF) {
+				if (item.getDurationFromPoint() == Duration.ZERO && pad.isEof()) {
+					item.performAction(pad, project, mainViewController, currentProfile);
+				} else {
+					handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item);
+				}
 			}
 		}
 	}
 
-	private void handleEndPoint(Pad pad, Duration duration, Project project, IMainViewController mainViewController, Profile currentProfile, TriggerItem item) {
-		// Wenn Trigger noch nicht gespielt wurde (null) und Zeit größer ist als gesetzte Zeit (oder 0)
-		if (item.getPerformedAt() == null && (item.getDurationFromPoint().greaterThan(duration) || duration.equals(Duration.ZERO))) {
-			item.performAction(pad, project, mainViewController, currentProfile);
-			item.setPerformedAt(duration);
-		} else if (item.getDurationFromPoint().lessThan(duration)) {
-			item.setPerformedAt(null);
-		}
-	}
-
 	private void handleStartPoint(Pad pad, Duration duration, Project project, IMainViewController mainViewController, Profile currentProfile, TriggerItem item) {
 		if (pad.getStatus() == PadStatus.PLAY) {
 			// Mitten drin, wenn die Zeit die gespielt wurde größer ist als die gesetzte und noch der Trigger noch nicht ausgeführt
@@ -142,4 +134,14 @@ public class Trigger {
 			}
 		}
 	}
+
+	private void handleEndPoint(Pad pad, Duration duration, Project project, IMainViewController mainViewController, Profile currentProfile, TriggerItem item) {
+		// Wenn Trigger noch nicht gespielt wurde (null) und Zeit größer ist als gesetzte Zeit (oder 0)
+		if (item.getPerformedAt() == null && (item.getDurationFromPoint().greaterThan(duration) || duration.equals(Duration.ZERO))) {
+			item.performAction(pad, project, mainViewController, currentProfile);
+			item.setPerformedAt(duration);
+		} else if (item.getDurationFromPoint().lessThan(duration)) {
+			item.setPerformedAt(null);
+		}
+	}
 }
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
index 4f1390d9..ce08ec84 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
@@ -4,8 +4,7 @@ public enum TriggerPoint {
 
 	START(true),
 	STOP(false),
-	EOF(true),
-	EOF_STATE(false);
+	EOF(true);
 
 	/**
 	 * Defines if a trigger can be run after, before a certain event.
-- 
GitLab