[Filesystem] Fix addStorageStateChangeListener method
authorPiotr Czaja <p.czaja@samsung.com>
Wed, 20 May 2015 09:25:52 +0000 (11:25 +0200)
committerPiotr Czaja <p.czaja@samsung.com>
Wed, 20 May 2015 13:20:23 +0000 (15:20 +0200)
[Verification] Following TCT are fixed:
- FileSystemManager_addStorageStateChangeListener
- FileSystemManager_addStorageStateChangeListener_with_onerror
- FileSystemManager_removeStorageStateChangeListener

Change-Id: I799686ee07c0481cb2d93f12fc90de67aa104494
Signed-off-by: Piotr Czaja <p.czaja@samsung.com>
src/filesystem/filesystem_instance.cc
src/filesystem/filesystem_manager.cc
src/filesystem/filesystem_manager.h

index 3bc2de06becc663a5a43b80daf43c99608c424e0..439fc2ccc704a17672ff2c2cf2708d93ed1f7735 100644 (file)
@@ -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)) {                                              \
index 8fbe22d7a03cac151187819e31662c4115f5ce14..aad70f71a2ae819b616bc5953be745e360c7e030 100644 (file)
@@ -192,17 +192,23 @@ FilesystemError make_directory_worker(const std::string& path) {
 }
 }  // namespace
 
+std::vector<common::VirtualStorage> 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<void(const std::vector<common::VirtualStorage>&)>& success_cb,
     const std::function<void(FilesystemError)>& 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
index 35fea04043007ee0c2cb7aafb65ede930a025df3..2880361b07670c6d5221dfa610b3d8fe57fed5b5 100644 (file)
@@ -47,6 +47,7 @@ class FilesystemManager {
                 const std::function<void(const FilesystemStat&)>& success_cb,
                 const std::function<void(FilesystemError)>& error_cb);
 
+  std::vector<common::VirtualStorage> FillStorages();
   void FetchStorages(
       const std::function<void(const std::vector<common::VirtualStorage>&)>& success_cb,
       const std::function<void(FilesystemError)>& 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