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); } } }
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; }