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