Index: chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.cc |
diff --git a/chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.cc b/chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.cc |
index 1baa46038f476323443ebccc4847b22747b70889..b4a2df4b7479b11a0809abe8c2cc31fa3b9ed759 100644 |
--- a/chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.cc |
+++ b/chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.cc |
@@ -8,7 +8,10 @@ |
#include "base/basictypes.h" |
#include "base/bind_helpers.h" |
+#include "base/callback.h" |
+#include "base/file_util.h" |
#include "base/strings/stringprintf.h" |
+#include "chrome/browser/media_galleries/fileapi/data_provider_helper.h" |
#include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" |
#include "chrome/browser/media_galleries/fileapi/safe_picasa_album_table_reader.h" |
#include "chrome/browser/media_galleries/fileapi/safe_picasa_albums_indexer.h" |
@@ -22,6 +25,8 @@ namespace picasa { |
namespace { |
+const char kPicasaTempDirName[] = "tmp"; |
+ |
void RunAllCallbacks( |
std::queue<PicasaDataProvider::ReadyCallback>* ready_callbacks_queue, |
bool success) { |
@@ -38,6 +43,30 @@ PicasaDataProvider::PicasaDataProvider(const base::FilePath& database_path) |
state_(STALE_DATA_STATE), |
weak_factory_(this) { |
DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); |
+ |
+ chrome::StartFilePathWatchOnMediaTaskRunner( |
+ database_path_.DirName().AppendASCII(kPicasaTempDirName), |
+ true /* recursive */, |
+ base::Bind(&PicasaDataProvider::OnTempDirWatchStarted, |
+ weak_factory_.GetWeakPtr()), |
+ base::Bind(&PicasaDataProvider::OnTempDirChanged, |
+ weak_factory_.GetWeakPtr())); |
+} |
+ |
+PicasaDataProvider::PicasaDataProvider(const base::FilePath& database_path, |
+ const base::FilePath& temp_dir_path) |
+ : database_path_(database_path), |
+ state_(STALE_DATA_STATE), |
+ weak_factory_(this) { |
+ DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); |
+ |
+ chrome::StartFilePathWatchOnMediaTaskRunner( |
+ temp_dir_path, |
+ true /* recursive */, |
+ base::Bind(&PicasaDataProvider::OnTempDirWatchStarted, |
+ weak_factory_.GetWeakPtr()), |
+ base::Bind(&PicasaDataProvider::OnTempDirChanged, |
+ weak_factory_.GetWeakPtr())); |
} |
PicasaDataProvider::~PicasaDataProvider() {} |
@@ -115,6 +144,19 @@ void PicasaDataProvider::InvalidateData() { |
DoRefreshIfNecessary(); |
} |
+void PicasaDataProvider::OnTempDirWatchStarted( |
+ scoped_ptr<base::FilePathWatcher> temp_dir_watcher) { |
+ DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); |
+ temp_dir_watcher_.reset(temp_dir_watcher.release()); |
+} |
+ |
+void PicasaDataProvider::OnTempDirChanged(const base::FilePath& temp_dir_path, |
+ bool error) { |
+ DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); |
+ if (file_util::IsDirectoryEmpty(temp_dir_path)) |
+ InvalidateData(); |
+} |
+ |
void PicasaDataProvider::DoRefreshIfNecessary() { |
DCHECK(state_ != INVALID_DATA_STATE); |
DCHECK(state_ != ALBUMS_IMAGES_FRESH_STATE); |
@@ -240,15 +282,4 @@ void PicasaDataProvider::UniquifyNames(const std::vector<AlbumInfo>& info_list, |
} |
} |
-void PicasaDataProvider::SetDatabasePathForTesting( |
- const base::FilePath& database_path) { |
- database_path_ = database_path; |
-} |
- |
-void PicasaDataProvider::SetAlbumMapsForTesting(const AlbumMap& album_map, |
- const AlbumMap& folder_map) { |
- album_map_ = album_map; |
- folder_map_ = folder_map; |
-} |
- |
} // namespace picasa |