diff OrthancFramework/Sources/HttpServer/WebDavStorage.cpp @ 4239:c8754c4c1862

upload DICOM using WebDAV
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 09 Oct 2020 11:38:03 +0200
parents ca2a55a62c81
children 50b0c69b653a
line wrap: on
line diff
--- a/OrthancFramework/Sources/HttpServer/WebDavStorage.cpp	Fri Oct 09 10:28:34 2020 +0200
+++ b/OrthancFramework/Sources/HttpServer/WebDavStorage.cpp	Fri Oct 09 11:38:03 2020 +0200
@@ -160,6 +160,11 @@
       }        
     }
 
+    size_t GetSize() const
+    {
+      return files_.size() + subfolders_.size();
+    }
+
     const boost::posix_time::ptime& GetModificationTime() const
     {
       return time_;
@@ -327,6 +332,33 @@
         }
       }
     }
+
+
+    void RemoveEmptyFolders()
+    {
+      std::list<std::string> emptyFolders;
+      
+      for (Subfolders::const_iterator it = subfolders_.begin(); it != subfolders_.end(); ++it)
+      {
+        assert(it->second != NULL);
+        it->second->RemoveEmptyFolders();
+
+        if (it->second->GetSize() == 0)
+        {
+          assert(it->second != NULL);
+          delete it->second;
+          
+          emptyFolders.push_back(it->first);
+        }
+      }
+
+      for (std::list<std::string>::const_iterator it = emptyFolders.begin();
+           it != emptyFolders.end(); ++it)
+      {
+        assert(subfolders_.find(*it) != subfolders_.end());
+        subfolders_.erase(*it);
+      }
+    }
   };
 
 
@@ -459,4 +491,11 @@
       return root_->DeleteItem(path);
     }
   }
+
+
+  void WebDavStorage::RemoveEmptyFolders()
+  {
+    boost::recursive_mutex::scoped_lock lock(mutex_);
+    root_->RemoveEmptyFolders();
+  }
 }