예제 #1
0
void WebDavInventoryDataModel::FetchRootFolder()
{
    webdavclient_ = pythonQtMainModule_.evalScript("connection.WebDavClient()\n", Py_eval_input);
    if (!webdavclient_)
    {
        ErrorOccurredCreateEmptyRootFolder();
        return;
    }

    // Set urls
    webdavclient_.call("setHostAndUser", QVariantList() << webdavIdentityUrl_ << webdavUrl_);
    // Connect to webdav
    webdavclient_.call("setupConnection");
    // Fetch root resources
    QStringList rootResources = webdavclient_.call("listResources").toStringList();
    if (rootResources.count() < 1)
    {
        ErrorOccurredCreateEmptyRootFolder();
        return;
    }

    QMap<QString, QString> folders;
    InventoryFolder *parentFolder;
    for (int index=0; index<=rootResources.count(); index++)
    {
        folders[rootResources.value(index)] = rootResources.value(index+1);
        index++;
    }

    if (!rootFolder_)
    {
        rootFolder_ = new InventoryFolder("root", "Webdav Inventory", false, 0);
        parentFolder = new InventoryFolder("", QString("My Inventory"), false, rootFolder_);
        rootFolder_->AddChild(parentFolder);
        rootFolder_->SetDirty(true);
    }

    AbstractInventoryItem *newItem = 0;
    QString path;
    QString name;
    QString type;

    for (QMap<QString, QString>::iterator iter = folders.begin(); iter!=folders.end(); ++iter)
    {
        path = iter.key();
        name = path.midRef(0, path.lastIndexOf("/")).toString();
        name = path.midRef(path.lastIndexOf("/")).toString();
        type = iter.value();
        if (name != "")
        {
            if (type == "resource")
                newItem = new InventoryAsset(path, "", name, parentFolder);
            else
                newItem = new InventoryFolder(path, name, parentFolder, true);
            parentFolder->AddChild(newItem);
        }
    }
}
예제 #2
0
bool WebDavInventoryDataModel::FetchInventoryDescendents(AbstractInventoryItem *item)
{
    InventoryFolder *selected = dynamic_cast<InventoryFolder *>(item);
    if (!selected)
        return false;

    // Delete children
    selected->GetChildren().clear();

    QString itemPath = selected->GetID();
    QStringList children = webdavclient_.call("listResources", QVariantList() << itemPath).toStringList();
    if ( children.count() >=1 )
    {
        // Process child list to map
        QMap<QString, QString> childMap;
        for (int index=0; index<=children.count(); index++)
        {
            childMap[children.value(index)] = children.value(index+1);
            index++;
        }

        AbstractInventoryItem *newItem = 0;
        QString path, name, type;
        for (QMap<QString, QString>::iterator iter = childMap.begin(); iter!=childMap.end(); ++iter)
        {
            path = iter.key();
            name = path.midRef(path.lastIndexOf("/")+1).toString();
            type = iter.value();
            if (name != "")
            {
                if (type == "resource")
                    newItem = new InventoryAsset(path, "", name, selected);
                else
                    newItem = new InventoryFolder(path, name, selected, true);
                selected->AddChild(newItem);
            }
        }

        InventoryModule::LogInfo(QString("Webdav | Fetched %1 children to path /%2").arg(QString::number(childMap.count()), itemPath).toStdString());
    }

    return true;
}