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_PICASA_FILE_UTIL_H_
6#define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_PICASA_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
12namespace picasa {
13
14class PicasaDataProvider;
15
16extern const char kPicasaDirAlbums[];
17extern const char kPicasaDirFolders[];
18
19// PicasaFileUtil virtual directory structure example:
20//   - /albums/
21//   - /albums/albumname 2013-08-21/
22//   - /albums/albumname 2013-08-21/imagename.jpg
23//   - /albums/duplicatename 2013-08-21/
24//   - /albums/duplicatename 2013-08-21 (1)/
25//   - /folders/
26//   - /folders/My Pictures 2013-08-21/flower.jpg
27//   - /folders/Photos 2013-08-21/
28class PicasaFileUtil : public NativeMediaFileUtil {
29 public:
30  explicit PicasaFileUtil(MediaPathFilter* media_path_filter);
31  virtual ~PicasaFileUtil();
32
33 protected:
34  // NativeMediaFileUtil overrides.
35  virtual void GetFileInfoOnTaskRunnerThread(
36      scoped_ptr<storage::FileSystemOperationContext> context,
37      const storage::FileSystemURL& url,
38      const GetFileInfoCallback& callback) OVERRIDE;
39  virtual void ReadDirectoryOnTaskRunnerThread(
40      scoped_ptr<storage::FileSystemOperationContext> context,
41      const storage::FileSystemURL& url,
42      const ReadDirectoryCallback& callback) OVERRIDE;
43  virtual base::File::Error GetFileInfoSync(
44      storage::FileSystemOperationContext* context,
45      const storage::FileSystemURL& url,
46      base::File::Info* file_info,
47      base::FilePath* platform_path) OVERRIDE;
48  virtual base::File::Error ReadDirectorySync(
49      storage::FileSystemOperationContext* context,
50      const storage::FileSystemURL& url,
51      EntryList* file_list) OVERRIDE;
52  virtual base::File::Error DeleteDirectorySync(
53      storage::FileSystemOperationContext* context,
54      const storage::FileSystemURL& url) OVERRIDE;
55  virtual base::File::Error DeleteFileSync(
56      storage::FileSystemOperationContext* context,
57      const storage::FileSystemURL& url) OVERRIDE;
58  virtual base::File::Error GetLocalFilePath(
59      storage::FileSystemOperationContext* context,
60      const storage::FileSystemURL& url,
61      base::FilePath* local_file_path) OVERRIDE;
62
63 private:
64  void GetFileInfoWithFreshDataProvider(
65      scoped_ptr<storage::FileSystemOperationContext> context,
66      const storage::FileSystemURL& url,
67      const GetFileInfoCallback& callback,
68      bool success);
69  void ReadDirectoryWithFreshDataProvider(
70      scoped_ptr<storage::FileSystemOperationContext> context,
71      const storage::FileSystemURL& url,
72      const ReadDirectoryCallback& callback,
73      bool success);
74
75  virtual PicasaDataProvider* GetDataProvider();
76
77  base::WeakPtrFactory<PicasaFileUtil> weak_factory_;
78
79  DISALLOW_COPY_AND_ASSIGN(PicasaFileUtil);
80};
81
82}  // namespace picasa
83
84#endif  // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_PICASA_FILE_UTIL_H_
85