From 31580d2d68ac2729c6af2866a2a3768a5ef2f0e4 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Thu, 13 Nov 2025 23:10:17 -0600 Subject: [PATCH] add version check before updates subscription OSC --- .../Classes/Communication/QController.cs | 49 +++++++++---------- qController/Classes/Communication/QParser.cs | 1 - qController/Classes/Communication/QUpdater.cs | 11 ++++- .../Classes/Dialogs/WorkspacePrompt.cs | 8 +-- qController/Classes/QItems/QWorkSpace.cs | 17 ++++--- qController/Pages/ControlPage.xaml.cs | 9 ++-- .../Platforms/Android/AndroidManifest.xml | 2 +- 7 files changed, 53 insertions(+), 44 deletions(-) diff --git a/qController/Classes/Communication/QController.cs b/qController/Classes/Communication/QController.cs index 7987901..bd10158 100644 --- a/qController/Classes/Communication/QController.cs +++ b/qController/Classes/Communication/QController.cs @@ -4,6 +4,7 @@ //TODO: STILL NEED TO WORK ON PASSWORD PROTECTED WORKSPACES using Serilog; using qController.QItems; +using System; namespace qController.Communication { @@ -23,33 +24,31 @@ namespace qController.Communication this.ipAddress = address; qClient = new QClient(ipAddress, port); qUpdater = new QUpdater(this); - - } - - public void Connect(string workspace_id) - { - Log.Debug($"QCONTROLLER - Connect Called: {workspace_id}"); - qWorkspace = new QWorkspace(workspace_id); - qClient.sendTCP("/workspace/"+workspace_id+"/connect"); - } - - public void Connect(string workspace_id, string passcode) - { - Log.Debug($"QCONTROLLER - Connect with Passcode Called: {workspace_id}:{passcode}"); - qWorkspace = new QWorkspace(workspace_id); - qClient.sendTCP("/workspace/" + workspace_id + "/connect", passcode); - - } - - public void Connect(QWorkspace workspace) - { - if(workspace.passcode != null) - Connect(workspace.workspace_id, workspace.passcode); - else - Connect(workspace.workspace_id); - + } + public void Connect(QWorkspaceInfo workspaceInfo) + { + Log.Debug($"QCONTROLLER - Connect Called: {workspaceInfo.uniqueID}"); + Connect(new QWorkspace(workspaceInfo)); + } + + public void Connect(QWorkspace workspace) + { + Log.Debug($"QCONTROLLER - Connect Called: {workspace.workspace_id}"); + qWorkspace = workspace; + if (qWorkspace.passcode != null) + { + Log.Debug($"QCONTROLLER - Connect with Passcode Called: {qWorkspace.workspace_id}:{qWorkspace.passcode}"); + qClient.sendTCP("/workspace/" + qWorkspace.workspace_id + "/connect", qWorkspace.passcode); + } + else + { + Log.Debug($"QCONTROLLER - Connect Called: {qWorkspace.workspace_id}"); + qClient.sendTCP("/workspace/" + qWorkspace.workspace_id + "/connect"); + } + } + public void KickOff() { Log.Debug($"QCONTROLLER - Searching for workspaces on: {ipAddress}"); diff --git a/qController/Classes/Communication/QParser.cs b/qController/Classes/Communication/QParser.cs index 1433849..d90907e 100644 --- a/qController/Classes/Communication/QParser.cs +++ b/qController/Classes/Communication/QParser.cs @@ -65,7 +65,6 @@ namespace qController.Communication if (msg.Arguments.Count > 0) { JToken connectStatus = OSC2JSON(msg); - ; OnConnectionStatusChanged(connectStatus.ToString(), msg.Address.Split('/')[3]); } } diff --git a/qController/Classes/Communication/QUpdater.cs b/qController/Classes/Communication/QUpdater.cs index 5d2ecf6..deb4e99 100644 --- a/qController/Classes/Communication/QUpdater.cs +++ b/qController/Classes/Communication/QUpdater.cs @@ -22,7 +22,7 @@ namespace qController.Communication { Log.Debug("QUPDATER - Connection Status Changed: " + args.Status); - + if (args.Status.Contains("ok")) { //new sort of connect format for QLab 5 ok:view|control|edit is connection good @@ -30,7 +30,14 @@ namespace qController.Communication { return; } - qController.qClient.sendTCP("/updates", 1); + if (qController.qWorkspace.version.StartsWith("5")) + { + qController.qClient.sendTCP("/updates", 1); + } + else + { + qController.qClient.sendTCP("/workspace/" + qController.qWorkspace.workspace_id + "/updates", 1); + } qController.qClient.sendTCP("/workspace/" + qController.qWorkspace.workspace_id + "/cueLists"); } } diff --git a/qController/Classes/Dialogs/WorkspacePrompt.cs b/qController/Classes/Dialogs/WorkspacePrompt.cs index 15ad08e..1f0fbd8 100644 --- a/qController/Classes/Dialogs/WorkspacePrompt.cs +++ b/qController/Classes/Dialogs/WorkspacePrompt.cs @@ -38,11 +38,11 @@ namespace qController.Dialogs if (!workspace.hasPasscode) { - OnWorkspaceSelected(new QWorkspace(workspace.uniqueID)); + OnWorkspaceSelected(new QWorkspace(workspace)); } else { - promptWorkspacePasscode(workspace.uniqueID); + promptWorkspacePasscode(workspace); } })); } @@ -51,7 +51,7 @@ namespace qController.Dialogs - public void promptWorkspacePasscode(string workspace_id) + public void promptWorkspacePasscode(QWorkspaceInfo workspaceInfo) { UserDialogs.Instance.Prompt(new PromptConfig { @@ -64,7 +64,7 @@ namespace qController.Dialogs { if (resp.Ok) { - OnWorkspaceSelected(new QWorkspace(workspace_id,resp.Value)); + OnWorkspaceSelected(new QWorkspace(workspaceInfo,resp.Value)); } else { diff --git a/qController/Classes/QItems/QWorkSpace.cs b/qController/Classes/QItems/QWorkSpace.cs index 0124b92..9f231d3 100644 --- a/qController/Classes/QItems/QWorkSpace.cs +++ b/qController/Classes/QItems/QWorkSpace.cs @@ -11,7 +11,7 @@ namespace qController.QItems public string workspace_id { get; set; } public string address { get; set; } public bool IsPopulated { get; set; } - + public string version { get; set; } public string passcode { get; set; } //ONLY FOR PASSING A WORKSPACE LOAD ERROR @@ -20,12 +20,17 @@ namespace qController.QItems workspace_id = id; } - public QWorkspace(string id, string passcode) - { - workspace_id = id; - this.passcode = passcode; + public QWorkspace(QWorkspaceInfo workspaceInfo) + { + workspace_id = workspaceInfo.uniqueID; + version = workspaceInfo.version; + } + public QWorkspace(QWorkspaceInfo workspaceInfo, string passcode) + { + workspace_id = workspaceInfo.uniqueID; + version = workspaceInfo.version; + this.passcode = passcode; } - public QWorkspace() { diff --git a/qController/Pages/ControlPage.xaml.cs b/qController/Pages/ControlPage.xaml.cs index 44b9ff2..609b0b6 100644 --- a/qController/Pages/ControlPage.xaml.cs +++ b/qController/Pages/ControlPage.xaml.cs @@ -63,14 +63,14 @@ namespace qController Log.Debug($"CONTROLPAGE - Connection Status Changed: {args.WorkspaceId} : {args.Status}"); if (args.Status.Contains("ok")) { if(args.Status.Contains(":") && !args.Status.Contains("view")) { - workspacePrompt.promptWorkspacePasscode(args.WorkspaceId); + workspacePrompt.promptWorkspacePasscode(new QWorkspaceInfo { uniqueID = args.WorkspaceId, version = qController.qWorkspace.version }); return; } Device.BeginInvokeOnMainThread(() => { FinishUI(); }); } else if (args.Status.Contains("badpass")) { - workspacePrompt.promptWorkspacePasscode(args.WorkspaceId); + workspacePrompt.promptWorkspacePasscode(new QWorkspaceInfo { uniqueID = args.WorkspaceId, version = qController.qWorkspace.version }); } } @@ -82,10 +82,9 @@ namespace qController } else if (args.WorkspaceInfo.Count == 1) { Log.Debug("CONTROLPAGE - ONLY ONE WORKSPACE ON SELECTED COMPUTER"); if (!args.WorkspaceInfo[0].hasPasscode) { - qController.Connect(args.WorkspaceInfo[0].uniqueID); - + qController.Connect(args.WorkspaceInfo[0]); } else { - workspacePrompt.promptWorkspacePasscode(args.WorkspaceInfo[0].uniqueID); + workspacePrompt.promptWorkspacePasscode(args.WorkspaceInfo[0]); } } else { diff --git a/qController/Platforms/Android/AndroidManifest.xml b/qController/Platforms/Android/AndroidManifest.xml index 1aebd1f..0684526 100644 --- a/qController/Platforms/Android/AndroidManifest.xml +++ b/qController/Platforms/Android/AndroidManifest.xml @@ -1,5 +1,5 @@  - +