mtp_device_object_enumerator.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MTPDeviceObjectEnumerator implementation.
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/win/mtp_device_object_enumerator.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/thread_restrictions.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chrome {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MTPDeviceObjectEnumerator::MTPDeviceObjectEnumerator(
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const MTPDeviceObjectEntries& entries)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : object_entries_(entries),
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      index_(0U),
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      is_index_ready_(false) {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ThreadRestrictions::AssertIOAllowed();
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MTPDeviceObjectEnumerator::~MTPDeviceObjectEnumerator() {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath MTPDeviceObjectEnumerator::Next() {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (IsIndexReadyAndInRange())
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ++index_;  // Normal traversal.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (!is_index_ready_)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    is_index_ready_ = true;  // First time calling Next().
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!HasMoreEntries())
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return base::FilePath();
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return base::FilePath(object_entries_[index_].name);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 MTPDeviceObjectEnumerator::Size() {
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!IsIndexReadyAndInRange())
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 0;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return object_entries_[index_].size;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::IsDirectory() {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!IsIndexReadyAndInRange())
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return false;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return object_entries_[index_].is_directory;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::Time MTPDeviceObjectEnumerator::LastModifiedTime() {
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!IsIndexReadyAndInRange())
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return base::Time();
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return object_entries_[index_].last_modified_time;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)string16 MTPDeviceObjectEnumerator::GetObjectId() const {
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(thread_checker_.CalledOnValidThread());
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!IsIndexReadyAndInRange())
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return string16();
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return object_entries_[index_].object_id;
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::HasMoreEntries() const {
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return index_ < object_entries_.size();
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::IsIndexReadyAndInRange() const {
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return is_index_ready_ && HasMoreEntries();
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace chrome
75