diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PlaylistListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PlaylistListener.java index 1402fe7ae96105fd8e563096d617dcfaf9f5aaba..d7a70f4d519d505cc4f64878aa412278dd469e39 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PlaylistListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PlaylistListener.java @@ -4,5 +4,11 @@ import de.tobias.playpad.pad.Pad; public interface PlaylistListener { - void onNextItem(Pad pad, int next, int total); + void onPlaylistStart(Pad pad); + + void onPlaylistItemStart(Pad pad); + + void onPlaylistItemEnd(Pad pad); + + void onPlaylistEnd(Pad pad); } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java index 834121676c93bc610e53b4ed255d8c06536991ae..62a45871da4a76927c530b31a39b525efdc50227 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java @@ -31,14 +31,24 @@ public class PadTriggerDurationListener implements ChangeListener<Duration> { Profile currentProfile = Profile.currentProfile(); PadSettings padSettings = pad.getPadSettings(); - // Execute Start Triggers - final Trigger startTrigger = padSettings.getTrigger(TriggerPoint.START); - startTrigger.handle(pad, currentTime, pad.getProject(), mainViewController, currentProfile); - - // Execute End Trigger - final Duration leftTime = totalDuration.subtract(currentTime); - final Trigger endTrigger = padSettings.getTrigger(TriggerPoint.EOF); - endTrigger.handle(pad, leftTime, pad.getProject(), mainViewController, currentProfile); + if (TriggerPoint.START.isAvailable(pad)) { + // Execute Start Triggers + final Trigger startTrigger = padSettings.getTrigger(TriggerPoint.START); + startTrigger.handle(pad, currentTime, pad.getProject(), mainViewController, currentProfile); + } + + if (TriggerPoint.PLAYLIST_ITEM_START.isAvailable(pad)) { + // Execute Start Triggers + final Trigger startTrigger = padSettings.getTrigger(TriggerPoint.PLAYLIST_ITEM_START); + startTrigger.handle(pad, currentTime, pad.getProject(), mainViewController, currentProfile); + } + + if (TriggerPoint.EOF.isAvailable(pad)) { + // Execute End Trigger + final Duration leftTime = totalDuration.subtract(currentTime); + final Trigger endTrigger = padSettings.getTrigger(TriggerPoint.EOF); + endTrigger.handle(pad, leftTime, pad.getProject(), mainViewController, currentProfile); + } } } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerPlaylistListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerPlaylistListener.java index eec30a0feaec27cb639cbe7ab76b5329f028981f..4aad600ee6c0e4059c26195bf72b09a0c34b7cdc 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerPlaylistListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerPlaylistListener.java @@ -12,15 +12,37 @@ import javafx.util.Duration; public class PadTriggerPlaylistListener implements PlaylistListener { @Override - public void onNextItem(Pad pad, int next, int total) { + public void onPlaylistStart(Pad pad) { + + } + + @Override + public void onPlaylistItemStart(Pad pad) { if (!pad.isIgnoreTrigger()) { - PadSettings padSettings = pad.getPadSettings(); - executeTrigger(pad, padSettings.getTriggers().get(TriggerPoint.PLAYLIST_NEXT)); + final PadSettings padSettings = pad.getPadSettings(); + final Trigger trigger = padSettings.getTriggers().get(TriggerPoint.PLAYLIST_ITEM_START); + executeTrigger(pad, trigger); } else { pad.setIgnoreTrigger(false); } } + @Override + public void onPlaylistItemEnd(Pad pad) { + if (!pad.isIgnoreTrigger()) { + final PadSettings padSettings = pad.getPadSettings(); + final Trigger trigger = padSettings.getTriggers().get(TriggerPoint.PLAYLIST_ITEM_END); + executeTrigger(pad, trigger); + } else { + pad.setIgnoreTrigger(false); + } + } + + @Override + public void onPlaylistEnd(Pad pad) { + + } + private void executeTrigger(Pad pad, Trigger trigger) { IMainViewController mainViewController = PlayPadPlugin.getInstance().getMainViewController(); Profile currentProfile = Profile.currentProfile(); 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 f6d5fda76ac66f14a09bf7759e569b7ad9357bcb..fdf57e975dd2059d39424987ae670b61fbae25c6 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java @@ -118,7 +118,9 @@ public class Trigger { } else { handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item); } - } else if (triggerPoint == TriggerPoint.PLAYLIST_NEXT) { + } else if (triggerPoint == TriggerPoint.PLAYLIST_ITEM_START) { + handleStartPoint(pad, currentDuration, project, mainViewController, currentProfile, item); + } else if (triggerPoint == TriggerPoint.PLAYLIST_ITEM_END) { item.performAction(pad, project, mainViewController, currentProfile); } } 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 4dc9e6f2155903d3a48a7ed57a399b34ecb2b0fb..1f6a6a4b19e0a33faabb6a0314e85dfa33348c7f 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java @@ -10,7 +10,10 @@ public enum TriggerPoint { START(true, pad -> !(pad.getContent() instanceof Playlistable)), STOP(false, pad -> !(pad.getContent() instanceof Playlistable)), EOF(true, pad -> !(pad.getContent() instanceof Playlistable)), - PLAYLIST_NEXT(false, pad -> pad.getContent() instanceof Playlistable); + PLAYLIST_START(false, pad -> pad.getContent() instanceof Playlistable), + PLAYLIST_ITEM_START(true, pad -> pad.getContent() instanceof Playlistable), + PLAYLIST_ITEM_END(false, pad -> pad.getContent() instanceof Playlistable), + PLAYLIST_END(false, pad -> pad.getContent() instanceof Playlistable); /** * Defines if a trigger can be run after, before a certain event. diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala index 8e50a952dbf1a8ecacfbfcc97e14e94e3d68cfc1..e48882110fce35497d2a9dd5b35226899e8cdf23 100644 --- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala +++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala @@ -38,6 +38,9 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[ content.getPad.setEof(false) content.currentPlayingMediaIndexProperty().set(content.getMediaContainers.indexOf(this)) + + content.listeners.forEach(listener => listener.onPlaylistStart(content.pad)) + content.listeners.forEach(listener => listener.onPlaylistItemStart(content.pad)) } def resume(withFadeIn: Boolean): Unit = { @@ -55,14 +58,16 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[ if (currentIndex + 1 < players.length) { - content.listeners.forEach(listener => listener.onNextItem(content.pad, currentIndex + 1, players.length)) + content.listeners.forEach(listener => listener.onPlaylistItemEnd(content.pad)) if (content.getPad.getStatus == PadStatus.PLAY) { players(currentIndex + 1).play(false) + content.listeners.forEach(listener => listener.onPlaylistItemStart(content.pad)) } } else if (content.getPad.getPadSettings.isLoop) { - content.listeners.forEach(listener => listener.onNextItem(content.pad, 0, players.length)) + content.listeners.forEach(listener => listener.onPlaylistItemEnd(content.pad)) if (content.getPad.getStatus == PadStatus.PLAY) { players.head.play(false) + content.listeners.forEach(listener => listener.onPlaylistItemStart(content.pad)) } } else { content.getPad.setStatus(PadStatus.STOP)