1
/* ***** BEGIN LICENSE BLOCK *****
2
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
4
* The contents of this file are subject to the Netscape Public License
5
* Version 1.1 (the "License"); you may not use this file except in
6
* compliance with the License. You may obtain a copy of the License at
7
* http://www.mozilla.org/NPL/
9
* Software distributed under the License is distributed on an "AS IS" basis,
10
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11
* for the specific language governing rights and limitations under the
14
* The Original Code is mozilla.org code.
16
* The Initial Developer of the Original Code is
17
* Netscape Communications Corporation.
18
* Portions created by the Initial Developer are Copyright (C) 2001
19
* the Initial Developer. All Rights Reserved.
22
* Joe Hewitt <hewitt@netscape.com> (original author)
25
* Alternatively, the contents of this file may be used under the terms of
26
* either the GNU General Public License Version 2 or later (the "GPL"), or
27
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28
* in which case the provisions of the GPL or the LGPL are applicable instead
29
* of those above. If you wish to allow use of your version of this file only
30
* under the terms of either the GPL or the LGPL, and not to allow others to
31
* use your version of this file under the terms of the NPL, indicate your
32
* decision by deleting the provisions above and replace them with the notice
33
* and other provisions required by the GPL or the LGPL. If you do not delete
34
* the provisions above, a recipient may use your version of this file under
35
* the terms of any one of the NPL, the GPL or the LGPL.
37
* ***** END LICENSE BLOCK ***** */
39
#ifndef __inFileSearch_h__
40
#define __inFileSearch_h__
42
#include "inIFileSearch.h"
45
#include "nsVoidArray.h"
46
#include "nsISimpleEnumerator.h"
47
#include "nsCOMArray.h"
48
#include "inISearchObserver.h"
50
#include "inSearchLoop.h"
52
class inFileSearch : public inIFileSearch
56
NS_DECL_INISEARCHPROCESS
60
virtual ~inFileSearch();
63
nsCOMPtr<inISearchObserver> mObserver;
64
nsCOMArray<nsIFile> mResults;
65
nsCOMArray<nsISimpleEnumerator> mDirStack;
66
nsCOMPtr<nsIFile> mLastResult;
67
nsCOMPtr<nsIFile> mSearchPath;
68
inSearchLoop* mSearchLoop;
69
nsAutoString* mBasePath;
70
nsAutoString* mTextCriteria;
71
PRUnichar** mFilenameCriteria;
72
PRUint32 mDirsSearched;
73
PRUint32 mFilenameCriteriaCount;
77
PRBool mReturnRelativePaths;
78
PRBool mSearchRecursive;
80
// life cycle of search
81
nsresult InitSearch();
82
nsresult KillSearch(PRInt16 aResult);
83
nsresult SearchDirectory(nsIFile* aDir, PRBool aIsSync);
84
nsresult PrepareResult(nsIFile* aFile, PRBool aIsSync);
86
// asynchronous search helpers
87
nsresult InitSearchLoop();
88
nsresult InitSubDirectoryStack();
89
PRBool GetNextSubDirectory(nsIFile** aDir);
90
nsresult PushSubDirectoryOnStack(nsIFile* aDir);
91
already_AddRefed<nsIFile> GetNextDirectory(nsISimpleEnumerator* aEnum);
94
PRBool MatchFile(nsIFile* aFile);
95
static PRBool MatchPattern(PRUnichar* aPattern, PRUnichar* aString);
96
static PRBool AdvanceWildcard(PRUnichar** aString, PRUnichar* aNextChar);
99
nsresult MakePathRelative(nsAString& aPath);
100
nsresult CountDirectoryDepth(nsIFile* aDir, PRUint32* aDepth);
104
#endif // __inFileSearch_h__