|
19 | 19 | using Dynamo.PackageManager; |
20 | 20 | using Dynamo.PackageManager.UI; |
21 | 21 | using Newtonsoft.Json; |
| 22 | +using Newtonsoft.Json.Serialization; |
22 | 23 | using JsonSerializer = System.Text.Json.JsonSerializer; |
23 | 24 | using Greg.Requests; |
24 | 25 | using Newtonsoft.Json.Linq; |
@@ -537,19 +538,65 @@ private async void SendPackageUpdates(PublishPackageViewModel vm) |
537 | 538 | }; |
538 | 539 |
|
539 | 540 | var payload = new { payload = packageDetails }; |
540 | | - var options = new JsonSerializerOptions |
| 541 | + var jsonSerializerSettings = new JsonSerializerSettings |
541 | 542 | { |
542 | | - PropertyNamingPolicy = JsonNamingPolicy.CamelCase |
| 543 | + ContractResolver = new CamelCasePropertyNamesContractResolver() |
543 | 544 | }; |
| 545 | + var jsonSerializer = Newtonsoft.Json.JsonSerializer.Create(jsonSerializerSettings); |
| 546 | + var rootObj = JObject.FromObject(payload, jsonSerializer); |
544 | 547 |
|
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); |
546 | 568 |
|
547 | 569 | if (dynWebView?.CoreWebView2 != null) |
548 | 570 | { |
549 | 571 | await dynWebView.CoreWebView2.ExecuteScriptAsync($"window.receiveUpdatedPackageDetails({jsonPayload});"); |
550 | 572 | } |
551 | 573 | } |
552 | 574 |
|
| 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 | + |
553 | 600 | private async void UpdateRetainFolderStructureFlag(bool flag) |
554 | 601 | { |
555 | 602 | var payload = new { flag = flag }; |
|
0 commit comments