Chromium Code Reviews| Index: chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h |
| diff --git a/chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h b/chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h |
| index 5109b5b70ab288a00b92e2746b087427f56b33e9..30092db972b6a58991c0521c325f21ceff92bf9d 100644 |
| --- a/chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h |
| +++ b/chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h |
| @@ -6,10 +6,11 @@ |
| #define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_PICASA_PICASA_DATA_PROVIDER_H_ |
| #include <map> |
| +#include <queue> |
| #include <string> |
| #include <vector> |
| -#include "base/callback_forward.h" |
| +#include "base/callback.h" |
| #include "base/files/file_path.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| @@ -20,43 +21,79 @@ |
| namespace picasa { |
| class SafePicasaAlbumTableReader; |
| +class SafePicasaAlbumsIndexer; |
| // Created and owned by ImportedMediaGalleryRegistryTaskRunnerValues |
| class PicasaDataProvider { |
| public: |
| + typedef base::Callback<void(bool)> ReadyCallback; |
| + |
| + enum DataType { |
| + LIST_OF_ALBUMS_AND_FOLDERS_DATA, |
| + ALBUMS_IMAGES_DATA |
| + }; |
| + |
| explicit PicasaDataProvider(const base::FilePath& database_path); |
| virtual ~PicasaDataProvider(); |
| // Ask the data provider to refresh the data if necessary. |ready_callback| |
| - // will be called when the data is up to date |
| + // will be called when the data is up to date. |refresh_album_contents| |
| + // is true if the caller wants the album contents also. |
|
vandebo (ex-Chrome)
2013/07/12 18:29:59
"is true" - needs updating.
tommycli
2013/07/12 21:37:19
Done.
|
| // TODO(tommycli): Investigate having the callback return a bool indicating |
| // success or failure - and handling it intelligently in PicasaFileUtil. |
| - void RefreshData(const base::Closure& ready_callback); |
| + void RefreshData(DataType needed_data, const ReadyCallback& ready_callback); |
| + // These methods return scoped_ptrs because we want to return a copy that |
| + // will not change to the caller. |
| scoped_ptr<AlbumMap> GetAlbums(); |
| scoped_ptr<AlbumMap> GetFolders(); |
| - // TODO(tommycli): Implement album contents. GetAlbumContents(...) |
| - |
| - protected: |
| - // Protected for test class usage. |
| - void OnDataRefreshed(const base::Closure& ready_callback, |
| - bool parse_success, const std::vector<AlbumInfo>& albums, |
| - const std::vector<AlbumInfo>& folder); |
| + scoped_ptr<AlbumImagesMap> GetAlbumsImages(); |
| private: |
| + enum State { |
| + STALE_DATA_STATE, |
| + ALBUM_LIST_FRESH_STATE, |
| + ALBUMS_IMAGES_FRESH_STATE |
| + }; |
| + |
| friend class PicasaFileUtilTest; |
| + // Notifies data provider that any currently cached data is stale. |
| + void InvalidateData(); |
| + |
| + void StartAlbumListRefreshIfNecessary(); |
| + void StartAlbumsImagesRefreshIfNecessary(); |
| + |
| + void OnAlbumListRefreshed(scoped_refptr<SafePicasaAlbumTableReader> reader, |
| + bool parse_success, |
| + const std::vector<AlbumInfo>& albums, |
| + const std::vector<AlbumInfo>& folder); |
| + |
| + void OnAlbumsIndexerDone(scoped_refptr<SafePicasaAlbumsIndexer> indexer, |
| + bool success, |
| + const picasa::AlbumImagesMap& albums_images); |
| + |
| static std::string DateToPathString(const base::Time& time); |
| static void UniquifyNames(const std::vector<AlbumInfo>& info_list, |
| AlbumMap* result_map); |
| AlbumMap album_map_; |
| AlbumMap folder_map_; |
| + AlbumImagesMap albums_images_; |
| base::FilePath database_path_; |
| - bool needs_refresh_; |
| + State data_state_; |
|
vandebo (ex-Chrome)
2013/07/12 18:29:59
data_state_ -> state_ ?
tommycli
2013/07/12 21:37:19
Done.
|
| + |
| + // Callbacks that are waiting for their requested data to be ready. |
| + std::queue<ReadyCallback> album_list_ready_callbacks_; |
| + std::queue<ReadyCallback> albums_indexer_ready_callbacks_; |
| + |
| + // Stores the "live" in-flight utility processes. Callbacks from other |
| + // (older) utility processes are stale and ignored. Only one of these should |
| + // ever be non-NULL. |
| scoped_refptr<SafePicasaAlbumTableReader> album_table_reader_; |
| + scoped_refptr<SafePicasaAlbumsIndexer> albums_indexer_; |
| base::WeakPtrFactory<PicasaDataProvider> weak_factory_; |