Index: net/base/directory_lister.h |
=================================================================== |
--- net/base/directory_lister.h (revision 56913) |
+++ net/base/directory_lister.h (working copy) |
@@ -6,11 +6,14 @@ |
#define NET_BASE_DIRECTORY_LISTER_H_ |
#pragma once |
+#include <vector> |
+ |
#include "base/cancellation_flag.h" |
#include "base/file_path.h" |
#include "base/file_util.h" |
#include "base/platform_thread.h" |
#include "base/ref_counted.h" |
+#include "base/task.h" |
class MessageLoop; |
@@ -26,27 +29,42 @@ |
class DirectoryLister : public base::RefCountedThreadSafe<DirectoryLister>, |
public PlatformThread::Delegate { |
public: |
+ // Represents one file found. |
+ struct DirectoryListerData { |
+ file_util::FileEnumerator::FindInfo info; |
+ FilePath path; |
+ }; |
+ |
// Implement this class to receive directory entries. |
class DirectoryListerDelegate { |
public: |
- virtual void OnListFile( |
- const file_util::FileEnumerator::FindInfo& data) = 0; |
+ // Called for each file found by the lister. |
+ virtual void OnListFile(const DirectoryListerData& data) = 0; |
+ |
+ // Called when the listing is complete. |
virtual void OnListDone(int error) = 0; |
protected: |
virtual ~DirectoryListerDelegate() {} |
}; |
+ // Sort options |
+ // ALPHA_DIRS_FIRST is the default sort : |
+ // directories first in name order, then files by name order |
+ // FULL_PATH sorts by paths as strings, ignoring files v. directories |
+ // DATE sorts by last modified date |
enum SORT_TYPE { |
- DEFAULT, |
+ NO_SORT, |
DATE, |
- ALPHA |
+ ALPHA_DIRS_FIRST, |
+ FULL_PATH |
}; |
DirectoryLister(const FilePath& dir, |
DirectoryListerDelegate* delegate); |
DirectoryLister(const FilePath& dir, |
+ bool recursive, |
SORT_TYPE sort, |
DirectoryListerDelegate* delegate); |
@@ -70,13 +88,21 @@ |
friend class base::RefCountedThreadSafe<DirectoryLister>; |
friend class DirectoryDataEvent; |
+ // Comparison methods for sorting, chosen based on |sort_|. |
+ static bool CompareAlphaDirsFirst(const DirectoryListerData& a, |
+ const DirectoryListerData& b); |
+ static bool CompareDate(const DirectoryListerData& a, |
+ const DirectoryListerData& b); |
+ static bool CompareFullPath(const DirectoryListerData& a, |
+ const DirectoryListerData& b); |
+ |
~DirectoryLister(); |
- void OnReceivedData(const file_util::FileEnumerator::FindInfo* data, |
- int count); |
+ void OnReceivedData(const DirectoryListerData* data, int count); |
void OnDone(int error); |
FilePath dir_; |
+ bool recursive_; |
DirectoryListerDelegate* delegate_; |
SORT_TYPE sort_; |
MessageLoop* message_loop_; |