OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/drive/file_system/copy_operation.h" | 5 #include "chrome/browser/chromeos/drive/file_system/copy_operation.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/task_runner_util.h" | 10 #include "base/task_runner_util.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 *directory_changed = true; | 110 *directory_changed = true; |
111 break; | 111 break; |
112 case FILE_ERROR_NOT_FOUND: | 112 case FILE_ERROR_NOT_FOUND: |
113 break; | 113 break; |
114 default: | 114 default: |
115 return error; | 115 return error; |
116 } | 116 } |
117 | 117 |
118 // If the cache file is not present and the entry exists on the server, | 118 // If the cache file is not present and the entry exists on the server, |
119 // server side copy should be used. | 119 // server side copy should be used. |
120 FileCacheEntry cache_entry; | 120 if (!params->src_entry.file_specific_info().cache_state().is_present() && |
121 error = cache->GetCacheEntry(params->src_entry.local_id(), &cache_entry); | 121 !params->src_entry.resource_id().empty()) { |
122 if (error != FILE_ERROR_OK && error != FILE_ERROR_NOT_FOUND) | |
123 return error; | |
124 if (!cache_entry.is_present() && !params->src_entry.resource_id().empty()) { | |
125 *should_copy_on_server = true; | 122 *should_copy_on_server = true; |
126 return FILE_ERROR_OK; | 123 return FILE_ERROR_OK; |
127 } | 124 } |
128 | 125 |
129 // Copy locally. | 126 // Copy locally. |
130 ResourceEntry entry; | 127 ResourceEntry entry; |
131 const int64 now = base::Time::Now().ToInternalValue(); | 128 const int64 now = base::Time::Now().ToInternalValue(); |
132 entry.set_title(params->dest_file_path.BaseName().AsUTF8Unsafe()); | 129 entry.set_title(params->dest_file_path.BaseName().AsUTF8Unsafe()); |
133 entry.set_parent_local_id(params->parent_entry.local_id()); | 130 entry.set_parent_local_id(params->parent_entry.local_id()); |
134 entry.mutable_file_specific_info()->set_content_mime_type( | 131 entry.mutable_file_specific_info()->set_content_mime_type( |
135 params->src_entry.file_specific_info().content_mime_type()); | 132 params->src_entry.file_specific_info().content_mime_type()); |
136 entry.set_metadata_edit_state(ResourceEntry::DIRTY); | 133 entry.set_metadata_edit_state(ResourceEntry::DIRTY); |
137 entry.set_modification_date(base::Time::Now().ToInternalValue()); | 134 entry.set_modification_date(base::Time::Now().ToInternalValue()); |
138 entry.mutable_file_info()->set_last_modified( | 135 entry.mutable_file_info()->set_last_modified( |
139 params->preserve_last_modified ? | 136 params->preserve_last_modified ? |
140 params->src_entry.file_info().last_modified() : now); | 137 params->src_entry.file_info().last_modified() : now); |
141 entry.mutable_file_info()->set_last_accessed(now); | 138 entry.mutable_file_info()->set_last_accessed(now); |
142 | 139 |
143 std::string local_id; | 140 std::string local_id; |
144 error = metadata->AddEntry(entry, &local_id); | 141 error = metadata->AddEntry(entry, &local_id); |
145 if (error != FILE_ERROR_OK) | 142 if (error != FILE_ERROR_OK) |
146 return error; | 143 return error; |
147 updated_local_ids->push_back(local_id); | 144 updated_local_ids->push_back(local_id); |
148 *directory_changed = true; | 145 *directory_changed = true; |
149 | 146 |
150 if (!cache_entry.is_present()) { | 147 if (!params->src_entry.file_specific_info().cache_state().is_present()) { |
151 DCHECK(params->src_entry.resource_id().empty()); | 148 DCHECK(params->src_entry.resource_id().empty()); |
152 // Locally created empty file may have no cache file. | 149 // Locally created empty file may have no cache file. |
153 return FILE_ERROR_OK; | 150 return FILE_ERROR_OK; |
154 } | 151 } |
155 | 152 |
156 base::FilePath cache_file_path; | 153 base::FilePath cache_file_path; |
157 error = cache->GetFile(params->src_entry.local_id(), &cache_file_path); | 154 error = cache->GetFile(params->src_entry.local_id(), &cache_file_path); |
158 if (error != FILE_ERROR_OK) | 155 if (error != FILE_ERROR_OK) |
159 return error; | 156 return error; |
160 | 157 |
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 | 579 |
583 if (error == FILE_ERROR_OK) { | 580 if (error == FILE_ERROR_OK) { |
584 observer_->OnDirectoryChangedByOperation(remote_dest_path.DirName()); | 581 observer_->OnDirectoryChangedByOperation(remote_dest_path.DirName()); |
585 observer_->OnEntryUpdatedByOperation(*local_id); | 582 observer_->OnEntryUpdatedByOperation(*local_id); |
586 } | 583 } |
587 callback.Run(error); | 584 callback.Run(error); |
588 } | 585 } |
589 | 586 |
590 } // namespace file_system | 587 } // namespace file_system |
591 } // namespace drive | 588 } // namespace drive |
OLD | NEW |