From 649f806daab3bf57cd9e5c831073276c7dbb344e Mon Sep 17 00:00:00 2001 From: Piotr Czaja Date: Wed, 20 May 2015 11:25:52 +0200 Subject: [PATCH] [Filesystem] Fix addStorageStateChangeListener method [Verification] Following TCT are fixed: - FileSystemManager_addStorageStateChangeListener - FileSystemManager_addStorageStateChangeListener_with_onerror - FileSystemManager_removeStorageStateChangeListener Change-Id: I799686ee07c0481cb2d93f12fc90de67aa104494 Signed-off-by: Piotr Czaja --- src/filesystem/filesystem_instance.cc | 6 +++++- src/filesystem/filesystem_manager.cc | 28 +++++++++++++++++++-------- src/filesystem/filesystem_manager.h | 2 ++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/filesystem/filesystem_instance.cc b/src/filesystem/filesystem_instance.cc index 3bc2de06..439fc2cc 100644 --- a/src/filesystem/filesystem_instance.cc +++ b/src/filesystem/filesystem_instance.cc @@ -60,7 +60,11 @@ FilesystemInstance::FilesystemInstance() { FilesystemManager::GetInstance().AddListener(this); } -FilesystemInstance::~FilesystemInstance() {} +FilesystemInstance::~FilesystemInstance() { + LoggerD("enter"); + FilesystemManager::GetInstance().StopListening(); + FilesystemManager::GetInstance().RemoveListener(); +} #define CHECK_EXIST(args, name, out) \ if (!args.contains(name)) { \ diff --git a/src/filesystem/filesystem_manager.cc b/src/filesystem/filesystem_manager.cc index 8fbe22d7..aad70f71 100644 --- a/src/filesystem/filesystem_manager.cc +++ b/src/filesystem/filesystem_manager.cc @@ -192,17 +192,23 @@ FilesystemError make_directory_worker(const std::string& path) { } } // namespace +std::vector FilesystemManager::FillStorages() { + LoggerD("entered"); + auto virtualStorages = common::VirtualFs::GetInstance().GetStorages(); + if (ids_.empty()) { + for (auto storage : virtualStorages) { + if (storage.id_ >= 0) { + ids_.insert(storage.id_); + } + } + } + return virtualStorages; +} + void FilesystemManager::FetchStorages( const std::function&)>& success_cb, const std::function& error_cb) { - auto result = common::VirtualFs::GetInstance().GetStorages(); - - for (auto storage : result) { - if (storage.id_ >= 0) { - ids_.insert(storage.id_); - } - } - + auto result = FillStorages(); success_cb(result); } @@ -398,6 +404,7 @@ void FilesystemManager::FileWrite( void FilesystemManager::StartListening() { LoggerD("enter"); + FillStorages(); if (!is_listener_registered_ && !ids_.empty()) { int result = STORAGE_ERROR_NONE; @@ -452,5 +459,10 @@ void FilesystemManager::AddListener(FilesystemStateChangeListener* listener) { LoggerD("enter"); listener_ = listener; } + +void FilesystemManager::RemoveListener() { + LoggerD("enter"); + listener_ = NULL; +} } // namespace filesystem } // namespace extension diff --git a/src/filesystem/filesystem_manager.h b/src/filesystem/filesystem_manager.h index 35fea040..2880361b 100644 --- a/src/filesystem/filesystem_manager.h +++ b/src/filesystem/filesystem_manager.h @@ -47,6 +47,7 @@ class FilesystemManager { const std::function& success_cb, const std::function& error_cb); + std::vector FillStorages(); void FetchStorages( const std::function&)>& success_cb, const std::function& error_cb); @@ -98,6 +99,7 @@ void CopyTo(const std::string& originFilePath, void StartListening(); void StopListening(); void AddListener(FilesystemStateChangeListener* listener); + void RemoveListener(); }; } // namespace filesystem } // namespace extension -- 2.34.1