Skip to content
Snippets Groups Projects
Commit 2706700e authored by Tobias Ullerich's avatar Tobias Ullerich
Browse files

Add pad status update to web api

parent 39d78b99
No related branches found
No related tags found
No related merge requests found
......@@ -28,9 +28,9 @@ public class PadStatusControlListener implements ChangeListener<PadStatus> {
PadSettings padSettings = pad.getPadSettings();
ProfileSettings profileSettings = Profile.currentProfile().getProfileSettings();
PlayPadPlugin.getInstance().getPadListener().forEach(listener -> listener.onStatusChange(pad, newValue));
if (newValue == PadStatus.PLAY) {
if (pad.getContent() != null) {
PlayPadPlugin.getInstance().getPadListener().forEach(listener -> listener.onPlay(pad));
pad.getProject().updateActivePlayerProperty();
......@@ -45,9 +45,7 @@ public class PadStatusControlListener implements ChangeListener<PadStatus> {
}
if (pad.getContent() instanceof Fadeable) {
if (oldValue == PadStatus.PAUSE && padSettings.getFade().isFadeInPause()) {
((Fadeable) pad.getContent()).fadeIn();
} else if (padSettings.getFade().isFadeInStart()) {
if (padSettings.getFade().isFadeInStart() || (oldValue == PadStatus.PAUSE && padSettings.getFade().isFadeInPause())) {
((Fadeable) pad.getContent()).fadeIn();
}
}
......@@ -56,17 +54,13 @@ public class PadStatusControlListener implements ChangeListener<PadStatus> {
} else if (newValue == PadStatus.PAUSE) {
if (pad.getContent() instanceof Pauseable) {
if (pad.getContent() instanceof Fadeable && padSettings.getFade().isFadeOutPause()) {
((Fadeable) pad.getContent()).fadeOut(() ->
{
((Pauseable) pad.getContent()).pause();
});
((Fadeable) pad.getContent()).fadeOut(() -> ((Pauseable) pad.getContent()).pause());
} else {
((Pauseable) pad.getContent()).pause();
}
}
} else if (newValue == PadStatus.STOP) {
if (pad.getContent() != null) {
PlayPadPlugin.getInstance().getPadListener().forEach(listener -> listener.onStop(pad));
pad.getProject().updateActivePlayerProperty();
if (pad.getContent() instanceof Fadeable && !pad.isEof() && padSettings.getFade().isFadeOutStop()) { // Fade nur wenn Pad
......
package de.tobias.playpad.plugin;
import de.tobias.playpad.pad.Pad;
import de.tobias.playpad.pad.PadStatus;
/**
* Listener für ein Pad.
......@@ -11,17 +12,10 @@ import de.tobias.playpad.pad.Pad;
public interface PadListener {
/**
* Wird aufgerufen, sobald ein Pad wiedergegeben wird.
*
* @param pad Pad
*/
void onPlay(Pad pad);
/**
* Wird aufgerufen, sobald ein Pad gestoppt wird.
*
* @param pad Pad
* Call then ever the status of a pad will be changed
* @param pad corresponding pad
* @param newValue new status value
*/
void onStop(Pad pad);
void onStatusChange(Pad pad, PadStatus newValue);
}
\ No newline at end of file
......@@ -9,6 +9,7 @@ import de.thecodelabs.utils.ui.NVCStage;
import de.thecodelabs.utils.util.Localization;
import de.tobias.playpad.equalizerplugin.Equalizer;
import de.tobias.playpad.pad.Pad;
import de.tobias.playpad.pad.PadStatus;
import de.tobias.playpad.pad.content.PadContent;
import de.tobias.playpad.pad.content.play.Equalizeable;
import de.tobias.playpad.plugin.Module;
......@@ -73,7 +74,15 @@ public class EqualizerPluginImpl implements PlayPadPluginStub, PluginArtifact, W
}
@Override
public void onPlay(Pad pad) {
public void onStatusChange(Pad pad, PadStatus newValue) {
if (newValue == PadStatus.PLAY) {
onPlay(pad);
} else if (newValue == PadStatus.STOP) {
onStop(pad);
}
}
private void onPlay(Pad pad) {
PadContent content = pad.getContent();
if (content instanceof Equalizeable) {
......@@ -89,8 +98,7 @@ public class EqualizerPluginImpl implements PlayPadPluginStub, PluginArtifact, W
}
}
@Override
public void onStop(Pad pad) {
private void onStop(Pad pad) {
PadContent content = pad.getContent();
if (content instanceof Equalizeable) {
......
......@@ -2,15 +2,19 @@ package de.tobias.playpad.plugin.api
import de.thecodelabs.logger.Logger
import de.thecodelabs.plugins.{Plugin, PluginDescriptor}
import de.tobias.playpad.PlayPadPlugin
import de.tobias.playpad.plugin.api.websocket.WebSocketHandler
import de.tobias.playpad.plugin.api.websocket.listener.PadStatusListener
import spark.Spark
class WebApiPlugin extends Plugin {
override def startup(pluginDescriptor: PluginDescriptor): Unit = {
PlayPadPlugin.getInstance().addPadListener(new PadStatusListener)
Logger.debug("Enable Web API Plugin")
Spark.port(9876)
Spark.webSocket("/api", classOf[WebSocketHandler])
Spark.webSocket("/api", WebSocketHandler.instance)
Spark.get("/", (_, _) => "PlayWall API")
}
......
......@@ -45,9 +45,21 @@ class WebSocketHandler {
@OnWebSocketError def onError(session: Session, error: Throwable): Unit = {
Logger.error(error)
}
def sendUpdate(message: String, jsonObject: JsonObject): Unit = {
jsonObject.addProperty("updateType", message)
val payload = WebSocketHandler.gson.toJson(jsonObject)
sessions.stream()
.filter(session => session.isOpen)
.forEach(session => session.getRemote.sendString(payload))
}
}
object WebSocketHandler {
lazy val instance: WebSocketHandler = new WebSocketHandler
private val gson = new Gson()
def sendResponse(session: Session, message: Message, response: JsonObject) = {
......
package de.tobias.playpad.plugin.api.websocket.listener
import com.google.gson.JsonObject
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 {
override def onStatusChange(pad: Pad, newValue: PadStatus): Unit = {
val payload = new JsonObject
payload.addProperty("pad", pad.getUuid.toString)
payload.addProperty("status", newValue.name())
WebSocketHandler.instance.sendUpdate("pad-status-changed", payload)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment