mtp_device_object_enumerator.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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
3// found in the LICENSE file.
4
5#include "chrome/browser/media_galleries/linux/mtp_device_object_enumerator.h"
6
7#include "base/logging.h"
8
9MTPDeviceObjectEnumerator::MTPDeviceObjectEnumerator(
10    const std::vector<MtpFileEntry>& entries)
11    : file_entries_(entries),
12      index_(0U),
13      is_index_ready_(false) {
14}
15
16MTPDeviceObjectEnumerator::~MTPDeviceObjectEnumerator() {
17}
18
19base::FilePath MTPDeviceObjectEnumerator::Next() {
20  if (IsIndexReadyAndInRange())
21    ++index_;  // Normal traversal.
22  else if (!is_index_ready_)
23    is_index_ready_ = true;  // First time calling Next().
24
25  if (!HasMoreEntries())
26    return base::FilePath();
27  return base::FilePath(file_entries_[index_].file_name());
28}
29
30int64 MTPDeviceObjectEnumerator::Size() {
31  if (!IsIndexReadyAndInRange())
32    return 0;
33  return file_entries_[index_].file_size();
34}
35
36bool MTPDeviceObjectEnumerator::IsDirectory() {
37  if (!IsIndexReadyAndInRange())
38    return false;
39  return file_entries_[index_].file_type() == MtpFileEntry::FILE_TYPE_FOLDER;
40}
41
42base::Time MTPDeviceObjectEnumerator::LastModifiedTime() {
43  if (!IsIndexReadyAndInRange())
44    return base::Time();
45  return base::Time::FromTimeT(file_entries_[index_].modification_time());
46}
47
48bool MTPDeviceObjectEnumerator::GetEntryId(uint32* entry_id) const {
49  DCHECK(entry_id);
50  if (!IsIndexReadyAndInRange())
51    return false;
52
53  *entry_id = file_entries_[index_].item_id();
54  return true;
55}
56
57bool MTPDeviceObjectEnumerator::HasMoreEntries() const {
58  return index_ < file_entries_.size();
59}
60
61bool MTPDeviceObjectEnumerator::IsIndexReadyAndInRange() const {
62  return is_index_ready_ && HasMoreEntries();
63}
64