12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 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)#include "chrome/browser/media_galleries/linux/mtp_device_object_enumerator.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MTPDeviceObjectEnumerator::MTPDeviceObjectEnumerator( 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<MtpFileEntry>& entries) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : file_entries_(entries), 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) index_(0U), 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_index_ready_(false) { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MTPDeviceObjectEnumerator::~MTPDeviceObjectEnumerator() { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath MTPDeviceObjectEnumerator::Next() { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsIndexReadyAndInRange()) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++index_; // Normal traversal. 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (!is_index_ready_) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_index_ready_ = true; // First time calling Next(). 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!HasMoreEntries()) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(file_entries_[index_].file_name()); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 MTPDeviceObjectEnumerator::Size() { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return file_entries_[index_].file_size(); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::IsDirectory() { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return file_entries_[index_].file_type() == MtpFileEntry::FILE_TYPE_FOLDER; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::Time MTPDeviceObjectEnumerator::LastModifiedTime() { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::Time(); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::Time::FromTimeT(file_entries_[index_].modification_time()); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::GetEntryId(uint32_t* entry_id) const { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(entry_id); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *entry_id = file_entries_[index_].item_id(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::HasMoreEntries() const { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return index_ < file_entries_.size(); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::IsIndexReadyAndInRange() const { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return is_index_ready_ && HasMoreEntries(); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 64