Browse Source

Interface for matching filenames only against a file mask

Among other to reduce confusing set of Matches overloads. Another benefit is that now all Matches overloads know, if the path is local or remote, what will be useful for upcoming relative/rooted path masks.

Source commit: a6a79218aeceb6dbc22a2ebe804effe277d43115
Martin Prikryl 3 years ago
parent
commit
0cebfe10f7

+ 1 - 1
source/core/Configuration.cpp

@@ -1140,7 +1140,7 @@ UnicodeString __fastcall TConfiguration::GetFileMimeType(const UnicodeString & F
       UnicodeString Token = CutToChar(AMimeTypes, L',', true);
       UnicodeString Token = CutToChar(AMimeTypes, L',', true);
       UnicodeString MaskStr = CutToChar(Token, L'=', true);
       UnicodeString MaskStr = CutToChar(Token, L'=', true);
       TFileMasks Mask(MaskStr);
       TFileMasks Mask(MaskStr);
-      if (Mask.Matches(FileNameOnly))
+      if (Mask.MatchesFileName(FileNameOnly))
       {
       {
         Result = Token.Trim();
         Result = Token.Trim();
         Found = true;
         Found = true;

+ 10 - 11
source/core/FileMasks.cpp

@@ -413,15 +413,8 @@ bool __fastcall TFileMasks::MatchesMasks(const UnicodeString FileName, bool Dire
   return Result;
   return Result;
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
-bool __fastcall TFileMasks::Matches(const UnicodeString FileName, bool Directory,
-  const UnicodeString Path, const TParams * Params) const
-{
-  bool ImplicitMatch;
-  return Matches(FileName, Directory, Path, Params, true, ImplicitMatch);
-}
-//---------------------------------------------------------------------------
-bool __fastcall TFileMasks::Matches(const UnicodeString FileName, bool Directory,
-  const UnicodeString Path, const TParams * Params,
+bool TFileMasks::DoMatches(
+  const UnicodeString & FileName, bool Directory, const UnicodeString & Path, const TParams * Params,
   bool RecurseInclude, bool & ImplicitMatch) const
   bool RecurseInclude, bool & ImplicitMatch) const
 {
 {
   bool ImplicitIncludeMatch = (FAllDirsAreImplicitlyIncluded && Directory) || FMasks[MASK_INDEX(Directory, true)].empty();
   bool ImplicitIncludeMatch = (FAllDirsAreImplicitlyIncluded && Directory) || FMasks[MASK_INDEX(Directory, true)].empty();
@@ -453,18 +446,24 @@ bool __fastcall TFileMasks::Matches(const UnicodeString FileName, bool Local,
     {
     {
       Path = ToUnixPath(ExcludeTrailingBackslash(Path));
       Path = ToUnixPath(ExcludeTrailingBackslash(Path));
     }
     }
-    Result = Matches(ExtractFileName(FileName), Directory, Path, Params,
+    Result = DoMatches(ExtractFileName(FileName), Directory, Path, Params,
       RecurseInclude, ImplicitMatch);
       RecurseInclude, ImplicitMatch);
   }
   }
   else
   else
   {
   {
-    Result = Matches(UnixExtractFileName(FileName), Directory,
+    Result = DoMatches(UnixExtractFileName(FileName), Directory,
       SimpleUnixExcludeTrailingBackslash(UnixExtractFilePath(FileName)), Params,
       SimpleUnixExcludeTrailingBackslash(UnixExtractFilePath(FileName)), Params,
       RecurseInclude, ImplicitMatch);
       RecurseInclude, ImplicitMatch);
   }
   }
   return Result;
   return Result;
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
+bool TFileMasks::MatchesFileName(const UnicodeString & FileName, bool Directory, const TParams * Params) const
+{
+  bool ImplicitMatch;
+  return DoMatches(FileName, Directory, EmptyStr, Params, true, ImplicitMatch);
+}
+//---------------------------------------------------------------------------
 bool __fastcall TFileMasks::operator ==(const TFileMasks & rhm) const
 bool __fastcall TFileMasks::operator ==(const TFileMasks & rhm) const
 {
 {
   return (Masks == rhm.Masks);
   return (Masks == rhm.Masks);

+ 4 - 5
source/core/FileMasks.h

@@ -47,11 +47,7 @@ public:
 
 
   void __fastcall SetMask(const UnicodeString & Mask);
   void __fastcall SetMask(const UnicodeString & Mask);
 
 
-  bool __fastcall Matches(const UnicodeString FileName, bool Directory = false,
-    const UnicodeString Path = L"", const TParams * Params = NULL) const;
-  bool __fastcall Matches(const UnicodeString FileName, bool Directory,
-    const UnicodeString Path, const TParams * Params,
-    bool RecurseInclude, bool & ImplicitMatch) const;
+  bool MatchesFileName(const UnicodeString & FileName, bool Directory = false, const TParams * Params = NULL) const;
   bool __fastcall Matches(const UnicodeString FileName, bool Local, bool Directory,
   bool __fastcall Matches(const UnicodeString FileName, bool Local, bool Directory,
     const TParams * Params = NULL) const;
     const TParams * Params = NULL) const;
   bool __fastcall Matches(const UnicodeString FileName, bool Local, bool Directory,
   bool __fastcall Matches(const UnicodeString FileName, bool Local, bool Directory,
@@ -121,6 +117,9 @@ private:
     const UnicodeString Path, const TParams * Params, const TMasks & Masks, bool Recurse);
     const UnicodeString Path, const TParams * Params, const TMasks & Masks, bool Recurse);
   static inline bool __fastcall MatchesMaskMask(const TMaskMask & MaskMask, const UnicodeString & Str);
   static inline bool __fastcall MatchesMaskMask(const TMaskMask & MaskMask, const UnicodeString & Str);
   void __fastcall ThrowError(int Start, int End);
   void __fastcall ThrowError(int Start, int End);
+  bool DoMatches(
+    const UnicodeString & FileName, bool Directory, const UnicodeString & Path, const TParams * Params,
+    bool RecurseInclude, bool & ImplicitMatch) const;
 };
 };
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 UnicodeString __fastcall MaskFileName(UnicodeString FileName, const UnicodeString Mask);
 UnicodeString __fastcall MaskFileName(UnicodeString FileName, const UnicodeString Mask);

+ 1 - 1
source/core/Script.cpp

@@ -636,7 +636,7 @@ TStrings * __fastcall TScript::CreateFileList(TScriptProcParams * Parameters, in
               Params.Size = File->Size;
               Params.Size = File->Size;
               Params.Modification = File->Modification;
               Params.Modification = File->Modification;
               if (IsRealFile(File->FileName) &&
               if (IsRealFile(File->FileName) &&
-                  Mask.Matches(File->FileName, false, UnicodeString(), &Params))
+                  Mask.MatchesFileName(File->FileName, false, &Params))
               {
               {
                 Result->AddObject(FileDirectory + File->FileName,
                 Result->AddObject(FileDirectory + File->FileName,
                   FLAGSET(ListType, fltQueryServer) ? File->Duplicate() : NULL);
                   FLAGSET(ListType, fltQueryServer) ? File->Duplicate() : NULL);

+ 1 - 1
source/core/SessionData.cpp

@@ -1621,7 +1621,7 @@ void TSessionData::ImportFromOpenssh(TStrings * Lines)
           Mask.SetMask(M);
           Mask.SetMask(M);
           // This does way more than OpenSSH, but on the other hand, the special characters of our file masks,
           // This does way more than OpenSSH, but on the other hand, the special characters of our file masks,
           // should not be present in hostnames.
           // should not be present in hostnames.
-          if (Mask.Matches(Name, false, UnicodeString(), NULL))
+          if (Mask.MatchesFileName(Name))
           {
           {
             if (Negated)
             if (Negated)
             {
             {

+ 1 - 3
source/core/Terminal.cpp

@@ -3502,9 +3502,7 @@ TRemoteFileList * __fastcall TTerminal::ReadDirectoryListing(UnicodeString Direc
           TFileMasks::TParams Params;
           TFileMasks::TParams Params;
           Params.Size = File->Resolve()->Size;
           Params.Size = File->Resolve()->Size;
           Params.Modification = File->Modification;
           Params.Modification = File->Modification;
-          // Have to use UnicodeString(), instead of L"", as with that
-          // overload with (UnicodeString, bool, bool, TParams*) wins
-          if (!Mask.Matches(File->FileName, false, UnicodeString(), &Params))
+          if (!Mask.MatchesFileName(File->FileName, false, &Params))
           {
           {
             FileList->Delete(Index);
             FileList->Delete(Index);
           }
           }

+ 3 - 2
source/forms/CustomScpExplorer.cpp

@@ -8675,8 +8675,9 @@ void __fastcall TCustomScpExplorerForm::DirViewMatchMask(
   FDirViewMatchMask = Masks;
   FDirViewMatchMask = Masks;
   bool ImplicitMatch;
   bool ImplicitMatch;
   Matches =
   Matches =
-    // RecurseInclude parameter has no effect as the Path is empty
-    FDirViewMatchMask.Matches(FileName, Directory, UnicodeString(L""), &MaskParams, true, ImplicitMatch) &&
+    // Local and RecurseInclude parameters have no effect as there's no path.
+    // This should use potential MatchesFileName overload with ImplicitMatch argument.
+    FDirViewMatchMask.Matches(FileName, false, Directory, &MaskParams, true, ImplicitMatch) &&
     (AllowImplicitMatches || !ImplicitMatch);
     (AllowImplicitMatches || !ImplicitMatch);
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------

+ 1 - 1
source/windows/GUIConfiguration.cpp

@@ -165,7 +165,7 @@ bool __fastcall TCopyParamRule::Match(const UnicodeString & Mask,
     }
     }
     else
     else
     {
     {
-      Result = M.Matches(Value, false);
+      Result = M.MatchesFileName(Value);
     }
     }
   }
   }
   return Result;
   return Result;