sbFileScan.h
Go to the documentation of this file.
1 /*
2  //
3 // BEGIN SONGBIRD GPL
4 //
5 // This file is part of the Songbird web player.
6 //
7 // Copyright(c) 2005-2008 POTI, Inc.
8 // http://songbirdnest.com
9 //
10 // This file may be licensed under the terms of of the
11 // GNU General Public License Version 2 (the "GPL").
12 //
13 // Software distributed under the License is distributed
14 // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
15 // express or implied. See the GPL for the specific language
16 // governing rights and limitations.
17 //
18 // You should have received a copy of the GPL along with this
19 // program. If not, go to http://www.gnu.org/licenses/gpl.html
20 // or write to the Free Software Foundation, Inc.,
21 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 //
23 // END SONGBIRD GPL
24 //
25  */
26 
32 #ifndef __FILE_SCAN_H__
33 #define __FILE_SCAN_H__
34 
35 // INCLUDES ===================================================================
36 #include <deque>
37 
38 #include "sbIFileScan.h"
39 
40 #include <nscore.h>
41 #include <nsCOMPtr.h>
42 
43 #include <nsIFile.h>
44 #include <nsILocalFile.h>
45 #include <nsIMutableArray.h>
46 #include <nsINetUtil.h>
47 
48 #include <nsStringGlue.h>
49 #include <nsServiceManagerUtils.h>
50 #include <nsComponentManagerUtils.h>
51 #include <nsHashKeys.h>
52 #include <nsISimpleEnumerator.h>
53 #include <nsTHashtable.h>
54 #include <nsXPCOM.h>
55 #include <prlock.h>
56 #include <prmon.h>
57 #include <nsIThread.h>
58 #include <nsIRunnable.h>
59 
60 // DEFINES ====================================================================
61 #define SONGBIRD_FILESCAN_CONTRACTID \
62  "@songbirdnest.com/Songbird/FileScan;1"
63 #define SONGBIRD_FILESCAN_CLASSNAME \
64  "Songbird Media Scan Interface"
65 // {411DD545-EAD0-41c4-8BA1-697DBE5C67EA}
66 #define SONGBIRD_FILESCAN_CID \
67 { 0x411dd545, 0xead0, 0x41c4, { 0x8b, 0xa1, 0x69, 0x7d, 0xbe, 0x5c, 0x67, 0xea } }
68 
69 #define SONGBIRD_FILESCANQUERY_CONTRACTID \
70  "@songbirdnest.com/Songbird/FileScanQuery;1"
71 #define SONGBIRD_FILESCANQUERY_CLASSNAME \
72  "Songbird Media Scan Query Interface"
73 // {7BB22470-E03D-4220-AC93-AC70700AF6AB}
74 #define SONGBIRD_FILESCANQUERY_CID \
75 { 0x7bb22470, 0xe03d, 0x4220, { 0xac, 0x93, 0xac, 0x70, 0x70, 0xa, 0xf6, 0xab } }
76 
77 // CLASSES ====================================================================
83 {
84 public:
86  sbFileScanQuery(const nsString & strDirectory,
87  const PRBool & bRecurse,
88  sbIFileScanCallback *pCallback);
89 
90  virtual ~sbFileScanQuery();
91  // Common initializations.
92  void init();
93 
95  NS_DECL_SBIFILESCANQUERY
96 
97 protected:
98  nsString GetExtensionFromFilename(const nsAString &strFilename);
99  PRBool VerifyFileExtension(const nsAString &strExtension,
100  PRBool *aOutIsFlaggedExtension);
101 
103  nsString m_strDirectory;
104 
107 
109  PRBool m_bRecurse;
111 
114 
116  nsCOMPtr<sbIFileScanCallback> m_pCallback;
117 
118  // thread-safe nsIMutableArray to store the URI spec strings
119  nsCOMPtr<nsIMutableArray> m_pFileStack;
120  nsCOMPtr<nsIMutableArray> m_pFlaggedFileStack;
121 
123  nsTHashtable<nsStringHashKey> m_Extensions;
124 
126  nsTHashtable<nsStringHashKey> m_FlaggedExtensions;
127 
128  // m_lastSeenExtension records the extension for the last added URI
130 
131  PRLock* m_pCancelLock;
132  PRBool m_bCancel;
133 };
134 
136 
141 class sbFileScan : public sbIFileScan
142 {
143 public:
144  sbFileScan();
145  virtual ~sbFileScan();
146 
148  NS_DECL_SBIFILESCAN
149 
150 protected:
151  //
152  // @brief
153  //
155 
156  //
157  // @brief Trigger method to process any file scan queries when they become
158  // active.
159  void RunProcessScanQueries();
160 
161  //
162  // @brief
163  //
164  nsresult ScanDirectory(sbIFileScanQuery *pQuery);
165 
166  // Typedefs
167  typedef std::deque<sbIFileScanQuery *> queryqueue_t;
168  typedef std::deque<sbIDirectoryEnumerator *> dirstack_t;
169  typedef std::deque<nsCOMPtr<nsIFile> > fileentrystack_t;
170  typedef std::deque<nsCOMPtr<nsIFile> > entrystack_t;
171 
172  nsresult Shutdown();
173 
176 
178 
179  nsCOMPtr<nsINetUtil> mNetUtil;
181  PRBool m_Finalized;
182 };
183 
184 #endif // __FILE_SCAN_H__
185 
std::deque< nsCOMPtr< nsIFile > > entrystack_t
Definition: sbFileScan.h:170
nsresult Shutdown()
Definition: sbFileScan.cpp:642
PRBool VerifyFileExtension(const nsAString &strExtension, PRBool *aOutIsFlaggedExtension)
Definition: sbFileScan.cpp:558
PRLock * m_pCancelLock
Definition: sbFileScan.h:131
nsresult ScanDirectory(sbIFileScanQuery *pQuery)
Definition: sbFileScan.cpp:778
PRLock * m_ScanQueryQueueLock
Definition: sbFileScan.h:174
PRBool m_bWantLibraryContentURIs
Definition: sbFileScan.h:110
std::deque< nsCOMPtr< nsIFile > > fileentrystack_t
Definition: sbFileScan.h:169
PRLock * m_pScanningLock
Definition: sbFileScan.h:112
PRBool m_bRecurse
Definition: sbFileScan.h:109
PRLock * m_pExtensionsLock
Definition: sbFileScan.h:122
PRLock * m_pFlaggedFileExtensionsLock
Definition: sbFileScan.h:125
queryqueue_t m_ScanQueryQueue
Definition: sbFileScan.h:175
nsresult StartProcessScanQueriesProcessor()
Definition: sbFileScan.cpp:705
std::deque< sbIDirectoryEnumerator * > dirstack_t
Definition: sbFileScan.h:168
The callback to the sbIFileScanQuery interface.
Definition: sbIFileScan.idl:57
virtual ~sbFileScanQuery()
Definition: sbFileScan.cpp:151
PRLock * m_pCurrentPathLock
Definition: sbFileScan.h:105
void RunProcessScanQueries()
Definition: sbFileScan.cpp:728
PRLock * m_pCallbackLock
Definition: sbFileScan.h:115
nsCOMPtr< nsINetUtil > mNetUtil
Definition: sbFileScan.h:179
PRBool m_bCancel
Definition: sbFileScan.h:132
nsTHashtable< nsStringHashKey > m_FlaggedExtensions
Definition: sbFileScan.h:126
nsString m_strCurrentPath
Definition: sbFileScan.h:106
std::deque< sbIFileScanQuery * > queryqueue_t
Definition: sbFileScan.h:167
nsCOMPtr< sbIFileScanCallback > m_pCallback
Definition: sbFileScan.h:116
nsString m_strDirectory
Definition: sbFileScan.h:103
PRBool m_bSearchHidden
Definition: sbFileScan.h:108
PRBool m_bIsScanning
Definition: sbFileScan.h:113
PRBool m_ThreadShouldShutdown
Definition: sbFileScan.h:180
virtual ~sbFileScan()
Definition: sbFileScan.cpp:625
nsString GetExtensionFromFilename(const nsAString &strFilename)
Definition: sbFileScan.cpp:546
nsCOMPtr< nsIMutableArray > m_pFileStack
Definition: sbFileScan.h:119
nsString m_lastSeenExtension
Definition: sbFileScan.h:129
The engine in which to execute sbIFileScanQuery objects.
PRLock * m_pDirectoryLock
Definition: sbFileScan.h:102
nsCOMPtr< nsIMutableArray > m_pFlaggedFileStack
Definition: sbFileScan.h:120
PRInt32 m_ScanQueryProcessorIsRunning
Definition: sbFileScan.h:177
An object to scan through the files of a folder (and optionally subfolders)
PRBool m_Finalized
Definition: sbFileScan.h:181
nsTHashtable< nsStringHashKey > m_Extensions
Definition: sbFileScan.h:123