Index: chrome/browser/chromeos/gdata/gdata_files.cc |
=================================================================== |
--- chrome/browser/chromeos/gdata/gdata_files.cc (revision 151008) |
+++ chrome/browser/chromeos/gdata/gdata_files.cc (working copy) |
@@ -5,7 +5,6 @@ |
#include "chrome/browser/chromeos/gdata/gdata_files.h" |
#include <leveldb/db.h> |
-#include <vector> |
#include "base/message_loop_proxy.h" |
#include "base/platform_file.h" |
@@ -254,6 +253,8 @@ |
} |
void GDataDirectory::AddEntry(GDataEntry* entry) { |
+ DCHECK(!entry->parent()); |
+ |
// The entry name may have been changed due to prior name de-duplication. |
// We need to first restore the file name based on the title before going |
// through name de-duplication again when it is added to another directory. |
@@ -296,6 +297,7 @@ |
bool GDataDirectory::TakeOverEntries(GDataDirectory* dir) { |
for (GDataFileCollection::iterator iter = dir->child_files_.begin(); |
iter != dir->child_files_.end(); ++iter) { |
+ iter->second->SetParent(NULL); |
satorux1
2012/08/10 16:14:44
iter->second looks cryptic. maybe add:
GDataFi
achuithb
2012/08/11 00:37:45
Done.
|
AddEntry(iter->second); |
} |
dir->child_files_.clear(); |
@@ -303,6 +305,7 @@ |
for (GDataDirectoryCollection::iterator iter = |
dir->child_directories_.begin(); |
iter != dir->child_directories_.end(); ++iter) { |
+ iter->second->SetParent(NULL); |
satorux1
2012/08/10 16:14:44
ditto
achuithb
2012/08/11 00:37:45
Done.
|
AddEntry(iter->second); |
} |
dir->child_directories_.clear(); |
@@ -355,6 +358,8 @@ |
// Then delete it from tree. |
child_files_.erase(base_name); |
child_directories_.erase(base_name); |
+ |
+ entry->SetParent(NULL); |
} |
void GDataDirectory::RemoveChildren() { |
@@ -563,6 +568,16 @@ |
root_.reset(); |
} |
+void GDataDirectoryService::AddEntryToDirectory( |
+ GDataDirectory* directory, |
+ GDataEntry* new_entry, |
+ const base::Closure& callback) { |
satorux1
2012/08/10 16:14:44
As of now, this function won't fail as we are deal
achuithb
2012/08/11 00:37:45
This is an excellent suggestion, however we want t
|
+ DCHECK(!callback.is_null()); |
satorux1
2012/08/10 16:14:44
maybe add DCHECK(directory) and DCHECK(new_entry)
achuithb
2012/08/11 00:37:45
Done.
|
+ directory->AddEntry(new_entry); |
+ base::MessageLoopProxy::current()->PostTask(FROM_HERE, callback); |
+} |
+ |
+ |
void GDataDirectoryService::MoveEntryToDirectory( |
const FilePath& directory_path, |
GDataEntry* entry, |
@@ -591,6 +606,16 @@ |
} |
} |
+void GDataDirectoryService::RemoveEntryFromParent( |
+ GDataEntry* entry, |
+ const base::Closure& callback) { |
satorux1
2012/08/10 16:14:44
ditto. FileOperationCallback?
achuithb
2012/08/11 00:37:45
Done. FileMoveCallback here and also in RefreshDir
|
+ entry->parent()->RemoveEntry(entry); |
+ if (!callback.is_null()) { |
+ base::MessageLoopProxy::current()->PostTask(FROM_HERE, callback); |
+ } |
+} |
+ |
+ |
void GDataDirectoryService::AddEntryToResourceMap(GDataEntry* entry) { |
// GDataFileSystem has already locked. |
DVLOG(1) << "AddEntryToResourceMap " << entry->resource_id(); |
@@ -734,6 +759,43 @@ |
} |
} |
+void GDataDirectoryService::RefreshDirectory( |
+ const std::string& directory_resource_id, |
+ const ResourceMap& file_map, |
+ const base::Closure& callback) { |
satorux1
2012/08/10 16:14:44
DCHECK(!callback.is_null())
achuithb
2012/08/11 00:37:45
Done.
|
+ GetEntryByResourceIdAsync(directory_resource_id, |
satorux1
2012/08/10 16:14:44
nit: please move directory_resource_id to the next
achuithb
2012/08/11 00:37:45
Done.
|
+ base::Bind(&GDataDirectoryService::RefreshDirectoryInternal, |
+ file_map, |
+ callback)); |
+} |
+ |
+// static |
+void GDataDirectoryService::RefreshDirectoryInternal( |
+ const ResourceMap& file_map, |
+ const base::Closure& callback, |
+ GDataEntry* directory_entry) { |
+ DCHECK(!callback.is_null()); |
satorux1
2012/08/10 16:14:44
nit: add a blank line like we do elsewhere
achuithb
2012/08/11 00:37:45
Done.
|
+ if (!directory_entry || !directory_entry->AsGDataDirectory()) { |
+ LOG(ERROR) << "RefreshDirectoryInternal: Failed to find directory"; |
+ return; |
+ } |
+ |
+ GDataDirectory* directory = directory_entry->AsGDataDirectory(); |
+ |
+ directory->RemoveChildFiles(); |
+ // Add files from file_map. |
+ for (ResourceMap::const_iterator it = file_map.begin(); |
+ it != file_map.end(); ++it) { |
+ scoped_ptr<GDataEntry> entry(it->second); |
+ // Skip if it's not a file (i.e. directory). |
+ if (!entry->AsGDataFile()) |
+ continue; |
+ directory->AddEntry(entry.release()); |
+ } |
+ |
+ callback.Run(); |
+} |
+ |
void GDataDirectoryService::InitFromDB( |
const FilePath& db_path, |
base::SequencedTaskRunner* blocking_task_runner, |