@@ -65,6 +65,22 @@ TParameters = class(TObject, TSettings)
6565 property IsDialogDebug : Boolean read GetDialogDebug;
6666 end ;
6767
68+ { TRunner }
69+
70+ TRunner = class (TObject, TLogger)
71+ private
72+ FParams : TParameters;
73+ FLogLevel : TLogLevel;
74+ public
75+ procedure Log (const Message : VString; const LogLevel : TLogLevel);
76+ function IsWarn () : Boolean;
77+ function IsInfo () : Boolean;
78+ function IsDebug () : Boolean;
79+ procedure Run ();
80+ constructor Create();
81+ destructor Destroy(); override;
82+ end ;
83+
6884 { TParser }
6985
7086 TParser = class (TObject)
@@ -141,6 +157,75 @@ function GetJavawInfo(Path : VString) : TJavaInstallation;
141157 end ;
142158end ;
143159
160+ { TRunner }
161+
162+ procedure TRunner.Log (const Message : VString; const LogLevel : TLogLevel);
163+
164+ var
165+ Icon : TDialaogIcon;
166+
167+ begin
168+ if LogLevel > FLogLevel then Exit;
169+ if FParams.IsLogging then begin
170+ if LogLevel = TLogLevel.ERROR then LogMessage(' Error: ' + Message)
171+ else if LogLevel = TLogLevel.WARN then LogMessage(' Warning: ' + Message)
172+ else LogMessage(Message);
173+ end ;
174+ if FParams.IsDialogDebug then begin
175+ case LogLevel of
176+ TLogLevel.ERROR: Icon := TDialaogIcon.Error;
177+ TLogLevel.WARN: Icon := TDialaogIcon.Warning;
178+ TLogLevel.INFO: Icon := TDialaogIcon.Info;
179+ TLogLevel.DEBUG: Icon := TDialaogIcon.Info;
180+ else Icon := TDialaogIcon.None;
181+ end ;
182+ NSISDialog(Message, LogLevelToVStr(LogLevel), MB_OK, Icon);
183+ end ;
184+ end ;
185+
186+ function TRunner.IsWarn () : Boolean;
187+ begin
188+ Result := FLogLevel >= TLogLevel.WARN;
189+ end ;
190+
191+ function TRunner.IsInfo () : Boolean;
192+ begin
193+ Result := FLogLevel >= TLogLevel.INFO;
194+ end ;
195+
196+ function TRunner.IsDebug () : Boolean;
197+ begin
198+ Result := FLogLevel >= TLogLevel.DEBUG;
199+ end ;
200+
201+ procedure TRunner.Run ();
202+
203+ var
204+ Parser : TParser;
205+
206+ begin
207+ FParams.ParseParams();
208+ FLogLevel := FParams.LogLevel;
209+ Parser := TParser.Create(FParams, Self);
210+ try
211+ Parser.Process();
212+ finally
213+ Parser.Free();
214+ end ;
215+ end ;
216+
217+ constructor TRunner.Create();
218+ begin
219+ FParams := TParameters.Create();
220+ FLogLevel := TLogLevel.INFO;
221+ end ;
222+
223+ destructor TRunner.Destroy();
224+ begin
225+ FParams.Free();
226+ inherited Destroy;
227+ end ;
228+
144229function TParser.GetInstallations : TFPGObjectList<TJavaInstallation>;
145230begin
146231 Result := FInstallations;
@@ -816,15 +901,16 @@ destructor TParameters.Destroy();
816901procedure Locate (const hwndParent: HWND; const string_size: integer; const variables: NSISPTChar; const stacktop: pointer); cdecl;
817902
818903var
819- parameters : TParameters;
820- parser : TParser;
904+ runner : TRunner;
821905
822906begin
823907 Init(hwndParent, string_size, variables, stacktop);
824- parameters := TParameters.Create();
825- parameters.ParseParams();
826- parser := TParser.Create(parameters, Nil );
827- parser.Process();
908+ runner := TRunner.Create();
909+ try
910+ runner.Run();
911+ finally
912+ runner.Free();
913+ end ;
828914end ;
829915
830916exports Locate;
0 commit comments