Skip to content

Commit e883c6f

Browse files
authored
DYN-8203: Add a button to copy compatibility info from previous version (#16831)
1 parent 97a559f commit e883c6f

File tree

1 file changed

+50
-3
lines changed

1 file changed

+50
-3
lines changed

src/DynamoCoreWpf/Views/PackageManager/Components/PackageManagerWizard/PackageManagerWizard.xaml.cs

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using Dynamo.PackageManager;
2020
using Dynamo.PackageManager.UI;
2121
using Newtonsoft.Json;
22+
using Newtonsoft.Json.Serialization;
2223
using JsonSerializer = System.Text.Json.JsonSerializer;
2324
using Greg.Requests;
2425
using Newtonsoft.Json.Linq;
@@ -537,19 +538,65 @@ private async void SendPackageUpdates(PublishPackageViewModel vm)
537538
};
538539

539540
var payload = new { payload = packageDetails };
540-
var options = new JsonSerializerOptions
541+
var jsonSerializerSettings = new JsonSerializerSettings
541542
{
542-
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
543+
ContractResolver = new CamelCasePropertyNamesContractResolver()
543544
};
545+
var jsonSerializer = Newtonsoft.Json.JsonSerializer.Create(jsonSerializerSettings);
546+
var rootObj = JObject.FromObject(payload, jsonSerializer);
544547

545-
string jsonPayload = JsonSerializer.Serialize(payload, options);
548+
// Include payload.versions[*].compatibility_matrix for the "Copy from" dropdown.
549+
try
550+
{
551+
var header = await TryGetPackageHeaderAsync(vm);
552+
if (header != null)
553+
{
554+
if (rootObj["payload"] is JObject payloadObj)
555+
{
556+
payloadObj["versions"] = header.versions != null
557+
? JToken.FromObject(header.versions, jsonSerializer)
558+
: new JArray();
559+
}
560+
}
561+
}
562+
catch (Exception ex)
563+
{
564+
LogMessage(ex);
565+
}
566+
567+
var jsonPayload = rootObj.ToString(Newtonsoft.Json.Formatting.None);
546568

547569
if (dynWebView?.CoreWebView2 != null)
548570
{
549571
await dynWebView.CoreWebView2.ExecuteScriptAsync($"window.receiveUpdatedPackageDetails({jsonPayload});");
550572
}
551573
}
552574

575+
private async Task<Greg.Responses.PackageHeader> TryGetPackageHeaderAsync(PublishPackageViewModel vm)
576+
{
577+
var pmClientVm = vm?.DynamoViewModel?.PackageManagerClientViewModel;
578+
var pkgName = vm?.Package?.Name ?? vm?.Name;
579+
if (string.IsNullOrWhiteSpace(pkgName) || pmClientVm == null) return null;
580+
581+
var cachedHeader = pmClientVm.CachedPackageList?.FirstOrDefault(x => x.Name == pkgName)?.Header;
582+
if (cachedHeader != null) return cachedHeader;
583+
584+
if (pmClientVm.Model != null && !pmClientVm.Model.NoNetworkMode)
585+
{
586+
try
587+
{
588+
await Task.Run(() => pmClientVm.ListAll());
589+
return pmClientVm.CachedPackageList?.FirstOrDefault(x => x.Name == pkgName)?.Header;
590+
}
591+
catch (Exception ex)
592+
{
593+
LogMessage(ex);
594+
}
595+
}
596+
597+
return null;
598+
}
599+
553600
private async void UpdateRetainFolderStructureFlag(bool flag)
554601
{
555602
var payload = new { flag = flag };

0 commit comments

Comments
 (0)