void SM_QDropbox::requestDelta(QString cursor, QString path_prefix, bool blocking) { clearError(); timestamp = QDateTime::currentMSecsSinceEpoch()/1000; QUrl url; url.setUrl(apiurl.toString()); QUrlQuery urlQuery; urlQuery.addQueryItem("oauth_consumer_key",_appKey); urlQuery.addQueryItem("oauth_nonce", nonce); urlQuery.addQueryItem("oauth_signature_method", signatureMethodString()); urlQuery.addQueryItem("oauth_timestamp", QString::number(timestamp)); urlQuery.addQueryItem("oauth_token", oauthToken); urlQuery.addQueryItem("oauth_version", _version); if(cursor.length() > 0) { urlQuery.addQueryItem("cursor", cursor); } if(path_prefix.length() > 0) { urlQuery.addQueryItem("path_prefix", path_prefix); } QString signature = oAuthSign(url); urlQuery.addQueryItem("oauth_signature", QUrl::toPercentEncoding(signature)); url.setQuery(urlQuery); url.setPath(QString("/%1/delta").arg(_version.left(1))); QString dataString = url.toString(QUrl::RemoveScheme|QUrl::RemoveAuthority| QUrl::RemovePath).mid(1); #ifdef SM_QTDROPBOX_DEBUG qDebug() << "dataString = " << dataString << endl; #endif QByteArray postData; postData.append(dataString.toUtf8()); QUrl xQuery(url.toString(QUrl::RemoveQuery)); int reqnr = sendRequest(xQuery, "POST", postData); if(blocking) { requestMap[reqnr].type = SM_DROPBOX_REQ_BDELTA; startEventLoop(); } else requestMap[reqnr].type = SM_DROPBOX_REQ_DELTA; return; }
int SM_QDropbox::requestAccessToken(bool blocking) { clearError(); QUrl url; url.setUrl(apiurl.toString()); QUrlQuery query; query.addQueryItem("oauth_consumer_key",_appKey); query.addQueryItem("oauth_nonce", nonce); query.addQueryItem("oauth_signature_method", signatureMethodString()); query.addQueryItem("oauth_timestamp", QString::number(timestamp)); query.addQueryItem("oauth_token", oauthToken); query.addQueryItem("oauth_version", _version); url.setPath(QString("/%1/oauth/access_token"). arg(_version.left(1))); #ifdef SM_QTDROPBOX_DEBUG qDebug() << "requestToken = " << query.queryItemValue("oauth_token"); #endif QString signature = oAuthSign(url); query.addQueryItem("oauth_signature", QUrl::toPercentEncoding(signature)); url.setQuery(query); QString dataString = url.toString(QUrl::RemoveScheme|QUrl::RemoveAuthority| QUrl::RemovePath).mid(1); #ifdef SM_QTDROPBOX_DEBUG qDebug() << "dataString = " << dataString << endl; #endif QByteArray postData; postData.append(dataString.toUtf8()); QUrl xQuery(url.toString(QUrl::RemoveQuery)); int reqnr = sendRequest(xQuery, "POST", postData); if(blocking) { requestMap[reqnr].type = SM_DROPBOX_REQ_BACCTOK; startEventLoop(); } else requestMap[reqnr].type = SM_DROPBOX_REQ_ACCTOKN; return reqnr; }
QStringList ExternalPlaylist::executeXmlQuery(const QString& filePath, const QString& xPath, const QStringList& parameters){ QStringList results; // initialise Xerces-C and XQilla using XQillaPlatformUtils try{ XQillaPlatformUtils::initialize(); }catch (const xercesc_3_1::XMLException& eXerces){ qDebug("Xerces exception message: %s", UTF8(eXerces.getMessage())); return results; } // get the XQilla DOMImplementation object xercesc_3_1::DOMImplementation *xqillaImplementation = xercesc_3_1::DOMImplementationRegistry::getDOMImplementation(X("XPath2 3.0")); try{ // create a DOMLSParser object AutoDelete<xercesc_3_1::DOMLSParser> parser(xqillaImplementation->createLSParser(xercesc_3_1::DOMImplementationLS::MODE_SYNCHRONOUS, 0)); // disable remote DTD resolution parser->getDomConfig()->setParameter(xercesc_3_1::XMLUni::fgXercesLoadExternalDTD, false); // parse the XML document xercesc_3_1::DOMDocument *document = parser->parseURI(X(filePath.toLocal8Bit().constData())); if(document == 0) throw XQillaException(99,X("No XML document found")); // determine whether to use lightweight query model if(parameters.isEmpty()){ // parse XPath AutoRelease<xercesc_3_1::DOMXPathExpression> expression(document->createExpression(X(xPath.toLocal8Bit().constData()), 0)); // execute query AutoRelease<xercesc_3_1::DOMXPathResult> result(expression->evaluate(document, xercesc_3_1::DOMXPathResult::ITERATOR_RESULT_TYPE, 0)); // iterate over results while(result->iterateNext()) results.push_back(QString::fromUtf8(UTF8(result->getNodeValue()->getTextContent()))); }else{ // set up a simple API query and context to evaluate the parsed document XQilla xqilla; AutoDelete<XQQuery> xQuery(xqilla.parse(X(xPath.toLocal8Bit().constData()))); AutoDelete<DynamicContext> xQueryContext(xQuery->createDynamicContext()); // grab document from xerces API XercesConfiguration xc; Node::Ptr node = xc.createNode(document, xQueryContext.get()); // prepare context if(node && node->isNode()){ xQueryContext->setContextItem(node); xQueryContext->setContextPosition(1); xQueryContext->setContextSize(1); // bind variables for(int i=0; i<(signed)parameters.size(); i += 2){ if(i + 1 >= (signed)parameters.size()) break; Item::Ptr value = xQueryContext->getItemFactory()->createString(X(parameters[i+1].toLocal8Bit().constData()), xQueryContext.get()); xQueryContext->setExternalVariable(X(parameters[i].toLocal8Bit().constData()), value); } } // execute query Result xQueryResults = xQuery->execute(xQueryContext); // iterate over results Item::Ptr item; while(item = xQueryResults->next(xQueryContext)) { results.push_back(QString::fromUtf8(UTF8(item->asString(xQueryContext)))); } } }catch(XQillaException &e){ // DOM3 (xerces) API qDebug("XQillaException: %s", UTF8(e.getString())); }catch(XQException &e){ // Simple API qDebug("XQillaException: %s", UTF8(e.getError())); }catch(...){ qDebug("Unspecified exception with XQilla"); } // Terminate Xerces-C and XQilla using XQillaPlatformUtils XQillaPlatformUtils::terminate(); return results; }