diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java index ff295d8719c995b836447c65c15a1724bd97d9af..799316078c501ec56b18058a1a1640ee4ea8f968 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 e228382f23b592bde79fa186e88aa4631ace874f..028c1a91917ff8800ce82c2473af0832308cfe6b 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 4f665597bc174abfe38681858b4a1d40e5ff34c0..08bc4686781602768c665754a6cadb441be946e3 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 0000000000000000000000000000000000000000..492583d000d44bdd997507e27fae325436c0b21c --- /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 + } +}