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#ifndef CHROME_BROWSER_MEDIA_GALLERIES_LINUX_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 6#define CHROME_BROWSER_MEDIA_GALLERIES_LINUX_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 7 8#include <vector> 9 10#include "base/files/file_path.h" 11#include "base/time/time.h" 12#include "device/media_transfer_protocol/mtp_file_entry.pb.h" 13 14// Used to enumerate top-level files of an media file system. 15class MTPDeviceObjectEnumerator { 16 public: 17 explicit MTPDeviceObjectEnumerator(const std::vector<MtpFileEntry>& entries); 18 19 ~MTPDeviceObjectEnumerator(); 20 21 base::FilePath Next(); 22 int64 Size(); 23 bool IsDirectory(); 24 base::Time LastModifiedTime(); 25 26 // If the current file entry is valid, returns true and fills in |entry_id| 27 // with the entry identifier else returns false and |entry_id| is not set. 28 bool GetEntryId(uint32* entry_id) const; 29 30 private: 31 // Returns true if the enumerator has more entries to traverse, false 32 // otherwise. 33 bool HasMoreEntries() const; 34 35 // Returns true if Next() has been called at least once, and the enumerator 36 // has more entries to traverse. 37 bool IsIndexReadyAndInRange() const; 38 39 // List of directory file entries information. 40 const std::vector<MtpFileEntry> file_entries_; 41 42 // Index into |file_entries_|. 43 // Should only be used when |is_index_ready_| is true. 44 size_t index_; 45 46 // Initially false. Set to true after Next() has been called. 47 bool is_index_ready_; 48 49 DISALLOW_COPY_AND_ASSIGN(MTPDeviceObjectEnumerator); 50}; 51 52#endif // CHROME_BROWSER_MEDIA_GALLERIES_LINUX_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 53