mtp_device_object_enumerator.h revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
1// Copyright (c) 2013 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// This class enumerates the media transfer protocol (MTP) device objects from 6// a given object entry list. 7 8#ifndef CHROME_BROWSER_MEDIA_GALLERIES_WIN_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 9#define CHROME_BROWSER_MEDIA_GALLERIES_WIN_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 10 11#include "base/files/file_path.h" 12#include "base/threading/thread_checker.h" 13#include "base/time/time.h" 14#include "chrome/browser/media_galleries/win/mtp_device_object_entry.h" 15#include "webkit/browser/fileapi/file_system_file_util.h" 16 17// MTPDeviceObjectEnumerator is used to enumerate the media transfer protocol 18// (MTP) device objects from a given object entry list. 19// MTPDeviceObjectEnumerator supports MTP device file operations. 20// MTPDeviceObjectEnumerator may only be used on a single thread. 21class MTPDeviceObjectEnumerator 22 : public fileapi::FileSystemFileUtil::AbstractFileEnumerator { 23 public: 24 explicit MTPDeviceObjectEnumerator(const MTPDeviceObjectEntries& entries); 25 virtual ~MTPDeviceObjectEnumerator(); 26 27 // AbstractFileEnumerator: 28 virtual base::FilePath Next() OVERRIDE; 29 virtual int64 Size() OVERRIDE; 30 virtual bool IsDirectory() OVERRIDE; 31 virtual base::Time LastModifiedTime() OVERRIDE; 32 33 // If the current file object entry is valid, returns an non-empty object id. 34 // Returns an empty string otherwise. 35 string16 GetObjectId() const; 36 37 private: 38 // Returns true if the enumerator has more entries to traverse, false 39 // otherwise. 40 bool HasMoreEntries() const; 41 42 // Returns true if Next() has been called at least once, and the enumerator 43 // has more entries to traverse. 44 bool IsIndexReadyAndInRange() const; 45 46 // List of directory file object entries. 47 MTPDeviceObjectEntries object_entries_; 48 49 // Index into |object_entries_|. 50 // Should only be used when |is_index_ready_| is true. 51 size_t index_; 52 53 // Initially false. Set to true after Next() has been called. 54 bool is_index_ready_; 55 56 base::ThreadChecker thread_checker_; 57 58 DISALLOW_COPY_AND_ASSIGN(MTPDeviceObjectEnumerator); 59}; 60 61#endif // CHROME_BROWSER_MEDIA_GALLERIES_WIN_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 62