Exemple #1
0
    TeaSafe::SharedTeaSafeFolder
    TeaSafe::doGetParentTeaSafeFolder(std::string const &path) const
    {
        boost::filesystem::path pathToCheck(path);
        if (pathToCheck.parent_path().string() == "/") {
            return m_rootFolder;
        }

        pathToCheck = pathToCheck.relative_path().parent_path();

        // prefer to pull out of cache if it exists
        FolderCache::const_iterator cacheIt = m_folderCache.find(pathToCheck.string());
        if (cacheIt != m_folderCache.end()) {
            return cacheIt->second;
        }


        // iterate over path parts extracting sub folders along the way
        boost::filesystem::path::iterator it = pathToCheck.begin();
        TeaSafeFolder folderOfInterest = *m_rootFolder;
        boost::filesystem::path pathBuilder;
        for (; it != pathToCheck.end(); ++it) {

            SharedEntryInfo entryInfo = folderOfInterest.getEntryInfo(it->string());

            if (!entryInfo) {
                return SharedTeaSafeFolder();
            }

            pathBuilder /= entryInfo->filename();

            if (pathBuilder == pathToCheck) {

                if (entryInfo->type() == EntryType::FolderType) {
                    SharedTeaSafeFolder folder(boost::make_shared<TeaSafeFolder>(folderOfInterest.getTeaSafeFolder(entryInfo->filename())));
                    m_folderCache.insert(std::make_pair(pathToCheck.string(), folder));
                    return folder;
                } else {
                    return SharedTeaSafeFolder();
                }
            }
            // recurse deeper
            folderOfInterest = folderOfInterest.getTeaSafeFolder(entryInfo->filename());
        }


        return SharedTeaSafeFolder();

    }
Exemple #2
0
    TeaSafe::SharedCompoundFolder
    TeaSafe::doGetParentCompoundFolder(std::string const &path) const
    {
        boost::filesystem::path pathToCheck(path);
        if (pathToCheck.parent_path().string() == "/") {
            return m_rootFolder;
        }

        pathToCheck = pathToCheck.relative_path().parent_path();

        // prefer to pull out of cache if it exists
        auto cacheIt(m_folderCache.find(pathToCheck.string()));
        if (cacheIt != m_folderCache.end()) {
            return cacheIt->second;
        }

        // iterate over path parts extracting sub folders along the way
        auto folderOfInterest(m_rootFolder);
        boost::filesystem::path pathBuilder;
        for (auto const & it : pathToCheck) {

            SharedEntryInfo entryInfo(folderOfInterest->getEntryInfo(it.string()));

            if (!entryInfo) {
                return SharedCompoundFolder();
            }

            pathBuilder /= entryInfo->filename();

            if (pathBuilder == pathToCheck) {

                if (entryInfo->type() == EntryType::FolderType) {
                    auto folder(folderOfInterest->getFolder(entryInfo->filename()));
                    m_folderCache.insert(std::make_pair(pathToCheck.string(), folder));
                    return folder;
                } else {
                    return SharedCompoundFolder();
                }
            }
            // recurse deeper
            folderOfInterest = folderOfInterest->getFolder(entryInfo->filename());
        }


        return SharedCompoundFolder();

    }