@@ -96,8 +96,6 @@ TFormTrackerModify = class(TForm)
9696 // Drag and drop '*.torrent' files/directory or 'tracker.txt'
9797 procedure FormDropFiles (Sender: TObject; const FileNames: array of UTF8String);
9898
99-
100-
10199 // At start of the program the form will be show/hide
102100 procedure FormShow (Sender: TObject);
103101 procedure MenuFileOpenTrackerListClick (Sender: TObject);
@@ -124,16 +122,23 @@ TFormTrackerModify = class(TForm)
124122
125123 private
126124 { private declarations }
127- FTrackerFinalList, // Trackers that must be put inside the torrent.
128- FTrackerAddedByUserList, // Trackers that we want too add.
129- FTrackerBanByUserList, // trackers that must not be present inside torrent.
130- FTrackerFromInsideTorrentFilesList, // Trackers that are already inside the torrent.
131- FTrackerDeselectedByUserList, // trackers that must not be present inside torrent.
132-
133- FTorrentFileNameList,// All the torrent files that must be updated
134- FLogStringList // Log string text output
125+ // Trackers that must be put inside the torrent.
126+ FTrackerFinalList,
127+ // Trackers that we want too add.
128+ FTrackerAddedByUserList,
129+ // trackers that must not be present inside torrent.
130+ FTrackerBanByUserList,
131+ // Trackers that are already inside the torrent.
132+ FTrackerFromInsideTorrentFilesList,
133+ // trackers that must not be present inside torrent.
134+ FTrackerManualyDeselectedByUserList,
135+ // All the torrent files that must be updated
136+ FTorrentFileNameList,
137+ // Log string text output
138+ FLogStringList
135139 : TStringList;
136- FDecodePresentTorrent: TDecodeTorrent; // is the present torrent file being process
140+ // is the present torrent file being process
141+ FDecodePresentTorrent: TDecodeTorrent;
137142 FConcoleMode, // user have start the program in console mode
138143 FFilePresentBanByUserList// There is a file 'remove_trackers.txt' detected
139144 : boolean;
@@ -174,7 +179,6 @@ TFormTrackerModify = class(TForm)
174179 function DecodeTorrentFile (const FileName: UTF8String): boolean;
175180 procedure UpdateTrackerInsideFileList ;
176181 procedure UpdateTorrentTrackerList ;
177- procedure CombineFourTrackerListToOne ;
178182 procedure CombineFiveTrackerListToOne (TrackerListOrder: TTrackerListOrder);
179183 procedure ShowTrackerInsideFileList ;
180184
@@ -246,9 +250,9 @@ procedure TFormTrackerModify.FormCreate(Sender: TObject);
246250 FTrackerBanByUserList.Sorted := False;
247251
248252 // Create deselect tracker list where the user select via user interface checkbox
249- FTrackerDeselectedByUserList := TStringList.Create;
250- FTrackerDeselectedByUserList .Duplicates := dupIgnore;
251- FTrackerDeselectedByUserList .Sorted := False;
253+ FTrackerManualyDeselectedByUserList := TStringList.Create;
254+ FTrackerManualyDeselectedByUserList .Duplicates := dupIgnore;
255+ FTrackerManualyDeselectedByUserList .Sorted := False;
252256
253257 // Create tracker list where the user can manualy add items to it
254258 FTrackerAddedByUserList := TStringList.Create;
@@ -301,7 +305,7 @@ procedure TFormTrackerModify.FormDestroy(Sender: TObject);
301305 FTrackerFromInsideTorrentFilesList.Free;
302306 FTorrentFileNameList.Free;
303307 FControlerGridTorrentData.Free;
304- FTrackerDeselectedByUserList .Free;
308+ FTrackerManualyDeselectedByUserList .Free;
305309end ;
306310
307311procedure TFormTrackerModify.MenuFileTorrentFolderClick (Sender: TObject);
@@ -463,16 +467,9 @@ procedure TFormTrackerModify.UpdateTorrent;
463467 if not CopyUserInputNewTrackersToList then
464468 Exit;
465469
466- // There are 3 list that must be combine
467- // FTrackerFinalList := FTrackerAddedByUserList + FTrackerFromInsideTorrentFilesList
468- // - FTrackerBanByUserList
469- CombineFourTrackerListToOne;
470-
471- // for tloSort we only need to update the list one time for all the torrent files.
472- if FTrackerListOrderForUpdatedTorrent = tloSort then
473- begin
474- FTrackerFinalList.Sort;
475- end ;
470+ // There are 5 list that must be combine.
471+ // Must use 'sort' for correct FTrackerFinalList.Count
472+ CombineFiveTrackerListToOne(tloSort);
476473
477474 // How many trackers must be put inside each torrent file.
478475 CountTrackers := FTrackerFinalList.Count;
@@ -503,6 +500,7 @@ procedure TFormTrackerModify.UpdateTorrent;
503500 Continue;
504501
505502 // tloInsertBefore and tloAppendAfter need the list be updated or each torrent file.
503+ // for tloSort it is already process one time.
506504 if (FTrackerListOrderForUpdatedTorrent = tloInsertBefore) or
507505 (FTrackerListOrderForUpdatedTorrent = tloAppendAfter) then
508506 begin
@@ -591,13 +589,15 @@ procedure TFormTrackerModify.AddButIngnoreDuplicates(StringList: TStringList;
591589 // Stringlist that are not sorted must use IndexOf to ignore Duplicates.
592590 if not StringList.Sorted then
593591 begin
592+ // not sorted version
594593 if StringList.IndexOf(Str) < 0 then
595594 begin
596595 StringList.add(Str);
597596 end ;
598597 end
599598 else
600599 begin
600+ // sorted version
601601 StringList.add(Str);
602602 end ;
603603
@@ -891,37 +891,12 @@ function TFormTrackerModify.CopyUserInputNewTrackersToList: boolean;
891891end ;
892892
893893
894- procedure TFormTrackerModify.CombineFourTrackerListToOne ;
895- var
896- TrackerStr: UTF8String;
897- begin
898- // FTrackerFinalList =
899- // (FTrackerAddedByUserList
900- // + FTrackerFromInsideTorrentFilesList)
901- // - FTrackerBanByUserList
902- // - FTrackerDeselectedByUserList
903- FTrackerFinalList.Clear;
904-
905- for TrackerStr in FTrackerAddedByUserList do
906- AddButIngnoreDuplicates(FTrackerFinalList, TrackerStr);
907-
908- for TrackerStr in FTrackerFromInsideTorrentFilesList do
909- AddButIngnoreDuplicates(FTrackerFinalList, TrackerStr);
910-
911- // Trackers from FTrackerAddedByUserList overrule the one from FTrackerDeselectedByUserList
912- RemoveTrackersFromList(FTrackerAddedByUserList, FTrackerDeselectedByUserList);
913-
914- // Remove the trackers that we do not want must be the last step.
915- RemoveTrackersFromList(FTrackerBanByUserList, FTrackerFinalList);
916- RemoveTrackersFromList(FTrackerDeselectedByUserList, FTrackerFinalList);
917-
918- end ;
919-
920894procedure TFormTrackerModify.CombineFiveTrackerListToOne (
921895 TrackerListOrder: TTrackerListOrder);
922896var
923897 TrackerStr: UTF8String;
924- TrackerFromInsideOneTorrentFile: TStringList;
898+ TrackerDeselectTempList, TrackerFromInsideOneTorrentFile: TStringList;
899+
925900begin
926901 // Must keep the original order of trackers inside the torrent file.
927902 // The new trackers can be added at the begin of end of the list.
@@ -931,20 +906,31 @@ procedure TFormTrackerModify.CombineFiveTrackerListToOne(
931906 // + FTrackerAddedByUserList
932907 // + FTrackerFromInsideTorrentFilesList)
933908 // - FTrackerBanByUserList
934- // - FTrackerDeselectedByUserList
909+ // - FTrackerManualyDeselectedByUserList
935910
936911
937912 TrackerFromInsideOneTorrentFile := TStringList.Create;
938913
939914 try
940- // Begin with a empty list
915+ // Begin with an empty list
941916 FTrackerFinalList.Clear;
942917
943- // Read the trackers inside the torrent file
944- // Copy the trackers found in one torrent file to TrackerFromInsideOneTorrentFile
945- for TrackerStr in FDecodePresentTorrent.TrackerList do
918+ if (FTrackerListOrderForUpdatedTorrent = tloInsertBefore) or
919+ (FTrackerListOrderForUpdatedTorrent = tloAppendAfter) then
946920 begin
947- AddButIngnoreDuplicates(TrackerFromInsideOneTorrentFile, TrackerStr);
921+
922+ // Read the trackers inside the torrent file
923+ // Copy the trackers found in one torrent file to TrackerFromInsideOneTorrentFile
924+ for TrackerStr in FDecodePresentTorrent.TrackerList do
925+ begin
926+ AddButIngnoreDuplicates(TrackerFromInsideOneTorrentFile, TrackerStr);
927+ end ;
928+
929+ // Remove the trackers that we do not want, but these trackers can be posible added again.
930+ RemoveTrackersFromList(FTrackerBanByUserList, TrackerFromInsideOneTorrentFile);
931+ RemoveTrackersFromList(FTrackerManualyDeselectedByUserList,
932+ TrackerFromInsideOneTorrentFile);
933+
948934 end ;
949935
950936 // Add the new tracker list before of after the original trackers list inside the torrent file.
@@ -985,18 +971,39 @@ procedure TFormTrackerModify.CombineFiveTrackerListToOne(
985971
986972 end ;
987973
974+ tloSort:
975+ begin
976+ // Sort
977+
978+ for TrackerStr in FTrackerAddedByUserList do
979+ AddButIngnoreDuplicates(FTrackerFinalList, TrackerStr);
980+
981+ for TrackerStr in FTrackerFromInsideTorrentFilesList do
982+ AddButIngnoreDuplicates(FTrackerFinalList, TrackerStr);
983+
984+ FTrackerFinalList.Sort;
985+ end ;
986+
988987 else
989988 begin
990- Assert(True, ' case else: Should never been called. CombineFourTrackerListToOne ' );
989+ Assert(True, ' case else: Should never been called. CombineFiveTrackerListToOne ' );
991990 end ;
992991 end ;
993992
994- // Trackers from FTrackerAddedByUserList overrule the one from FTrackerDeselectedByUserList
995- RemoveTrackersFromList(FTrackerAddedByUserList, FTrackerDeselectedByUserList);
993+ // Trackers from FTrackerAddedByUserList overrule the one from FTrackerManualyDeselectedByUserList
994+ // This is when there is a conflict betwean 'add' and 'remove manual selection'
995+
996+ // Must keep FTrackerManualyDeselectedByUserList intact. Copy it to TrackerDeselectTempList
997+ TrackerDeselectTempList := TStringList.Create;
998+ TrackerDeselectTempList.Text := FTrackerManualyDeselectedByUserList.Text;
996999
997- // Remove the trackers that we do not want must be the last step.
1000+ RemoveTrackersFromList(FTrackerAddedByUserList, TrackerDeselectTempList);
1001+
1002+ // Remove the trackers that we do not want in FTrackerFinalList must be the last step.
9981003 RemoveTrackersFromList(FTrackerBanByUserList, FTrackerFinalList);
999- RemoveTrackersFromList(FTrackerDeselectedByUserList, FTrackerFinalList);
1004+ RemoveTrackersFromList(TrackerDeselectTempList, FTrackerFinalList);
1005+
1006+ TrackerDeselectTempList.Free;
10001007
10011008 finally
10021009 TrackerFromInsideOneTorrentFile.Free;
@@ -1009,10 +1016,10 @@ procedure TFormTrackerModify.UpdateTrackerInsideFileList;
10091016 i: integer;
10101017begin
10111018 // Copy items from CheckListBoxTrackersList to FTrackerFromInsideTorrentFilesList
1012- // Copy items from CheckListBoxTrackersList to FTrackerDeselectedByUserList
1019+ // Copy items from CheckListBoxTrackersList to FTrackerManualyDeselectedByUserList
10131020
10141021 FTrackerFromInsideTorrentFilesList.Clear;
1015- FTrackerDeselectedByUserList .Clear;
1022+ FTrackerManualyDeselectedByUserList .Clear;
10161023
10171024 if CheckListBoxTrackersList.Count > 0 then
10181025 begin
@@ -1029,7 +1036,7 @@ procedure TFormTrackerModify.UpdateTrackerInsideFileList;
10291036 begin
10301037 // Delected by user
10311038 AddButIngnoreDuplicates(
1032- FTrackerDeselectedByUserList , CheckListBoxTrackersList.Items[i]);
1039+ FTrackerManualyDeselectedByUserList , CheckListBoxTrackersList.Items[i]);
10331040 end ;
10341041
10351042 end ;
@@ -1261,8 +1268,6 @@ procedure TFormTrackerModify.FormDropFiles(Sender: TObject;
12611268 TorrentFileSelectionDetected := False;
12621269
12631270
1264-
1265-
12661271 ViewUpdateBeginActiveOneTimeOnly := False;
12671272
12681273 // Remember every file names from drag and drop.
0 commit comments