diff --git a/classesLib.pas b/classesLib.pas index d50d5b3..7b66115 100644 --- a/classesLib.pas +++ b/classesLib.pas @@ -99,6 +99,7 @@ type constructor create; destructor Destroy; override; function addFile(src:string; dst:string=''; data:Tobject=NIL):boolean; virtual; + function contains(src:string):boolean; function count():integer; procedure reset(); virtual; property totalSize:int64 read getTotal; @@ -524,6 +525,16 @@ if cachedTotal < 0 then calculate(); result:=cachedTotal; end; // getTotal +function TarchiveStream.contains(src:string):boolean; +var + i: integer; +begin +for i:=0 to Length(flist)-1 do + if flist[i].src = src then + exit(TRUE); +result:=FALSE; +end; + function TarchiveStream.addFile(src:string; dst:string=''; data:Tobject=NIL):boolean; function getMtime(fh:Thandle):int64; diff --git a/main.pas b/main.pas index bc73f4f..37e45ce 100644 --- a/main.pas +++ b/main.pas @@ -5024,6 +5024,14 @@ var tar: TtarStream; nofolders, selection, itsAsearch: boolean; + procedure addToTar(src,dst:string); + var + i: integer; + begin + if not selection or not tar.contains(src) then + tar.addFile(src, dst); + end; + procedure addFolder(f:Tfile; ignoreConnFilters:boolean=FALSE); var i, ofs: integer; @@ -5058,7 +5066,7 @@ var else s:=fi.pathTill(f.parent); // we want the path to include also f, so stop at f.parent - tar.addFile(fi.resource, s); + addToTar(fi.resource, s); end finally listing.free end; end; // addFolder @@ -5093,7 +5101,7 @@ var t:=substr(s, lastDelimiter('\/', s)+1) else t:=s; - tar.addFile(ft.resource, t); + addToTar(ft.resource, t); finally freeIfTemp(ft) end; end; end; // addSelection