diff --git a/Main/src/main/java/Classes/SettingsManager.java b/Main/src/main/java/Classes/SettingsManager.java index e241a3295..bf488e88a 100644 --- a/Main/src/main/java/Classes/SettingsManager.java +++ b/Main/src/main/java/Classes/SettingsManager.java @@ -3,16 +3,14 @@ import Objects.*; import java.io.*; import java.nio.file.*; -import Objects.VideoMode; +import Objects.CamVideoMode; import com.google.gson.Gson; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import edu.wpi.cscore.*; -import org.opencv.video.Video; import org.opencv.videoio.VideoCapture; public class SettingsManager { @@ -99,7 +97,14 @@ public class SettingsManager { } } private void InitiateUsbCamerasSettings(){ - + for(Map.Entry entry: UsbCameras.entrySet()){ + var cam = entry.getValue(); + var camName = entry.getKey(); + var camInfo = Cameras.get(camName); + cam.setPixelFormat(VideoMode.PixelFormat.valueOf(camInfo.camVideoMode.pixel_format)); + cam.setFPS(camInfo.camVideoMode.fps); + cam.setResolution(camInfo.camVideoMode.width, camInfo.camVideoMode.heigh); + } } private void CheckPath(Path path){ if (!Files.exists(path)){ @@ -110,34 +115,71 @@ public class SettingsManager { } } } + // Creators private void CreateNewCam(String CameraName){ Camera cam = new Camera(); var caminfo =USBCamerasInfo.get(CameraName); cam.path = caminfo.path; var videomode = UsbCameras.get(CameraName).enumerateVideoModes()[0]; - VideoMode CamVideoMode = new VideoMode(); + CamVideoMode CamVideoMode = new CamVideoMode(); CamVideoMode.fps = videomode.fps; CamVideoMode.heigh = videomode.height; CamVideoMode.width = videomode.width; CamVideoMode.pixel_format = videomode.pixelFormat.name(); - + cam.camVideoMode = CamVideoMode; cam.pipelines = new HashMap(); cam.resolution = 0; cam.FOV = 60.8; Cameras.put(CameraName,cam); - CreateNewPipeline("",CameraName); + + CreateNewPipeline(null,CameraName); } private void CreateNewPipeline(String PipeName, String CamName){ - if (CamName.equals("")){ + if (CamName == null){ CamName = GeneralSettings.curr_camera; } - if (PipeName.equals("")){ + var cam = Cameras.get(CamName); + if (PipeName == null){ var suffix = 0; PipeName = "pipeline" + suffix; - - + while (cam.pipelines.containsKey(PipeName)){ + suffix ++; + PipeName = "pipeline"+suffix; + } + } + else if (cam.pipelines.containsKey(PipeName)){ + System.err.println("Pipeline Already Exists"); + } + cam.pipelines.put(PipeName,new DefaultPipeline()); + } + //Savers + public void SaveSettings(){ + SaveCameras(); + SaveGeneralSettings(); + } + private void SaveCameras(){ + for(Map.Entry entry: Cameras.entrySet()){ + try { + Gson gson = new Gson(); + FileWriter writer = new FileWriter(Paths.get(CamsPath.toString(),String.format("%s.json",entry.getKey())).toString()); + gson.toJson(entry.getValue(),writer); + writer.flush(); + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + private void SaveGeneralSettings(){ + try { + Gson gson = new Gson(); + FileWriter writer = new FileWriter(Paths.get(SettingsPath.toString(),"Settings.json").toString()); + new Gson().toJson(GeneralSettings, writer); + writer.flush(); + writer.close(); + } catch (IOException e) { + e.printStackTrace(); } } - } diff --git a/Main/src/main/java/Handlers/Web/Server.java b/Main/src/main/java/Handlers/Web/Server.java index b02fcbcc4..257b72a45 100644 --- a/Main/src/main/java/Handlers/Web/Server.java +++ b/Main/src/main/java/Handlers/Web/Server.java @@ -1,5 +1,6 @@ package Handlers.Web; +import Classes.SettingsManager; import io.javalin.Javalin; import io.javalin.websocket.WsContext; import java.util.ArrayList; @@ -19,6 +20,7 @@ public class Server { ws.onClose(ctx -> { users.remove(ctx); System.out.println("Socket Disconnected"); + SettingsManager.getInstance().SaveSettings(); }); ws.onMessage(ctx -> { broadcastMessage(ctx, ctx.message()); diff --git a/Main/src/main/java/Objects/VideoMode.java b/Main/src/main/java/Objects/CamVideoMode.java similarity index 80% rename from Main/src/main/java/Objects/VideoMode.java rename to Main/src/main/java/Objects/CamVideoMode.java index fa9e92426..503971884 100644 --- a/Main/src/main/java/Objects/VideoMode.java +++ b/Main/src/main/java/Objects/CamVideoMode.java @@ -1,6 +1,6 @@ package Objects; -public class VideoMode { +public class CamVideoMode { public int fps; public int width; public int heigh; diff --git a/Main/src/main/java/Objects/Camera.java b/Main/src/main/java/Objects/Camera.java index b93ef62ed..dce17c3b4 100644 --- a/Main/src/main/java/Objects/Camera.java +++ b/Main/src/main/java/Objects/Camera.java @@ -1,7 +1,5 @@ package Objects; -import edu.wpi.cscore.UsbCameraInfo; - import java.util.HashMap; public class Camera { @@ -9,6 +7,6 @@ public class Camera { public String path = ""; public HashMap pipelines; public int resolution = 0; - public VideoMode videoMode; + public CamVideoMode camVideoMode; }