diff --git a/src/DynamoCoreWpf/Views/PackageManager/Components/PackageManagerWizard/PackageManagerWizard.xaml.cs b/src/DynamoCoreWpf/Views/PackageManager/Components/PackageManagerWizard/PackageManagerWizard.xaml.cs index d1bfe5fd012..8413895ffd9 100644 --- a/src/DynamoCoreWpf/Views/PackageManager/Components/PackageManagerWizard/PackageManagerWizard.xaml.cs +++ b/src/DynamoCoreWpf/Views/PackageManager/Components/PackageManagerWizard/PackageManagerWizard.xaml.cs @@ -19,6 +19,7 @@ using Dynamo.PackageManager; using Dynamo.PackageManager.UI; using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; using JsonSerializer = System.Text.Json.JsonSerializer; using Greg.Requests; using Newtonsoft.Json.Linq; @@ -537,12 +538,33 @@ private async void SendPackageUpdates(PublishPackageViewModel vm) }; var payload = new { payload = packageDetails }; - var options = new JsonSerializerOptions + var jsonSerializerSettings = new JsonSerializerSettings { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase + ContractResolver = new CamelCasePropertyNamesContractResolver() }; + var jsonSerializer = Newtonsoft.Json.JsonSerializer.Create(jsonSerializerSettings); + var rootObj = JObject.FromObject(payload, jsonSerializer); - string jsonPayload = JsonSerializer.Serialize(payload, options); + // Include payload.versions[*].compatibility_matrix for the "Copy from" dropdown. + try + { + var header = await TryGetPackageHeaderAsync(vm); + if (header != null) + { + if (rootObj["payload"] is JObject payloadObj) + { + payloadObj["versions"] = header.versions != null + ? JToken.FromObject(header.versions, jsonSerializer) + : new JArray(); + } + } + } + catch (Exception ex) + { + LogMessage(ex); + } + + var jsonPayload = rootObj.ToString(Newtonsoft.Json.Formatting.None); if (dynWebView?.CoreWebView2 != null) { @@ -550,6 +572,31 @@ private async void SendPackageUpdates(PublishPackageViewModel vm) } } + private async Task TryGetPackageHeaderAsync(PublishPackageViewModel vm) + { + var pmClientVm = vm?.DynamoViewModel?.PackageManagerClientViewModel; + var pkgName = vm?.Package?.Name ?? vm?.Name; + if (string.IsNullOrWhiteSpace(pkgName) || pmClientVm == null) return null; + + var cachedHeader = pmClientVm.CachedPackageList?.FirstOrDefault(x => x.Name == pkgName)?.Header; + if (cachedHeader != null) return cachedHeader; + + if (pmClientVm.Model != null && !pmClientVm.Model.NoNetworkMode) + { + try + { + await Task.Run(() => pmClientVm.ListAll()); + return pmClientVm.CachedPackageList?.FirstOrDefault(x => x.Name == pkgName)?.Header; + } + catch (Exception ex) + { + LogMessage(ex); + } + } + + return null; + } + private async void UpdateRetainFolderStructureFlag(bool flag) { var payload = new { flag = flag };