1
0
This repository has been archived on 2025-07-27. You can view files and clone it, but cannot push or open issues or pull requests.
Files
siadrive/src/siadrive_api/siafiletree.cpp
Scott E. Graves 7c1c1b46c4 Fixing stuff
2017-04-03 23:19:44 -05:00

93 lines
2.3 KiB
C++

#include <siaapi.h>
#include <regex>
#include <filepath.h>
using namespace Sia::Api;
CSiaApi::_CSiaFileTree::_CSiaFileTree(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) :
CSiaBase(siaCurl, siaDriveConfig)
{
}
CSiaApi::_CSiaFileTree::~_CSiaFileTree()
{
}
void CSiaApi::_CSiaFileTree::BuildTree(const json& result)
{
CSiaFileCollectionPtr fileList(new CSiaFileCollection());
for (const auto& file : result["files"])
{
fileList->push_back(CSiaFilePtr(new CSiaFile(GetSiaCurl(), &GetSiaDriveConfig(), file)));
}
_fileList = fileList;
}
bool CSiaApi::_CSiaFileTree::FileExists(const SString& siaPath) const
{
auto fileList = GetFileList();
auto result = std::find_if(fileList->begin(), fileList->end(), [&](const CSiaFilePtr& item)->bool
{
return (item->GetSiaPath() == siaPath);
});
return (result != fileList->end());
}
CSiaFileCollectionPtr CSiaApi::_CSiaFileTree::GetFileList() const
{
return _fileList;
}
CSiaFilePtr CSiaApi::_CSiaFileTree::GetFile(const SString& siaPath) const
{
auto fileList = GetFileList();
auto result = std::find_if(fileList->begin(), fileList->end(), [&](const CSiaFilePtr& item)->bool
{
return (item->GetSiaPath() == siaPath);
});
return ((result != fileList->end()) ? *result : nullptr);
}
CSiaFileCollection CSiaApi::_CSiaFileTree::Query(SString query) const
{
auto fileList = GetFileList();
query = CSiaApi::FormatToSiaPath(query);
query.Replace(".", "\\.").Replace("*", "[^/]+").Replace("?", "[^/]?");
std::wregex r(query.str());
CSiaFileCollection ret;
std::copy_if(fileList->begin(), fileList->end(), std::back_inserter(ret), [&](const CSiaFilePtr& v) -> bool
{
return std::regex_match(v->GetSiaPath().str(), r);
});
return std::move(ret);
}
std::vector<SString> CSiaApi::_CSiaFileTree::QueryDirectories(SString rootFolder) const
{
auto fileList = GetFileList();
CSiaFileCollection col;
rootFolder.Replace("/", "\\");
std::vector<SString> ret;
std::for_each(fileList->begin(), fileList->end(), [&](const CSiaFilePtr& v)
{
SString path = ("\\" + FilePath(v->GetSiaPath()).RemoveFileName()).Replace("/", "\\");
if (path.BeginsWith(rootFolder))
{
path = path.SubString(1, rootFolder.Length());
if (path.Length())
{
}
}
});
return std::move(ret);
}