diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index 5f65190..699390b 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -36,9 +36,11 @@ discoveryToolStripMenuItem = new ToolStripMenuItem(); startToolStripMenuItem = new ToolStripMenuItem(); stopToolStripMenuItem = new ToolStripMenuItem(); - forceReloadToolStripMenuItem = new ToolStripMenuItem(); + forceRediscoverToolStripMenuItem = new ToolStripMenuItem(); saveToolStripMenuItem = new ToolStripMenuItem(); loadToolStripMenuItem = new ToolStripMenuItem(); + toolStripSeparator1 = new ToolStripSeparator(); + toolStripStatusDisco = new ToolStripStatusLabel(); statusStripMain.SuspendLayout(); menuStrip1.SuspendLayout(); SuspendLayout(); @@ -56,7 +58,7 @@ // // statusStripMain // - statusStripMain.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel }); + statusStripMain.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel, toolStripStatusDisco }); statusStripMain.Location = new Point(0, 428); statusStripMain.Name = "statusStripMain"; statusStripMain.Size = new Size(800, 22); @@ -79,7 +81,7 @@ // // discoveryToolStripMenuItem // - discoveryToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { startToolStripMenuItem, stopToolStripMenuItem, forceReloadToolStripMenuItem, saveToolStripMenuItem, loadToolStripMenuItem }); + discoveryToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { startToolStripMenuItem, stopToolStripMenuItem, forceRediscoverToolStripMenuItem, toolStripSeparator1, saveToolStripMenuItem, loadToolStripMenuItem }); discoveryToolStripMenuItem.Name = "discoveryToolStripMenuItem"; discoveryToolStripMenuItem.Size = new Size(70, 20); discoveryToolStripMenuItem.Text = "Discovery"; @@ -87,7 +89,7 @@ // startToolStripMenuItem // startToolStripMenuItem.Name = "startToolStripMenuItem"; - startToolStripMenuItem.Size = new Size(180, 22); + startToolStripMenuItem.Size = new Size(165, 22); startToolStripMenuItem.Text = "Start"; startToolStripMenuItem.Click += startToolStripMenuItem_Click; // @@ -95,28 +97,41 @@ // stopToolStripMenuItem.Enabled = false; stopToolStripMenuItem.Name = "stopToolStripMenuItem"; - stopToolStripMenuItem.Size = new Size(180, 22); + stopToolStripMenuItem.Size = new Size(165, 22); stopToolStripMenuItem.Text = "Stop"; stopToolStripMenuItem.Click += stopToolStripMenuItem_Click; // - // forceReloadToolStripMenuItem + // forceRediscoverToolStripMenuItem // - forceReloadToolStripMenuItem.Name = "forceReloadToolStripMenuItem"; - forceReloadToolStripMenuItem.Size = new Size(180, 22); - forceReloadToolStripMenuItem.Text = "Force reload"; - forceReloadToolStripMenuItem.Click += forceReloadToolStripMenuItem_Click; + forceRediscoverToolStripMenuItem.Name = "forceRediscoverToolStripMenuItem"; + forceRediscoverToolStripMenuItem.Size = new Size(165, 22); + forceRediscoverToolStripMenuItem.Text = "Force re-discover"; + forceRediscoverToolStripMenuItem.Click += forceReloadToolStripMenuItem_Click; // // saveToolStripMenuItem // saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - saveToolStripMenuItem.Size = new Size(180, 22); + saveToolStripMenuItem.Size = new Size(165, 22); saveToolStripMenuItem.Text = "Save"; + saveToolStripMenuItem.Click += saveToolStripMenuItem_Click; // // loadToolStripMenuItem // loadToolStripMenuItem.Name = "loadToolStripMenuItem"; - loadToolStripMenuItem.Size = new Size(180, 22); + loadToolStripMenuItem.Size = new Size(165, 22); loadToolStripMenuItem.Text = "Load"; + loadToolStripMenuItem.Click += loadToolStripMenuItem_Click; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new Size(162, 6); + // + // toolStripStatusDisco + // + toolStripStatusDisco.Name = "toolStripStatusDisco"; + toolStripStatusDisco.Size = new Size(111, 17); + toolStripStatusDisco.Text = "Discovery : Stopped"; // // MainForm // @@ -148,8 +163,10 @@ private ToolStripMenuItem discoveryToolStripMenuItem; private ToolStripMenuItem startToolStripMenuItem; private ToolStripMenuItem stopToolStripMenuItem; - private ToolStripMenuItem forceReloadToolStripMenuItem; + private ToolStripMenuItem forceRediscoverToolStripMenuItem; private ToolStripMenuItem saveToolStripMenuItem; private ToolStripMenuItem loadToolStripMenuItem; + private ToolStripSeparator toolStripSeparator1; + private ToolStripStatusLabel toolStripStatusDisco; } } \ No newline at end of file diff --git a/MainForm.cs b/MainForm.cs index b31d386..cb4dc19 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -2,7 +2,11 @@ using System.ComponentModel; using System.Diagnostics; using System.Net; using System.Net.NetworkInformation; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Windows.Forms; using Tmds.MDns; +using static robospot_camera_finder.MainForm; namespace robospot_camera_finder { @@ -17,51 +21,27 @@ namespace robospot_camera_finder private static string browse_scope = "_rtsp._tcp"; + bool is_browsing = false; + public class Camera { - private IPAddress ip; - private string name; - private string location; - private string serial; - - public Camera(string name, IPAddress ip, string location, string serial) + public Camera(string name, string ip, string location, string serial) { - this.name = name; - this.ip = ip; - this.location = location; - this.serial = serial; + camera_name = name; + camera_ip = ip; + camera_location = location; + camera_serial = serial; } - public string camera_name - { - get - { - return name; - } - } + public Camera() { } - public IPAddress camera_ip - { - get - { - return ip; - } - } + public string camera_name { get; set; } - public string camera_location - { - get - { - return location; - } - } - public string camera_serial - { - get - { - return serial; - } - } + public string camera_ip { get; set; } + + public string camera_location { get; set; } + + public string camera_serial { get; set; } } public MainForm() @@ -127,6 +107,8 @@ namespace robospot_camera_finder if (!browser.IsBrowsing) { browser.StartBrowse(browse_scope); + is_browsing = true; + toolStripStatusDisco.Text = "Discovery : Started"; } } else @@ -134,6 +116,8 @@ namespace robospot_camera_finder if (browser.IsBrowsing) { browser.StopBrowse(); + is_browsing = false; + toolStripStatusDisco.Text = "Discovery : Stopped"; } } @@ -166,25 +150,31 @@ namespace robospot_camera_finder serial = serial_line.Substring("SerialNumber=".Length).Trim(); } - Camera new_camera = new Camera("Camera " + cam_addr.ToString() + " - " + location + " - " + serial, cam_addr, location, serial); + Camera new_camera = new Camera("Camera " + cam_addr + " - " + location + " - " + serial, cam_addr.ToString(), location, serial); - if (all_cameras.Count == 0) - { - all_cameras.Add(new_camera); - } else - { - for (int i = 0; i < all_cameras.Count; i++) - { - if (all_cameras[i].camera_serial == new_camera.camera_serial) - { - all_cameras[i] = new_camera; - } - else - { - all_cameras.Add(new_camera); - } - } - } + add_camera(new_camera); + } + } + } + + private void add_camera(Camera new_camera) + { + if (all_cameras.Count == 0) + { + all_cameras.Add(new_camera); + } + else + { + Camera find_cam = all_cameras.FirstOrDefault(cam => cam.camera_serial == new_camera.camera_serial); + + if (find_cam != null) + { + int i = all_cameras.IndexOf(find_cam); + all_cameras[i] = new_camera; + } + else + { + all_cameras.Add(new_camera); } } } @@ -197,7 +187,7 @@ namespace robospot_camera_finder { foreach (var camera in all_cameras) { - if (cam_ip == camera.camera_ip) + if (cam_ip.ToString() == camera.camera_ip) { all_cameras.Remove(camera); return; @@ -244,5 +234,41 @@ namespace robospot_camera_finder browse(true); } } + + private void loadToolStripMenuItem_Click(object sender, EventArgs e) + { + string json = ""; + OpenFileDialog openFile = new OpenFileDialog(); + openFile.Filter = "json file (*.json)|*.json"; + openFile.RestoreDirectory = true; + + if (openFile.ShowDialog() == DialogResult.OK) + { + json = File.ReadAllText(openFile.FileName); + + List cameras_in_file = JsonSerializer.Deserialize>(json); + + foreach (Camera new_camera in cameras_in_file) + { + add_camera(new_camera); + } + } + } + + private void saveToolStripMenuItem_Click(object sender, EventArgs e) + { + string json = JsonSerializer.Serialize>(all_cameras, new JsonSerializerOptions + { + WriteIndented = true + }); + SaveFileDialog saveFile = new SaveFileDialog(); + saveFile.Filter = "json file (*.json)|*.json"; + saveFile.RestoreDirectory = true; + + if (saveFile.ShowDialog() == DialogResult.OK) + { + File.WriteAllText(saveFile.FileName, json); + } + } } } \ No newline at end of file