1// Copyright 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#ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_IPHOTO_FILE_UTIL_H_
6#define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_IPHOTO_FILE_UTIL_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/memory/weak_ptr.h"
10#include "chrome/browser/media_galleries/fileapi/native_media_file_util.h"
11
12class ImportedMediaGalleryRegistry;
13
14namespace iphoto {
15
16class IPhotoDataProvider;
17
18// Presents a virtual file system containing iPhoto contents in the
19// following organization:
20// /                    = virtual root
21// |- /Albums
22//    |- /AlbumName     = An album entry by name.
23//       |- pic1.jpg    = Entries for photos in the album.
24//       |- pic2.jpg
25//    |- /AnotherAlbum
26//       |- pic3.jpg
27//       |- /originals  = A directory for originals.
28//          |- pic3.jpg = Original picture. Same name as album photo.
29
30extern const char kIPhotoAlbumsDir[];
31
32class IPhotoFileUtil : public NativeMediaFileUtil {
33 public:
34  explicit IPhotoFileUtil(MediaPathFilter* media_path_filter);
35  virtual ~IPhotoFileUtil();
36
37 protected:
38  // NativeMediaFileUtil overrides.
39  virtual void GetFileInfoOnTaskRunnerThread(
40      scoped_ptr<storage::FileSystemOperationContext> context,
41      const storage::FileSystemURL& url,
42      const GetFileInfoCallback& callback) OVERRIDE;
43  virtual void ReadDirectoryOnTaskRunnerThread(
44      scoped_ptr<storage::FileSystemOperationContext> context,
45      const storage::FileSystemURL& url,
46      const ReadDirectoryCallback& callback) OVERRIDE;
47  virtual void CreateSnapshotFileOnTaskRunnerThread(
48      scoped_ptr<storage::FileSystemOperationContext> context,
49      const storage::FileSystemURL& url,
50      const CreateSnapshotFileCallback& callback) OVERRIDE;
51  virtual base::File::Error GetFileInfoSync(
52      storage::FileSystemOperationContext* context,
53      const storage::FileSystemURL& url,
54      base::File::Info* file_info,
55      base::FilePath* platform_path) OVERRIDE;
56  virtual base::File::Error ReadDirectorySync(
57      storage::FileSystemOperationContext* context,
58      const storage::FileSystemURL& url,
59      EntryList* file_list) OVERRIDE;
60  virtual base::File::Error DeleteDirectorySync(
61      storage::FileSystemOperationContext* context,
62      const storage::FileSystemURL& url) OVERRIDE;
63  virtual base::File::Error DeleteFileSync(
64      storage::FileSystemOperationContext* context,
65      const storage::FileSystemURL& url) OVERRIDE;
66  virtual base::File::Error GetLocalFilePath(
67      storage::FileSystemOperationContext* context,
68      const storage::FileSystemURL& url,
69      base::FilePath* local_file_path) OVERRIDE;
70
71 private:
72  void GetFileInfoWithFreshDataProvider(
73      scoped_ptr<storage::FileSystemOperationContext> context,
74      const storage::FileSystemURL& url,
75      const GetFileInfoCallback& callback,
76      bool valid_parse);
77  void ReadDirectoryWithFreshDataProvider(
78      scoped_ptr<storage::FileSystemOperationContext> context,
79      const storage::FileSystemURL& url,
80      const ReadDirectoryCallback& callback,
81      bool valid_parse);
82  virtual void CreateSnapshotFileWithFreshDataProvider(
83      scoped_ptr<storage::FileSystemOperationContext> context,
84      const storage::FileSystemURL& url,
85      const CreateSnapshotFileCallback& callback,
86      bool valid_parse);
87
88  virtual IPhotoDataProvider* GetDataProvider();
89
90  base::WeakPtrFactory<IPhotoFileUtil> weak_factory_;
91
92  ImportedMediaGalleryRegistry* imported_registry_;
93
94  DISALLOW_COPY_AND_ASSIGN(IPhotoFileUtil);
95};
96
97}  // namespace iphoto
98
99#endif  // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_IPHOTO_FILE_UTIL_H_
100