mtp_device_object_enumerator.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// MTPDeviceObjectEnumerator implementation. 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/media_galleries/win/mtp_device_object_enumerator.h" 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/logging.h" 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/threading/thread_restrictions.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 120529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochMTPDeviceObjectEnumerator::MTPDeviceObjectEnumerator( 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const MTPDeviceObjectEntries& entries) 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch : object_entries_(entries), 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch index_(0U), 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch is_index_ready_(false) { 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::ThreadRestrictions::AssertIOAllowed(); 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 200529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochMTPDeviceObjectEnumerator::~MTPDeviceObjectEnumerator() { 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK(thread_checker_.CalledOnValidThread()); 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochbase::FilePath MTPDeviceObjectEnumerator::Next() { 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK(thread_checker_.CalledOnValidThread()); 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (IsIndexReadyAndInRange()) 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ++index_; // Normal traversal. 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch else if (!is_index_ready_) 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch is_index_ready_ = true; // First time calling Next(). 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!HasMoreEntries()) 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return base::FilePath(); 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return base::FilePath(object_entries_[index_].name); 34} 35 36int64 MTPDeviceObjectEnumerator::Size() { 37 DCHECK(thread_checker_.CalledOnValidThread()); 38 if (!IsIndexReadyAndInRange()) 39 return 0; 40 return object_entries_[index_].size; 41} 42 43bool MTPDeviceObjectEnumerator::IsDirectory() { 44 DCHECK(thread_checker_.CalledOnValidThread()); 45 if (!IsIndexReadyAndInRange()) 46 return false; 47 return object_entries_[index_].is_directory; 48} 49 50base::Time MTPDeviceObjectEnumerator::LastModifiedTime() { 51 DCHECK(thread_checker_.CalledOnValidThread()); 52 if (!IsIndexReadyAndInRange()) 53 return base::Time(); 54 return object_entries_[index_].last_modified_time; 55} 56 57base::string16 MTPDeviceObjectEnumerator::GetObjectId() const { 58 DCHECK(thread_checker_.CalledOnValidThread()); 59 if (!IsIndexReadyAndInRange()) 60 return base::string16(); 61 return object_entries_[index_].object_id; 62} 63 64bool MTPDeviceObjectEnumerator::HasMoreEntries() const { 65 return index_ < object_entries_.size(); 66} 67 68bool MTPDeviceObjectEnumerator::IsIndexReadyAndInRange() const { 69 return is_index_ready_ && HasMoreEntries(); 70} 71