From 9ba49e4279cc0b971724da459c74c7d0e11e2b54 Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Tue, 19 Sep 2023 19:29:21 +0200 Subject: [PATCH] #187 - Add new name update listener method to pads --- .../main/java/de/tobias/playpad/pad/Pad.java | 9 +++++-- .../pad/listener/PadNameChangeListener.java | 25 +++++++++++++++++++ .../de/tobias/playpad/plugin/PadListener.java | 2 ++ .../impl/EqualizerPluginImpl.java | 5 ++++ .../log/listener/PadPlayLogListener.java | 5 ++++ .../playpad/plugin/api/WebApiPlugin.scala | 4 +-- ...tusListener.scala => PadApiListener.scala} | 12 ++++++++- 7 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadNameChangeListener.java rename PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/{PadStatusListener.scala => PadApiListener.scala} (58%) diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java index 833e52be..73f60d57 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java @@ -8,6 +8,7 @@ import de.tobias.playpad.pad.content.Playlistable; import de.tobias.playpad.pad.content.play.Pauseable; import de.tobias.playpad.pad.fade.listener.PadFadeContentListener; import de.tobias.playpad.pad.fade.listener.PadFadeDurationListener; +import de.tobias.playpad.pad.listener.PadNameChangeListener; import de.tobias.playpad.pad.listener.PadStatusControlListener; import de.tobias.playpad.pad.listener.PadStatusNotFoundListener; import de.tobias.playpad.pad.listener.trigger.PadTriggerContentListener; @@ -65,6 +66,7 @@ public class Pad implements IPad { */ // Global Listener (unabhängig von der UI), für Core Functions wie Play, Pause + private transient PadNameChangeListener padNameChangeListener; private transient PadStatusControlListener padStatusControlListener; private transient PadStatusNotFoundListener padStatusNotFoundListener; private transient PadFadeContentListener padFadeContentListener; @@ -121,6 +123,9 @@ public class Pad implements IPad { private void initPadListener() { // Remove old listener from properties + if (padNameChangeListener != null && nameProperty != null) { + nameProperty.removeListener(padNameChangeListener); + } if (padStatusControlListener != null && statusProperty != null) { statusProperty.removeListener(padStatusControlListener); } @@ -143,18 +148,18 @@ public class Pad implements IPad { } // init new listener for properties + padNameChangeListener = new PadNameChangeListener(this); + nameProperty.addListener(padNameChangeListener); padStatusControlListener = new PadStatusControlListener(this); statusProperty.addListener(padStatusControlListener); // Fade - padFadeDurationListener = new PadFadeDurationListener(this); padFadeContentListener = new PadFadeContentListener(this); contentProperty.addListener(padFadeContentListener); padFadeContentListener.changed(contentProperty, null, getContent()); // Not found status count - padStatusNotFoundListener = new PadStatusNotFoundListener(project); statusProperty.addListener(padStatusNotFoundListener); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadNameChangeListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadNameChangeListener.java new file mode 100644 index 00000000..af19e4f1 --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadNameChangeListener.java @@ -0,0 +1,25 @@ +package de.tobias.playpad.pad.listener; + +import de.thecodelabs.logger.Logger; +import de.tobias.playpad.PlayPadPlugin; +import de.tobias.playpad.pad.Pad; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; + +public class PadNameChangeListener implements ChangeListener<String> { + + private final Pad pad; + + public PadNameChangeListener(Pad pad) { + this.pad = pad; + } + + @Override + public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { + try { + PlayPadPlugin.getInstance().getPadListener().forEach(listener -> listener.onNameChanged(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 5c9df06f..a81a3e13 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/PadListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/PadListener.java @@ -13,6 +13,8 @@ import javafx.collections.ListChangeListener; */ public interface PadListener { + void onNameChanged(Pad pad, String oldValue, String newValue); + /** * Call then ever the status of a pad will be changed * 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 f65d2d28..03cacb67 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 @@ -74,6 +74,11 @@ public class EqualizerPluginImpl implements PlayPadPluginStub, PluginArtifact, M }); } + @Override + public void onNameChanged(Pad pad, String oldValue, String newValue) { + // Nothing to implement + } + @Override public void onStatusChange(Pad pad, PadStatus newValue) { if (newValue == PadStatus.PLAY) { 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 05ce0b71..7548965d 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 @@ -13,6 +13,11 @@ import javafx.collections.ListChangeListener; public class PadPlayLogListener implements PadListener { + @Override + public void onNameChanged(Pad pad, String oldValue, String newValue) { + // Nothing to implement + } + @Override public void onStatusChange(Pad pad, PadStatus newValue) { if (newValue == PadStatus.PLAY) { diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala index 376d97de..9953f386 100644 --- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala @@ -15,7 +15,7 @@ import de.tobias.playpad.plugin.api.WebApiPlugin.connectToRemoteInstances import de.tobias.playpad.plugin.api.client.WebApiRemoteConnectionStateListener import de.tobias.playpad.plugin.api.settings.{WebApiRemoteSettings, WebApiSettings, WebApiSettingsViewController} import de.tobias.playpad.plugin.api.websocket.WebSocketHandler -import de.tobias.playpad.plugin.api.websocket.listener.{PadStatusListener, ProjectListener} +import de.tobias.playpad.plugin.api.websocket.listener.{PadApiListener, ProjectListener} import de.tobias.playpad.plugin.{Module, PlayPadPluginStub} import javafx.application.Platform import javafx.collections.{FXCollections, ObservableMap} @@ -36,7 +36,7 @@ class WebApiPlugin extends PlayPadPluginStub with PluginArtifact { module = new Module(descriptor.getName, descriptor.getArtifactId) Localization.addResourceBundle("plugin/webapi/lang/base", getClass.getClassLoader) - PlayPadPlugin.getInstance().addPadListener(new PadStatusListener) + PlayPadPlugin.getInstance().addPadListener(new PadApiListener) PlayPadPlugin.getInstance().addGlobalListener(new ProjectListener) Logger.debug("Enable Web API Plugin") diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadStatusListener.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadApiListener.scala similarity index 58% rename from PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadStatusListener.scala rename to PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadApiListener.scala index ffd31cb4..efa8bfea 100644 --- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadStatusListener.scala +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/PadApiListener.scala @@ -5,7 +5,17 @@ import de.tobias.playpad.pad.{Pad, PadStatus} import de.tobias.playpad.plugin.PadListener import de.tobias.playpad.plugin.api.websocket.WebSocketHandler -class PadStatusListener extends PadListener { +class PadApiListener extends PadListener { + + override def onNameChanged(pad: Pad, oldValue: String, newValue: String): Unit = { + val payload = new JsonObject + + payload.addProperty("pad", pad.getUuid.toString) + payload.addProperty("oldValue", oldValue) + payload.addProperty("newValue", newValue) + + WebSocketHandler.instance.sendUpdate("pad-name-changed", payload) + } override def onStatusChange(pad: Pad, newValue: PadStatus): Unit = { val payload = new JsonObject -- GitLab