From 39d78b993404ef642f346348ca2fcb6d82009341 Mon Sep 17 00:00:00 2001
From: tobias <tobias@thecodedev.de>
Date: Thu, 5 Sep 2019 19:48:45 +0200
Subject: [PATCH] Add pad status command to web api

---
 .../java/de/tobias/playpad/PlayPadImpl.java   |  4 ++
 .../dialog/PathMatchDialog.java               | 42 ++++++++-----------
 .../api/websocket/WebSocketHandler.scala      |  7 ++--
 .../methods/PadStatusChangeMethod.scala       | 32 ++++++++++++++
 4 files changed, 58 insertions(+), 27 deletions(-)
 create mode 100644 PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/PadStatusChangeMethod.scala

diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
index ff295d87..79931607 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
@@ -159,6 +159,10 @@ public class PlayPadImpl implements PlayPad {
 		} else {
 			currentProject = project;
 			mainViewController.openProject(project);
+
+			if (onLoaded != null) {
+				onLoaded.accept(mainViewController);
+			}
 		}
 	}
 
diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/dialog/PathMatchDialog.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/dialog/PathMatchDialog.java
index e228382f..028c1a91 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/dialog/PathMatchDialog.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/dialog/PathMatchDialog.java
@@ -32,7 +32,6 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -252,35 +251,30 @@ public class PathMatchDialog extends NVC {
 		}
 	}
 
-	private Set<Path> searchHistory = new HashSet<>();
-
 	private void find(boolean subdirectories) {
 		// Check Project
 		Worker.runLater(() -> {
 			if (!missingMediaPaths.isEmpty()) {
 				Set<Path> searchFolders = calculateSearchPaths();
 
-				searchFolders.stream()
-						.filter(folder -> !searchHistory.contains(folder))
-						.forEach(folder -> {
-							searchHistory.add(folder);
-							Logger.info("Search in: " + folder);
-							this.missingMediaPaths.parallelStream()
-									.filter(entry -> !entry.isMatched())
-									.forEach(entry -> {
-										try {
-											Path result = MediaPool.find(entry.getMediaPath().getFileName(), folder, subdirectories);
-											if (result != null) {
-												Platform.runLater(() -> {
-													entry.setLocalPath(result);
-													entry.setSelected(true);
-												});
-											}
-										} catch (IOException e) {
-											Logger.error(e);
-										}
-									});
-						});
+				searchFolders.forEach(folder -> {
+					Logger.info("Search in: " + folder);
+					this.missingMediaPaths.parallelStream()
+							.filter(entry -> !entry.isMatched())
+							.forEach(entry -> {
+								try {
+									Path result = MediaPool.find(entry.getMediaPath().getFileName(), folder, subdirectories);
+									if (result != null) {
+										Platform.runLater(() -> {
+											entry.setLocalPath(result);
+											entry.setSelected(true);
+										});
+									}
+								} catch (IOException e) {
+									Logger.error(e);
+								}
+							});
+				});
 				Platform.runLater(() -> table.getItems().setAll(missingMediaPaths));
 			}
 		});
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/WebSocketHandler.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/WebSocketHandler.scala
index 4f665597..08bc4686 100644
--- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/WebSocketHandler.scala
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/WebSocketHandler.scala
@@ -5,7 +5,7 @@ import java.util.concurrent.ConcurrentLinkedQueue
 import com.google.gson.{Gson, JsonObject}
 import de.thecodelabs.logger.Logger
 import de.tobias.playpad.plugin.api.websocket.message.Message
-import de.tobias.playpad.plugin.api.websocket.methods.{ProjectCurrentMethod, ProjectListMethod, ProjectOpenMethod}
+import de.tobias.playpad.plugin.api.websocket.methods.{PadStatusChangeMethod, ProjectCurrentMethod, ProjectListMethod, ProjectOpenMethod}
 import org.eclipse.jetty.websocket.api.Session
 import org.eclipse.jetty.websocket.api.annotations._
 
@@ -17,7 +17,8 @@ class WebSocketHandler {
 	private val methods: Map[String, MethodExecutable] = Map(
 		"project-list" -> new ProjectListMethod,
 		"project-current" -> new ProjectCurrentMethod,
-		"project-open" -> new ProjectOpenMethod
+		"project-open" -> new ProjectOpenMethod,
+		"pad-status-change" -> new PadStatusChangeMethod
 	)
 
 	@OnWebSocketConnect def connected(session: Session): Unit = {
@@ -42,7 +43,7 @@ class WebSocketHandler {
 	}
 
 	@OnWebSocketError def onError(session: Session, error: Throwable): Unit = {
-		Logger.warning(error.getMessage)
+		Logger.error(error)
 	}
 }
 
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/PadStatusChangeMethod.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/PadStatusChangeMethod.scala
new file mode 100644
index 00000000..492583d0
--- /dev/null
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/PadStatusChangeMethod.scala
@@ -0,0 +1,32 @@
+package de.tobias.playpad.plugin.api.websocket.methods
+
+import java.util.UUID
+
+import com.google.gson.JsonObject
+import de.tobias.playpad.PlayPadPlugin
+import de.tobias.playpad.pad.PadStatus
+import de.tobias.playpad.plugin.api.websocket.MethodExecutable
+import de.tobias.playpad.plugin.api.websocket.message.Message
+import javafx.application.Platform
+import org.eclipse.jetty.websocket.api.Session
+
+class PadStatusChangeMethod extends MethodExecutable {
+	override def execute(session: Session, message: Message): JsonObject = {
+		val padId = UUID.fromString(message.payload.get("pad").getAsString)
+		val newStatus = PadStatus.valueOf(message.payload.get("status").getAsString)
+
+		val currentProject = PlayPadPlugin.getInstance().getCurrentProject
+		val pad = currentProject.getPad(padId)
+
+		Platform.runLater(() => {
+			newStatus match {
+				case PadStatus.PLAY => pad.play()
+				case PadStatus.PAUSE => pad.pause()
+				case PadStatus.STOP => pad.stop()
+				case _ =>
+			}
+		})
+
+		new JsonObject
+	}
+}
-- 
GitLab