Skip to content

Commit 0f14f75

Browse files
authored
Merge pull request #15 from DarkCoderSc/dev-2-0-3
This version introduces two major updates: - Bulk Actions for File Manager: This new feature allows you to perform multiple actions simultaneously on several selected files (using checkboxes). The first bulk action enables downloading multiple files from the current and previously browsed directories, eliminating the need to download files one by one. To activate this feature, check the "Enable Bulk Actions" option in the file manager (please refer to the wiki for more details). - Multiple File Selection in the Open Dialog: You can now select multiple files at once in the open dialog, facilitating the upload of multiple files simultaneously.
2 parents 60dad3f + eeab0a7 commit 0f14f75

44 files changed

Lines changed: 1954 additions & 298 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelogs
22

3+
## 2.0.3 (March 2026)
4+
5+
This version introduces two major updates:
6+
7+
- Bulk Actions for File Manager: This new feature allows you to perform multiple actions simultaneously on several selected files (using checkboxes). The first bulk action enables downloading multiple files from the current and previously browsed directories, eliminating the need to download files one by one. To activate this feature, check the "Enable Bulk Actions" option in the file manager (please refer to the wiki for more details).
8+
- Multiple File Selection in the Open Dialog: You can now select multiple files at once in the open dialog, facilitating the upload of multiple files simultaneously.
9+
310
## 2.0.2 (March 2026)
411

512
- Updated NeoFlat Hint Component and implemented it on the user list. When hovering over a user, a summary of remote peer information is displayed.

Client GUI/Units/Forms/uFormMain.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ function TFormMain.GetNodeFromHandler(const AHandler: TOptixSessionHandlerThread
211211
if pData^.Handler = AHandler then begin
212212
Result := pNode;
213213

214-
break;
214+
Break;
215215
end;
216216
end;
217217
end;

Client GUI/Units/Forms/uFormWarning.pas

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ procedure TFormWarning.DoResize;
130130

131131
procedure TFormWarning.ButtonAcceptTheRiskClick(Sender: TObject);
132132
begin
133-
if string.Compare(Trim(EditAccept.Text), MAGIC_SENTENCE, True) = 0 then begin
133+
if SameText(Trim(EditAccept.Text), MAGIC_SENTENCE) then begin
134134
FValidated := True;
135135

136136
Close;
@@ -186,7 +186,7 @@ procedure TFormWarning.FormShow(Sender: TObject);
186186

187187
procedure TFormWarning.TimerTimer(Sender: TObject);
188188
begin
189-
ButtonAcceptTheRisk.Enabled := string.Compare(Trim(EditAccept.Text), MAGIC_SENTENCE, True) = 0;
189+
ButtonAcceptTheRisk.Enabled := SameText(Trim(EditAccept.Text), MAGIC_SENTENCE);
190190

191191
///
192192

Client GUI/Units/Threads/Optix.Protocol.Client.pas

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ procedure TOptixClientThread.ThreadExecute;
264264
FOnVerifyPeerCertificate(self, AFingerprint, ASuccess);
265265
end);
266266
{$ELSE}
267-
ASuccess := string.Compare(FServerCertificateFingerprint, AFingerprint) = 0;
267+
ASuccess := SameText(FServerCertificateFingerprint, AFingerprint);
268268
{$ENDIF}
269269

270270
if not ASuccess then
@@ -331,7 +331,7 @@ procedure TOptixClientThread.ThreadExecute;
331331
end;
332332

333333
if not FRetry then
334-
break;
334+
Break;
335335
end; // (While not Terminated)
336336
end;
337337

Client GUI/Units/Threads/Optix.Protocol.SessionHandler.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ procedure TOptixSessionHandlerThread.PollShellInstances;
239239
AShellInstancesToDelete.Add(AShellInstance);
240240

241241
///
242-
continue;
242+
Continue;
243243
end;
244244

