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