Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1071)

Unified Diff: chrome/browser/chromeos/gdata/gdata_files.cc

Issue 9662041: Implement copy and move operations within the same remote file system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/gdata/gdata_files.cc
===================================================================
--- chrome/browser/chromeos/gdata/gdata_files.cc (revision 126063)
+++ chrome/browser/chromeos/gdata/gdata_files.cc (working copy)
@@ -77,6 +77,10 @@
return path;
}
+void GDataFileBase::UseOriginalFileName() {
+ file_name_ = EscapeUtf8FileName(original_file_name_);
+}
+
// static.
GDataFileBase* GDataFileBase::FromDocumentEntry(GDataDirectory* parent,
DocumentEntry* doc) {
@@ -125,27 +129,36 @@
return this;
}
+void GDataFile::UseOriginalFileName() {
+ if (is_hosted_document_) {
+ file_name_ = EscapeUtf8FileName(original_file_name_ + document_extension_);
+ } else {
+ GDataFileBase::UseOriginalFileName();
+ }
+}
+
GDataFileBase* GDataFile::FromDocumentEntry(GDataDirectory* parent,
DocumentEntry* doc) {
DCHECK(doc->is_hosted_document() || doc->is_file());
GDataFile* file = new GDataFile(parent);
+
+ // For regular files, the 'filename' and 'title' attribute in the metadata
+ // may be different (e.g. due to rename). To be consistent with the web
+ // interface and other client to use the 'title' attribute, instead of
+ // 'filename', as the file name in the local snapshot.
+ file->original_file_name_ = UTF16ToUTF8(doc->title());
satorux1 2012/03/12 17:48:24 this looks like an important change. It'd be nicer
zel 2012/03/12 20:46:46 Is title required for regular (non-hosted) files t
Ben Chan 2012/03/13 00:29:21 Agree. Let me split the CL.
Ben Chan 2012/03/13 00:29:21 Yes, I noticed that both the web interface and the
+
// Check if this entry is a true file, or...
if (doc->is_file()) {
- file->original_file_name_ = UTF16ToUTF8(doc->filename());
- file->file_name_ =
- GDataFileBase::EscapeUtf8FileName(file->original_file_name_);
file->file_info_.size = doc->file_size();
file->file_md5_ = doc->file_md5();
} else {
- DCHECK(doc->is_hosted_document());
// ... a hosted document.
- file->original_file_name_ = UTF16ToUTF8(doc->title());
// Attach .g<something> extension to hosted documents so we can special
// case their handling in UI.
// TODO(zelidrag): Figure out better way how to pass entry info like kind
// to UI through the File API stack.
- file->file_name_ = GDataFileBase::EscapeUtf8FileName(
- file->original_file_name_ + doc->GetHostedDocumentExtension());
+ file->document_extension_ = doc->GetHostedDocumentExtension();
// We don't know the size of hosted docs and it does not matter since
// is has no effect on the quota.
file->file_info_.size = 0;
@@ -164,6 +177,9 @@
file->file_info_.last_accessed = doc->updated_time();
file->file_info_.creation_time = doc->published_time();
+ // UseOriginalFileName() must be called after |is_hosted_document_| is set.
+ file->UseOriginalFileName();
+
const Link* thumbnail_link = doc->GetLinkByType(Link::THUMBNAIL);
if (thumbnail_link)
file->thumbnail_url_ = thumbnail_link->href();
@@ -201,14 +217,19 @@
DCHECK(doc->is_folder());
GDataDirectory* dir = new GDataDirectory(parent);
dir->original_file_name_ = UTF16ToUTF8(doc->title());
- dir->file_name_ = GDataFileBase::EscapeUtf8FileName(dir->original_file_name_);
+ dir->UseOriginalFileName();
dir->file_info_.last_modified = doc->updated_time();
dir->file_info_.last_accessed = doc->updated_time();
dir->file_info_.creation_time = doc->published_time();
// Extract feed link.
dir->start_feed_url_ = doc->content_url();
+ dir->resource_id_ = doc->resource_id();
dir->content_url_ = doc->content_url();
+ const Link* self_link = doc->GetLinkByType(Link::SELF);
+ if (self_link)
+ dir->self_url_ = self_link->href();
+
const Link* upload_link = doc->GetLinkByType(Link::RESUMABLE_CREATE_MEDIA);
if (upload_link)
dir->upload_url_ = upload_link->href();
@@ -260,6 +281,27 @@
root_->AddFileToResourceMap(file);
}
+bool GDataDirectory::MoveFile(GDataFileBase* file, GDataDirectory* dir) {
+ DCHECK(file);
+ DCHECK(dir);
+ DCHECK_EQ(this, file->parent());
+
+ GDataFileCollection::iterator iter = children_.find(file->file_name());
+ if (children_.find(file->file_name()) == children_.end())
+ return false;
+
+ DCHECK(iter->second);
+ children_.erase(iter);
+
+ // The file name may have been changed due to prior de-duplication.
+ // We need to first restore the original name of the file before going
+ // through de-duplication again when it is added to another directory.
+ file->UseOriginalFileName();
+ dir->AddFile(file);
+ file->set_parent(dir);
+ return true;
+}
+
bool GDataDirectory::RemoveFile(GDataFileBase* file) {
GDataFileCollection::iterator iter = children_.find(file->file_name());
if (iter == children_.end())

Powered by Google App Engine
This is Rietveld 408576698