190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_PICASA_FILE_UTIL_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_PICASA_FILE_UTIL_H_
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/scoped_ptr.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/weak_ptr.h"
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/native_media_file_util.h"
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace picasa {
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class PicasaDataProvider;
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)extern const char kPicasaDirAlbums[];
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)extern const char kPicasaDirFolders[];
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// PicasaFileUtil virtual directory structure example:
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//   - /albums/
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//   - /albums/albumname 2013-08-21/
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//   - /albums/albumname 2013-08-21/imagename.jpg
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//   - /albums/duplicatename 2013-08-21/
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//   - /albums/duplicatename 2013-08-21 (1)/
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//   - /folders/
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//   - /folders/My Pictures 2013-08-21/flower.jpg
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//   - /folders/Photos 2013-08-21/
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class PicasaFileUtil : public NativeMediaFileUtil {
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public:
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  explicit PicasaFileUtil(MediaPathFilter* media_path_filter);
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual ~PicasaFileUtil();
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected:
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // NativeMediaFileUtil overrides.
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void GetFileInfoOnTaskRunnerThread(
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      scoped_ptr<fileapi::FileSystemOperationContext> context,
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const fileapi::FileSystemURL& url,
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const GetFileInfoCallback& callback) OVERRIDE;
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void ReadDirectoryOnTaskRunnerThread(
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      scoped_ptr<fileapi::FileSystemOperationContext> context,
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const fileapi::FileSystemURL& url,
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const ReadDirectoryCallback& callback) OVERRIDE;
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::File::Error GetFileInfoSync(
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      fileapi::FileSystemOperationContext* context,
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const fileapi::FileSystemURL& url,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::File::Info* file_info,
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::FilePath* platform_path) OVERRIDE;
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::File::Error ReadDirectorySync(
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      fileapi::FileSystemOperationContext* context,
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      const fileapi::FileSystemURL& url,
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      EntryList* file_list) OVERRIDE;
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::File::Error DeleteDirectorySync(
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      fileapi::FileSystemOperationContext* context,
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const fileapi::FileSystemURL& url) OVERRIDE;
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::File::Error DeleteFileSync(
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      fileapi::FileSystemOperationContext* context,
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const fileapi::FileSystemURL& url) OVERRIDE;
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::File::Error GetLocalFilePath(
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      fileapi::FileSystemOperationContext* context,
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const fileapi::FileSystemURL& url,
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::FilePath* local_file_path) OVERRIDE;
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void GetFileInfoWithFreshDataProvider(
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      scoped_ptr<fileapi::FileSystemOperationContext> context,
667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const fileapi::FileSystemURL& url,
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const GetFileInfoCallback& callback,
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      bool success);
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void ReadDirectoryWithFreshDataProvider(
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      scoped_ptr<fileapi::FileSystemOperationContext> context,
717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const fileapi::FileSystemURL& url,
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const ReadDirectoryCallback& callback,
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      bool success);
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual PicasaDataProvider* GetDataProvider();
767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::WeakPtrFactory<PicasaFileUtil> weak_factory_;
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PicasaFileUtil);
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace picasa
8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_PICASA_FILE_UTIL_H_
85