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)// This class enumerates the media transfer protocol (MTP) device objects from 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// a given object entry list. 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_MEDIA_GALLERIES_WIN_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_MEDIA_GALLERIES_WIN_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/thread_checker.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/win/mtp_device_object_entry.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MTPDeviceObjectEnumerator is used to enumerate the media transfer protocol 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// (MTP) device objects from a given object entry list. 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MTPDeviceObjectEnumerator supports MTP device file operations. 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MTPDeviceObjectEnumerator may only be used on a single thread. 208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class MTPDeviceObjectEnumerator { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit MTPDeviceObjectEnumerator(const MTPDeviceObjectEntries& entries); 238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ~MTPDeviceObjectEnumerator(); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath Next(); 268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int64 Size(); 278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool IsDirectory(); 288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::Time LastModifiedTime(); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the current file object entry is valid, returns an non-empty object id. 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns an empty string otherwise. 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 GetObjectId() const; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if the enumerator has more entries to traverse, false 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // otherwise. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HasMoreEntries() const; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if Next() has been called at least once, and the enumerator 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // has more entries to traverse. 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsIndexReadyAndInRange() const; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // List of directory file object entries. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MTPDeviceObjectEntries object_entries_; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Index into |object_entries_|. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Should only be used when |is_index_ready_| is true. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t index_; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initially false. Set to true after Next() has been called. 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_index_ready_; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadChecker thread_checker_; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MTPDeviceObjectEnumerator); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_MEDIA_GALLERIES_WIN_MTP_DEVICE_OBJECT_ENUMERATOR_H_ 59