Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Unified Diff: chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.cc

Issue 23499006: Media Galleries API Picasa: Add file watch to invalidate database data on disk write. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698