From eb9cbf7f62b3ae9882b88096f223950e93eb31bd Mon Sep 17 00:00:00 2001
From: tobias <tobias@thecodedev.de>
Date: Wed, 11 Sep 2019 17:22:22 +0200
Subject: [PATCH] Add design to project web api

---
 .../playpad/design/modern/ModernColor.java    |  2 +-
 .../websocket/listener/ProjectListener.scala  |  4 ++-
 .../methods/ProjectCurrentMethod.scala        |  3 +-
 .../serialize/ProjectSerializer.scala         | 30 ++++++++++++++++++-
 4 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernColor.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernColor.java
index f8c90942..7da15f82 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernColor.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernColor.java
@@ -69,7 +69,7 @@ public enum ModernColor implements DisplayableColor {
 		colors = Storage.load(inputStream, StorageTypes.JSON, ModernColorBean[].class);
 	}
 
-	private Optional<ModernColorBean> getCurrentModernColor() {
+	public Optional<ModernColorBean> getCurrentModernColor() {
 		return Stream.of(colors).filter(color -> color.getName().equals(name())).findAny();
 	}
 
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/ProjectListener.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/ProjectListener.scala
index a099218e..a0a8a8aa 100644
--- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/ProjectListener.scala
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/listener/ProjectListener.scala
@@ -3,10 +3,12 @@ package de.tobias.playpad.plugin.api.websocket.listener
 import de.tobias.playpad.plugin.GlobalAdapter
 import de.tobias.playpad.plugin.api.websocket.WebSocketHandler
 import de.tobias.playpad.plugin.api.websocket.serialize.ProjectSerializer
+import de.tobias.playpad.profile.Profile
 import de.tobias.playpad.project.Project
 
 class ProjectListener extends GlobalAdapter {
 	override def projectOpened(newProject: Project): Unit = {
-		WebSocketHandler.instance.sendUpdate("project-changed", ProjectSerializer.serializeProject(newProject))
+		val jsonObject = ProjectSerializer.serializeProject(newProject, Profile.currentProfile())
+		WebSocketHandler.instance.sendUpdate("project-changed", jsonObject)
 	}
 }
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/ProjectCurrentMethod.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/ProjectCurrentMethod.scala
index df30b50f..ac5cd111 100644
--- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/ProjectCurrentMethod.scala
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/methods/ProjectCurrentMethod.scala
@@ -5,6 +5,7 @@ import de.tobias.playpad.PlayPadPlugin
 import de.tobias.playpad.plugin.api.websocket.MethodExecutable
 import de.tobias.playpad.plugin.api.websocket.message.Message
 import de.tobias.playpad.plugin.api.websocket.serialize.ProjectSerializer
+import de.tobias.playpad.profile.Profile
 import org.eclipse.jetty.websocket.api.Session
 
 class ProjectCurrentMethod extends MethodExecutable {
@@ -14,7 +15,7 @@ class ProjectCurrentMethod extends MethodExecutable {
 		if (currentProject == null) {
 			new JsonObject
 		} else {
-			ProjectSerializer.serializeProject(currentProject)
+			ProjectSerializer.serializeProject(currentProject, Profile.currentProfile)
 		}
 	}
 }
diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/serialize/ProjectSerializer.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/serialize/ProjectSerializer.scala
index aeef56e1..3c1e1571 100644
--- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/serialize/ProjectSerializer.scala
+++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/websocket/serialize/ProjectSerializer.scala
@@ -1,11 +1,13 @@
 package de.tobias.playpad.plugin.api.websocket.serialize
 
 import com.google.gson.{JsonArray, JsonObject}
+import de.tobias.playpad.design.modern.ModernColor
+import de.tobias.playpad.profile.Profile
 import de.tobias.playpad.project.Project
 
 object ProjectSerializer {
 
-	def serializeProject(project: Project): JsonObject = {
+	def serializeProject(project: Project, profile: Profile): JsonObject = {
 		val result = new JsonObject
 
 		result.addProperty("id", project.getProjectReference.getUuid.toString)
@@ -31,6 +33,11 @@ object ProjectSerializer {
 				padObject.addProperty("position", pad.getPosition)
 				padObject.addProperty("page", pad.getPage.getPosition)
 
+				val padDesign = new JsonObject
+				padDesign.add("normal", serializeDesign(pad.getPadSettings.getDesign.getBackgroundColor))
+				padDesign.add("play", serializeDesign(pad.getPadSettings.getDesign.getPlayColor))
+				padObject.add("design", padDesign)
+
 				padArray.add(padObject)
 			})
 			pageObject.add("pads", padArray)
@@ -38,6 +45,27 @@ object ProjectSerializer {
 			pageArray.add(pageObject)
 		})
 		result.add("pages", pageArray)
+
+		val globalDesign = new JsonObject
+		globalDesign.add("normal", serializeDesign(profile.getProfileSettings.getDesign.getBackgroundColor))
+		globalDesign.add("play", serializeDesign(profile.getProfileSettings.getDesign.getPlayColor))
+		result.add("design", globalDesign)
+
 		result
 	}
+
+	private def serializeDesign(color: ModernColor): JsonObject = {
+		val json = new JsonObject
+
+		color.getCurrentModernColor.ifPresent(c => {
+			json.addProperty("hi", c.getColors.getHi)
+			json.addProperty("low", c.getColors.getLow)
+			json.addProperty("font", c.getColors.getFont)
+			json.addProperty("button", c.getColors.getButton)
+			json.addProperty("playbarBackground", c.getColors.getPlaybar.getBackground)
+			json.addProperty("playbarTrack", c.getColors.getPlaybar.getTrack)
+		})
+
+		json
+	}
 }
-- 
GitLab