245245
try
@@ -271,7 +271,7 @@ procedure TOptixSessionHandlerThread.PerformActionOnShellInstance(const AInstanc
271271
begin
272272
for var AShellInstance in FShellInstances do begin
273273
if AShellInstance.InstanceId <> AInstanceId then
274-
continue;
274+
Continue;
275275
///
276276

277277
case AShellAction of
@@ -290,7 +290,7 @@ procedure TOptixSessionHandlerThread.StdinToShellInstance(const ACommand: TOptix
290290
begin
291291
for var AShellInstance in FShellInstances do begin
292292
if AShellInstance.InstanceId <> ACommand.InstanceId then
293-
continue;
293+
Continue;
294294
try
295295
AShellInstance.WriteLn(AnsiString(ACommand.CommandLine));
296296
except

Client GUI/Units/Threads/Optix.Protocol.Worker.FileTransfer.pas

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ procedure TOptixFileTransferOrchestratorThread.ClientExecute;
123123
// This call is used to detect a potential disconnection from the server and to exit the loop if necessary.
124124
// It does not consume any network data; it serves solely as a network exit control mechanism.
125125
if not FClient.IsSocketAlive then
126-
break;
126+
Break;
127127

128128
var ATransfer: TOptixCommandTransfer := nil;
129129
///
@@ -134,7 +134,7 @@ procedure TOptixFileTransferOrchestratorThread.ClientExecute;
134134
// Polling Transfer Request --------------------------------------------------------------------------------------
135135
while (FTransferQueue.PopItem(ATransfer) = TWaitResult.wrSignaled) do begin
136136
if Terminated then
137-
break;
137+
Break;
138138
///
139139

140140
var ATask: TOptixTransferTask;
@@ -149,7 +149,7 @@ procedure TOptixFileTransferOrchestratorThread.ClientExecute;
149149
// Should never happend
150150
FreeAndNil(ATransfer);
151151

152-
continue;
152+
Continue;
153153
end;
154154

155155
///
@@ -161,7 +161,7 @@ procedure TOptixFileTransferOrchestratorThread.ClientExecute;
161161

162162
FreeAndNil(ATransfer);
163163

164-
continue;
164+
Continue;
165165
end;
166166
end;
167167
end;
@@ -176,13 +176,13 @@ procedure TOptixFileTransferOrchestratorThread.ClientExecute;
176176
// Process Tasks
177177
for ATransfer in ATasks.Keys do begin
178178
if Terminated then
179-
break;
179+
Break;
180180
///
181181

182182
var ATask: TOptixTransferTask := nil;
183183

184184
if not ATasks.TryGetValue(ATransfer, ATask) or (ATask.State = otsEnd) then
185-
continue;
185+
Continue;
186186

187187
FClient.Send(ATransfer.TransferId, SizeOf(TGUID));
188188

@@ -192,7 +192,7 @@ procedure TOptixFileTransferOrchestratorThread.ClientExecute;
192192
ATerminatedTransfers.Add(ATransfer);
193193

194194
///
195-
continue;
195+
Continue;
196196
end;
197197

198198
try
@@ -245,7 +245,7 @@ procedure TOptixFileTransferOrchestratorThread.ClientExecute;
245245
// Exit work loop if one of those two condition are met. Then poll new
246246
// items.
247247
if (AStopwatch.ElapsedMilliseconds >= 5000) or (ATasks.Count = 0) then
248-
break;
248+
Break;
249249
end; // end while not Terminated
250250
end;
251251
// ---------------------------------------------------------------------------------------------------------------
@@ -308,7 +308,7 @@ procedure TOptixFileTransferOrchestratorThread.Finalize;
308308
while True do begin
309309
ATransfer := FTransferQueue.PopItem;
310310
if not Assigned(ATransfer) then
311-
break;
311+
Break;
312312

313313
///
314314
FreeAndNil(ATransfer);

Core/Commands/OptixCore.SessionInformation.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ function TOptixCommandReceiveSessionInformation.GetElevatedStatusString: string;
185185

186186
function TOptixCommandReceiveSessionInformation.CheckIfSystemUser: Boolean;
187187
begin
188-
Result := string.Compare(FUserSid, 'S-1-5-18', True) = 0;
188+
Result := SameText(FUserSid, 'S-1-5-18');
189189
end;
190190

191191
end.

Core/Network/OpenSSL/OptixCore.OpenSSL.Handler.pas

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ procedure TOptixOpenSSLHandler.Send(const buf; const len: Integer);
157157
while True do begin
158158
var AReturn := SSL_Write(FSSLConnection, buf, len);
159159
if AReturn > 0 then
160-
break;
160+
Break;
161161
///
162162

163163
case SSL_get_error(FSSLConnection, AReturn) of
164164
SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE:
165-
continue;
165+
Continue;
166166

167167
else
168168
raise EOpenSSLBaseException.Create(FSSLConnection);
@@ -175,12 +175,12 @@ procedure TOptixOpenSSLHandler.Recv(var buf; const len: Integer);
175175
while True do begin
176176
var AReturn := SSL_Read(FSSLConnection, buf, len);
177177
if AReturn > 0 then
178-
break;
178+
Break;
179179
///
180180

181181
case SSL_get_error(FSSLConnection, AReturn) of
182182
SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE:
183-
continue;
183+
Continue;
184184

185185
else
186186
raise EOpenSSLBaseException.Create(FSSLConnection);

Core/Network/OptixCore.Protocol.Client.Handler.pas

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ procedure TOptixClientHandlerThread.ClientExecute;
121121
while (FPacketQueue.PopItem(APacket) = TWaitResult.wrSignaled) do begin
122122
try
123123
if Terminated then
124-
break;
124+
Break;
125125
///
126126

127127
// Dispatch Packet
@@ -192,7 +192,7 @@ procedure TOptixClientHandlerThread.Finalize;
192192
while True do begin
193193
APacket := FPacketQueue.PopItem;
194194
if not Assigned(APacket) then
195-
break;
195+
Break;
196196

197197
///
198198
FreeAndNil(APacket);

Core/OptixCore.Classes.pas

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ function TOptixSerializableObject.Serialize: TJsonObject;
126126
for var AField in AType.GetFields do begin
127127
for var AFieldAttribute in AField.GetAttributes do begin
128128
if not (AFieldAttribute is OptixSerializableAttribute) then
129-
continue;
129+
Continue;
130130
///
131131

132132
case AField.FieldType.TypeKind of
@@ -143,7 +143,7 @@ function TOptixSerializableObject.Serialize: TJsonObject;
143143
var AFieldClass := AField.FieldType.AsInstance.MetaclassType;
144144
var AObject := AField.GetValue(self).AsObject;
145145
if not Assigned(AObject) then
146-
continue;
146+
Continue;
147147
///
148148

149149
// Serializable Object -------------------------------------------------------------------------------------
@@ -170,7 +170,7 @@ function TOptixSerializableObject.Serialize: TJsonObject;
170170
///
171171

172172
if not Assigned(AItemObject) or not (AItemObject is TOptixSerializableObject) then
173-
continue;
173+
Continue;
174174

175175
///
176176
AJsonArray.AddElement(TOptixSerializableObject(AItemObject).Serialize)
@@ -230,7 +230,7 @@ procedure TOptixSerializableObject.DeSerialize(const ASerializedObject: TJsonObj
230230
for var APair in ASerializedObject do begin
231231
var AField := AType.GetField(APair.JsonString.Value);
232232
if not Assigned(AField) or not Assigned(AField.GetAttribute(OptixSerializableAttribute)) then
233-
continue;
233+
Continue;
234234
///
235235

236236
var AJsonValue := APair.JsonValue;
@@ -269,7 +269,7 @@ procedure TOptixSerializableObject.DeSerialize(const ASerializedObject: TJsonObj
269269
if not Assigned(AClearMethod) or not Assigned(AAddMethod) or (Length(AAddMethod.GetParameters) = 0) or
270270
not (AJsonValue is TJsonArray)
271271
then
272-
continue;
272+
Continue;
273273

274274
AClearMethod.Invoke(AObject, []);
275275

@@ -284,7 +284,7 @@ procedure TOptixSerializableObject.DeSerialize(const ASerializedObject: TJsonObj
284284
if not (AItem is TOptixSerializableObject) then begin
285285
FreeAndNil(AItem);
286286

287-
break;
287+
Break;
288288
end;
289289
///
290290

0 commit comments

Comments
 (0)