Exemple #1
0
void SFtpFileEngine::initSFtp()
{
    _fileInfoCache = FtpFileInfoCache::getInstance();

    QString cacheEntry(getCachePath(_path));

    QUrlInfo urlInfo = _fileInfoCache->findFileInfo(cacheEntry);
    if (urlInfo.isValid())
    {
        // non-existent file ?
        if (urlInfo.permissions() == 0)
        {
            _fileFlags = QAbstractFileEngine::FileType;

            return;
        }

        _fileFlags = QAbstractFileEngine::ExistsFlag;

        _fileFlags |= urlInfo.isDir() ? QAbstractFileEngine::DirectoryType :
                                        QAbstractFileEngine::FileType;

        if (_path == "/")
            _fileFlags |= QAbstractFileEngine::RootFlag;

        _fileFlags |= QAbstractFileEngine::FileFlag(urlInfo.permissions());

        _urlInfo = urlInfo;

        return;
    }

    refreshFileInfoCache();
}
Exemple #2
0
QAbstractFileEngine::Iterator*
SFtpFileEngine::beginEntryList(QDir::Filters filters,
                              const QStringList &filterNames)
{
    qDebug() << "beginEntryList() : " << _fileName << _fileFlags;

    QString cachePath(getCachePath(_path, true));
    FtpFileInfoCache::QUrlInfoList list =
            _fileInfoCache->findDirInfo(cachePath);

    if (list.size() == 0
            && (_fileFlags & QAbstractFileEngine::DirectoryType)
            && sftpConnect())
    {
        readDir(_path);

        sftpDisconnect();
    }

    QMap<QString, QUrlInfo> entriesMap;

    list = _fileInfoCache->findDirInfo(cachePath);
    if (list.size() > 0)
    {
        FtpFileInfoCache::QUrlInfoListIterator it(list);
        while (it.hasNext())
        {
            QUrlInfo urlInfo = it.next();

            // exclude an empty entry inserted by us and a non-existent entry
            if (urlInfo.isValid() && urlInfo.permissions())
                entriesMap.insert(urlInfo.name(), urlInfo);
        }
    }

    return new FtpFileEngineIterator(filters, filterNames,
                                     filterEntries(filters, filterNames,
                                                   entriesMap));
}