#include "StdAfx.h" #include "SiaApi.h" #include 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) { _fileList.clear(); for (const auto& file : result["files"]) { _fileList.push_back(CSiaFilePtr(new CSiaFile(GetSiaCurl(), &GetSiaDriveConfig(), file))); } } bool CSiaApi::_CSiaFileTree::FileExists(const String& siaPath) const { auto result = std::find_if(_fileList.begin(), _fileList.end(), [&](const CSiaFilePtr& item)->bool { return (item->GetSiaPath().compare(siaPath) == 0); }); return (result != _fileList.end()); } CSiaFileCollection CSiaApi::_CSiaFileTree::GetFileList() const { return _fileList; } CSiaFilePtr CSiaApi::_CSiaFileTree::GetFile(const String& siaPath) const { auto result = std::find_if(_fileList.begin(), _fileList.end(), [&](const CSiaFilePtr& item)->bool { return (item->GetSiaPath().compare(siaPath) == 0); }); return ((result != _fileList.end()) ? *result : nullptr); } CSiaFileCollection CSiaApi::_CSiaFileTree::Query(String query) const { query = CSiaApi::FormatToSiaPath(query); ReplaceStringInPlace(ReplaceStringInPlace(ReplaceStringInPlace(query, L".", L"\\."), L"*", L".+"), L"?", L".?"); std::wregex r(query); CSiaFileCollection ret; std::copy_if(_fileList.begin(), _fileList.end(), std::back_inserter(ret), [&](const CSiaFilePtr& v) -> bool { return std::regex_match(v->GetSiaPath(), r); }); return std::move(ret); }