Mercurial > hg > orthanc
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(); + } }