| Index: chrome/browser/chromeos/drive/file_change.h
|
| diff --git a/chrome/browser/chromeos/drive/file_change.h b/chrome/browser/chromeos/drive/file_change.h
|
| index 0285bd983000cc50df1499ac2b8a99de5b5e3f33..f735e59fadb0a3ad54b7fedffa13371b74c8c663 100644
|
| --- a/chrome/browser/chromeos/drive/file_change.h
|
| +++ b/chrome/browser/chromeos/drive/file_change.h
|
| @@ -5,52 +5,112 @@
|
| #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_CHANGE_H_
|
| #define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_CHANGE_H_
|
|
|
| -#include <set>
|
| +#include <deque>
|
| +#include <map>
|
| +#include <string>
|
|
|
| +#include "base/basictypes.h"
|
| #include "base/files/file_path.h"
|
| +#include "webkit/browser/fileapi/file_system_url.h"
|
|
|
| namespace drive {
|
| +class ResourceEntry;
|
|
|
| -class FileChange;
|
| -
|
| -// Set of changes.
|
| -typedef std::set<FileChange> FileChangeSet;
|
| -
|
| -// Represents change in the filesystem. Rename is represented as two entries:
|
| -// of type DELETED and ADDED. CHANGED type is for changed contents of
|
| -// directories or for changed metadata and/or contents of files.
|
| class FileChange {
|
| public:
|
| - enum Type {
|
| - DELETED,
|
| - ADDED,
|
| - CHANGED,
|
| + enum FileType {
|
| + FILE_TYPE_UNKNOWN,
|
| + FILE_TYPE_FILE,
|
| + FILE_TYPE_DIRECTORY,
|
| };
|
|
|
| - // Created an object representing a change of file or directory pointed by
|
| - // |change_path|. The change is of |change_type| type.
|
| - FileChange(const base::FilePath& path, Type type);
|
| - ~FileChange();
|
| + enum ChangeType {
|
| + ADD_OR_UPDATE,
|
| + DELETE,
|
| + };
|
|
|
| - // Factory method to create a FileChangeSet object with only one element.
|
| - static FileChangeSet CreateSingleSet(const base::FilePath& path, Type type);
|
| + class Change {
|
| + public:
|
| + Change(ChangeType change, FileType file_type);
|
|
|
| - bool operator==(const FileChange &file_change) const {
|
| - return path_ == file_change.path() && type_ == file_change.type();
|
| - }
|
| + bool IsAddOrUpdate() const { return change_ == ADD_OR_UPDATE; }
|
| + bool IsDelete() const { return change_ == DELETE; }
|
|
|
| - bool operator<(const FileChange &file_change) const {
|
| - return (path_ < file_change.path()) ||
|
| - (path_ == file_change.path() && type_ < file_change.type());
|
| - }
|
| + bool IsFile() const { return file_type_ == FILE_TYPE_FILE; }
|
| + bool IsDirectory() const { return file_type_ == FILE_TYPE_DIRECTORY; }
|
| + bool IsTypeUnknown() const { return !IsFile() && !IsDirectory(); }
|
| +
|
| + ChangeType change() const { return change_; }
|
| + FileType file_type() const { return file_type_; }
|
| +
|
| + std::string DebugString() const;
|
| +
|
| + bool operator==(const Change& that) const {
|
| + return change() == that.change() && file_type() == that.file_type();
|
| + }
|
| +
|
| + private:
|
| + ChangeType change_;
|
| + FileType file_type_;
|
| + };
|
| +
|
| + class ChangeList {
|
| + public:
|
| + typedef std::deque<Change> List;
|
|
|
| - const base::FilePath& path() const { return path_; }
|
| + ChangeList();
|
| + ~ChangeList();
|
| +
|
| + // Updates the list with the |new_change|.
|
| + void Update(const Change& new_change);
|
| +
|
| + size_t size() const { return list_.size(); }
|
| + bool empty() const { return list_.empty(); }
|
| + void clear() { list_.clear(); }
|
| + const List& list() const { return list_; }
|
| + const Change& front() const { return list_.front(); }
|
| + const Change& back() const { return list_.back(); }
|
| +
|
| + ChangeList PopAndGetNewList() const;
|
| +
|
| + std::string DebugString() const;
|
| +
|
| + private:
|
| + List list_;
|
| + };
|
| +
|
| + public:
|
| + typedef std::map<base::FilePath, FileChange::ChangeList> Map;
|
| +
|
| + FileChange();
|
| + ~FileChange();
|
| +
|
| + void Update(const base::FilePath file_path,
|
| + const FileChange::Change& new_change);
|
| + void Update(const base::FilePath file_path,
|
| + const FileChange::ChangeList& list);
|
| + void Update(const base::FilePath file_path,
|
| + FileType type,
|
| + FileChange::ChangeType change);
|
| + void Update(const base::FilePath file_path,
|
| + const ResourceEntry& entry,
|
| + FileChange::ChangeType change);
|
| + void Apply(const FileChange& new_changed_files);
|
| +
|
| + const Map& map() const { return map_; }
|
| +
|
| + size_t size() const { return map_.size(); }
|
| + bool empty() const { return map_.empty(); }
|
| + void ClearForTest() { map_.clear(); }
|
| + size_t CountDirectory(const base::FilePath& directory_path) const;
|
| + size_t count(const base::FilePath& file_path) const {
|
| + return map_.count(file_path);
|
| + }
|
|
|
| - Type type() const { return type_; }
|
| + std::string DebugString() const;
|
|
|
| private:
|
| - const base::FilePath path_;
|
| - const Type type_;
|
| + Map map_;
|
| };
|
|
|
| } // namespace drive
|
|
|