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

Unified Diff: chrome/browser/media_gallery/win/recursive_mtp_device_object_enumerator.cc

Issue 11297002: [Media Gallery] Added code to support mtp device media file system on Windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed review comment and disabled MediaFileSystemRegistryTest.GalleryNameMTP Created 7 years, 11 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/media_gallery/win/recursive_mtp_device_object_enumerator.cc
diff --git a/chrome/browser/media_gallery/win/recursive_mtp_device_object_enumerator.cc b/chrome/browser/media_gallery/win/recursive_mtp_device_object_enumerator.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5e1c8ca1118334c0001f1dae045e8169768f9d55
--- /dev/null
+++ b/chrome/browser/media_gallery/win/recursive_mtp_device_object_enumerator.cc
@@ -0,0 +1,89 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// RecursiveMTPDeviceObjectEnumerator implementation.
+
+#include "chrome/browser/media_gallery/win/recursive_mtp_device_object_enumerator.h"
+
+#include "base/file_path.h"
+#include "base/threading/thread_restrictions.h"
+#include "chrome/browser/media_gallery/win/mtp_device_object_entry.h"
+#include "chrome/browser/media_gallery/win/mtp_device_object_enumerator.h"
+#include "chrome/browser/media_gallery/win/mtp_device_operations_util.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace chrome {
+
+RecursiveMTPDeviceObjectEnumerator::RecursiveMTPDeviceObjectEnumerator(
+ IPortableDevice* device,
+ const MTPDeviceObjectEntries& entries)
+ : device_(device),
+ curr_object_entries_(entries),
+ object_entry_iter_(curr_object_entries_.begin()) {
+ base::ThreadRestrictions::AssertIOAllowed();
+ current_enumerator_.reset(new MTPDeviceObjectEnumerator(entries));
+}
+
+RecursiveMTPDeviceObjectEnumerator::~RecursiveMTPDeviceObjectEnumerator() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+}
+
+FilePath RecursiveMTPDeviceObjectEnumerator::Next() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ MaybeUpdateCurrentObjectList();
+ if (curr_object_entries_.empty())
+ return FilePath();
+
+ DCHECK(object_entry_iter_ != curr_object_entries_.end());
+ MTPDeviceObjectEntry current_object_entry = *(object_entry_iter_++);
Lei Zhang 2013/01/14 23:25:30 const ref
kmadhusu 2013/01/15 19:08:17 Done.
+ if (current_object_entry.is_directory) {
+ // If |current_object_entry| is a directory, add it to
+ // |unparsed_directory_object_ids_| to scan after scanning this directory.
+ unparsed_directory_object_ids_.push(current_object_entry.object_id);
+ }
+ return current_enumerator_->Next();
+}
+
+int64 RecursiveMTPDeviceObjectEnumerator::Size() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return current_enumerator_->Size();
+}
+
+bool RecursiveMTPDeviceObjectEnumerator::IsDirectory() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return current_enumerator_->IsDirectory();
+}
+
+base::Time RecursiveMTPDeviceObjectEnumerator::LastModifiedTime() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return current_enumerator_->LastModifiedTime();
+}
+
+void RecursiveMTPDeviceObjectEnumerator::MaybeUpdateCurrentObjectList() {
+ if (object_entry_iter_ != curr_object_entries_.end())
+ return;
+
+ curr_object_entries_.clear();
+ while (curr_object_entries_.empty() &&
+ !unparsed_directory_object_ids_.empty()) {
+ DirectoryObjectId object_id = unparsed_directory_object_ids_.front();
+ unparsed_directory_object_ids_.pop();
+ if (media_transfer_protocol::GetDirectoryEntries(device_.get(), object_id,
+ &curr_object_entries_) &&
+ !curr_object_entries_.empty()) {
+ current_enumerator_.reset(
+ new MTPDeviceObjectEnumerator(curr_object_entries_));
+ break;
+ }
+ }
+
+ if (curr_object_entries_.empty()) {
+ // Parsed all the objects.
+ current_enumerator_.reset(
+ new fileapi::FileSystemFileUtil::EmptyFileEnumerator());
+ }
+ object_entry_iter_ = curr_object_entries_.begin();
+}
+
+} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698