@@ -29,6 +29,11 @@ internal sealed class IrtHandleExtensionInternal : IDisposable
2929 /// </summary>
3030 private Dictionary < int , InCommand > _commands ;
3131
32+ /// <summary>
33+ /// The user feedback, only for external extensions.
34+ /// </summary>
35+ private Dictionary < int , UserFeedback > _userFeedback ;
36+
3237 /// <summary>
3338 /// Indicates whether the object has been disposed.
3439 /// </summary>
@@ -57,18 +62,20 @@ private IrtHandleExtensionInternal()
5762 }
5863
5964 /// <summary>
60- /// Initializes a new instance of the <see cref="IrtHandleExtensionInternal" /> class with specified parameters.
65+ /// Initializes a new instance of the <see cref="IrtHandleExtensionInternal" /> class with specified parameters.
6166 /// </summary>
6267 /// <param name="irtPrompt">Instance of IrtParser.</param>
6368 /// <param name="commands">Dictionary of commands.</param>
6469 /// <param name="prompt">Instance of Prompt.</param>
6570 /// <param name="irtInternal">Instance of IrtHandleInternal.</param>
71+ /// <param name="userFeedback">The user feedback.</param>
6672 public IrtHandleExtensionInternal ( IrtParserInput irtPrompt , Dictionary < int , InCommand > commands , Prompt prompt ,
67- IrtHandleInternal irtInternal )
73+ IrtHandleInternal irtInternal , Dictionary < int , UserFeedback > userFeedback = null )
6874 {
6975 _irtHandlePrompt = irtPrompt ;
7076 _commands = commands ;
7177 _prompt = prompt ;
78+ _userFeedback = userFeedback ;
7279 _prompt . HandleFeedback += HandleFeedback ;
7380 _myRequestId = Guid . NewGuid ( ) . ToString ( ) ;
7481 _irtHandleInternal = irtInternal ;
@@ -119,13 +126,14 @@ internal void ProcessExtensionInternal(ExtensionCommands extension)
119126 private void ProcessHelpCommand ( ExtensionCommands extension )
120127 {
121128 var key = IrtKernel . CheckForKeyWord ( extension . BaseCommand , IrtConst . InternCommands ) ;
129+
122130 if ( key != IrtConst . Error )
123131 {
124132 HandleInternalCommand ( extension , key ) ;
125133 }
126134 else
127135 {
128- HandleExternalCommand ( extension ) ;
136+ HandleExternalCommand ( extension , _userFeedback ) ;
129137 }
130138 }
131139
@@ -144,28 +152,36 @@ private void HandleInternalCommand(ExtensionCommands extension, int key)
144152 irtInternal . ProcessInput ( IrtConst . InternalHelpWithParameter , command . Command ) ;
145153 }
146154
147- var feedback = IrtConst . InternalFeedback [ - 1 ] ;
148- var feedbackReceiver = new IrtFeedback
155+ //if none is avaiable use the standard one from Internal
156+ //if not we use the provided one
157+ if ( _userFeedback ? . TryGetValue ( extension . FeedBackId , out var feedback ) != true )
149158 {
150- RequestId = _myRequestId ,
151- Feedback = feedback ,
152- BranchId = 11 ,
153- Key = key ,
154- Command = extension . BaseCommand
155- } ;
159+ feedback = IrtConst . InternalFeedback [ - 1 ] ;
160+ }
161+
162+ var feedbackReceiver = new IrtFeedback
163+ {
164+ RequestId = _myRequestId ,
165+ Feedback = feedback ,
166+ BranchId = 11 ,
167+ Key = key ,
168+ Command = extension . BaseCommand
169+ } ;
170+
156171 _prompt . RequestFeedback ( feedbackReceiver ) ;
157172 }
158173
159174 /// <summary>
160175 /// Handles external commands.
161176 /// </summary>
162177 /// <param name="extension">The extension command.</param>
163- private void HandleExternalCommand ( ExtensionCommands extension )
178+ private void HandleExternalCommand ( ExtensionCommands extension , Dictionary < int , UserFeedback > userFeedback )
164179 {
165180 var com = _irtHandlePrompt . ProcessInput ( extension . BaseCommand ) ;
166181 var command = _commands [ com . Command ] ;
167182 _irtHandleInternal . ProcessInput ( IrtConst . InternalHelpWithParameter , command . Command ) ;
168183
184+ //TODO completly wrong here
169185 var feedback = IrtConst . InternalFeedback [ - 1 ] ;
170186
171187 var feedbackReceiver = new IrtFeedback
0 commit comments