diff --git a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Components/Operations/Send/SendAsyncComponent.cs b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Components/Operations/Send/SendAsyncComponent.cs index 9137fde62..e186d4800 100644 --- a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Components/Operations/Send/SendAsyncComponent.cs +++ b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Components/Operations/Send/SendAsyncComponent.cs @@ -25,9 +25,6 @@ namespace Speckle.Connectors.GrasshopperShared.Components.Operations.Send; [Guid("52481972-7867-404F-8D9F-E1481183F355")] public class SendAsyncComponent : GH_AsyncComponent { - public GhContextMenuButton ProjectContextMenuButton { get; set; } - public GhContextMenuButton ModelContextMenuButton { get; set; } - public SendAsyncComponent() : base( "Publish", @@ -57,6 +54,8 @@ public class SendAsyncComponent : GH_AsyncComponent public SpeckleUrlModelResource? OutputParam { get; set; } public bool HasMultipleInputs { get; set; } + public string? VersionMessage { get; private set; } + protected override void RegisterInputParams(GH_InputParamManager pManager) { pManager.AddParameter(new SpeckleUrlModelResourceParam()); @@ -67,6 +66,8 @@ public class SendAsyncComponent : GH_AsyncComponent "The collection model object to send", GH_ParamAccess.item ); + pManager.AddTextParameter("Version Message", "versionMessage", "The version message", GH_ParamAccess.item); + pManager[2].Optional = true; } protected override void RegisterOutputParams(GH_OutputParamManager pManager) @@ -275,6 +276,10 @@ public class SendAsyncComponent : GH_AsyncComponent return; } RootCollectionWrapper = rootCollectionWrapper; + + string? versionMessage = null; + da.GetData(2, ref versionMessage); + VersionMessage = versionMessage; } } @@ -402,7 +407,13 @@ public class SendComponentWorker : WorkerInstance using var scope = PriorityLoader.CreateScopeForActiveDocument(); var sendOperation = scope.ServiceProvider.GetRequiredService>(); SendOperationResult? result = await sendOperation - .Execute(new List() { rootCollectionWrapper }, sendInfo, progress, CancellationToken) + .Execute( + new List() { rootCollectionWrapper }, + sendInfo, + Parent.VersionMessage, + progress, + CancellationToken + ) .ConfigureAwait(false); // TODO: If we have NodeRun events later, better to have `ComponentTracker` to use across components diff --git a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Components/Operations/Send/SendComponent.cs b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Components/Operations/Send/SendComponent.cs index ca69fcb29..de0b17a3a 100644 --- a/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Components/Operations/Send/SendComponent.cs +++ b/Connectors/Rhino/Speckle.Connectors.GrasshopperShared/Components/Operations/Send/SendComponent.cs @@ -49,6 +49,8 @@ public class SendComponent : SpeckleTaskCapableComponent Resources.speckle_operations_syncpublish; protected override void RegisterInputParams(GH_InputParamManager pManager) @@ -61,7 +63,8 @@ public class SendComponent : SpeckleTaskCapableComponent() { input.Input }, sendInfo, progress, cancellationToken) + await sendOperation + .Execute( + new List() { input.Input }, + sendInfo, + VersionMessage, + progress, + cancellationToken + ) .ConfigureAwait(false); // TODO: If we have NodeRun events later, better to have `ComponentTracker` to use across components diff --git a/DUI3/Speckle.Connectors.DUI.Tests/SendOperationManagerTests.cs b/DUI3/Speckle.Connectors.DUI.Tests/SendOperationManagerTests.cs index a264f6289..74cb3cce6 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/SendOperationManagerTests.cs +++ b/DUI3/Speckle.Connectors.DUI.Tests/SendOperationManagerTests.cs @@ -81,7 +81,7 @@ public class SendOperationManagerTests : MoqTest var sendOperationMock = Create>(); sendOperationMock - .Setup(x => x.Execute(objects, It.IsAny(), progressHandler.Object, It.IsAny())) + .Setup(x => x.Execute(objects, It.IsAny(), null, progressHandler.Object, It.IsAny())) .ReturnsAsync( new SendOperationResult("rootObjId", versionId, new Dictionary(), sendResults) ); diff --git a/DUI3/Speckle.Connectors.DUI/Bindings/SendOperationManager.cs b/DUI3/Speckle.Connectors.DUI/Bindings/SendOperationManager.cs index b31fff05c..0300d4d27 100644 --- a/DUI3/Speckle.Connectors.DUI/Bindings/SendOperationManager.cs +++ b/DUI3/Speckle.Connectors.DUI/Bindings/SendOperationManager.cs @@ -86,7 +86,7 @@ public sealed class SendOperationManager( var sendResult = await serviceScope .ServiceProvider.GetRequiredService>() - .Execute(objects, sendInfo, progress, cancellationItem.Token); + .Execute(objects, sendInfo, null, progress, cancellationItem.Token); await commands.SetModelSendResult(modelCardId, sendResult.VersionId, sendResult.ConversionResults); } diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs b/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs index 9ae7d9938..1343c9051 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs @@ -46,6 +46,7 @@ public class Sender( projectId, modelId, token, + null, account, progress, CancellationToken.None diff --git a/Sdk/Speckle.Connectors.Common.Tests/Operations/SendOperationTests.cs b/Sdk/Speckle.Connectors.Common.Tests/Operations/SendOperationTests.cs index 1b3e60eb8..8207c8e0d 100644 --- a/Sdk/Speckle.Connectors.Common.Tests/Operations/SendOperationTests.cs +++ b/Sdk/Speckle.Connectors.Common.Tests/Operations/SendOperationTests.cs @@ -71,7 +71,7 @@ public class SendOperationTests : MoqTest activityFactory.Object, threadContext.Object ); - var result = await sendOperation.Execute(objects, sendInfo, progress.Object, ct); + var result = await sendOperation.Execute(objects, sendInfo, null, progress.Object, ct); result.Should().NotBeNull(); rootResult.RootObject["version"].Should().Be(3); result.RootObjId.Should().Be(rootId); @@ -125,7 +125,7 @@ public class SendOperationTests : MoqTest sendProgress.Setup(x => x.Begin()); sendOperationVersionRecorder - .Setup(x => x.RecordVersion(rootId, modelId, projectId, sourceApplication, account, ct)) + .Setup(x => x.RecordVersion(rootId, modelId, projectId, sourceApplication, null, account, ct)) .ReturnsAsync("version"); var sp = services.BuildServiceProvider(); @@ -145,6 +145,7 @@ public class SendOperationTests : MoqTest projectId, modelId, sourceApplication, + null, account, progress.Object, ct diff --git a/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs b/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs index 8d7a8ec47..6628387cf 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs @@ -26,6 +26,7 @@ public sealed class SendOperation( public async Task Execute( IReadOnlyList objects, SendInfo sendInfo, + string? versionMessage, IProgress onOperationProgressed, CancellationToken ct = default ) @@ -41,6 +42,7 @@ public sealed class SendOperation( sendInfo.ProjectId, sendInfo.ModelId, sendInfo.SourceApplication, + versionMessage, sendInfo.Account, onOperationProgressed, ct @@ -70,6 +72,7 @@ public sealed class SendOperation( string projectId, string modelId, string sourceApplication, + string? versionMessage, Account account, IProgress onOperationProgressed, CancellationToken ct = default @@ -103,6 +106,7 @@ public sealed class SendOperation( modelId, projectId, sourceApplication, + versionMessage, account, ct ); diff --git a/Sdk/Speckle.Connectors.Common/Operations/SendOperationVersionRecorder.cs b/Sdk/Speckle.Connectors.Common/Operations/SendOperationVersionRecorder.cs index 1efb99284..d4155b52f 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/SendOperationVersionRecorder.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/SendOperationVersionRecorder.cs @@ -13,13 +13,23 @@ public class SendOperationVersionRecorder(IClientFactory clientFactory) : ISendO string modelId, string projectId, string sourceApplication, + string? versionMessage, Account account, CancellationToken ct ) { using var apiClient = clientFactory.Create(account); var x = await apiClient - .Version.Create(new CreateVersionInput(rootId, modelId, projectId, sourceApplication: sourceApplication), ct) + .Version.Create( + new CreateVersionInput( + rootId, + modelId, + projectId, + sourceApplication: sourceApplication, + message: versionMessage + ), + ct + ) .ConfigureAwait(true); return x.id; }