[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/libs/webtech/lokarest
From:       Josef Spillner <spillner () kde ! org>
Date:       2008-10-13 20:43:22
Message-ID: 1223930602.232112.24931.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 871065 by josef:

- always return the content-type as part of the metadata, and make use of it
- prepare a working PUT and POST test case



 M  +6 -2      demo/testlokarest.cpp  
 M  +20 -11    lokarest/lokarest.cpp  
 M  +1 -1      lokarest/lokarest.h  
 M  +5 -3      patches/kio_http.diff  


--- trunk/playground/libs/webtech/lokarest/demo/testlokarest.cpp #871064:871065
@@ -47,9 +47,9 @@
 	StateTransfer st_get(StateTransfer::get, Resource(url, type, QByteArray()));
 
 	// Schedule all modification requests
-	m_rest->schedule(st_del);
+//	m_rest->schedule(st_del);
 //	m_rest->schedule(st_post);
-//	m_rest->schedule(st_put);
+	m_rest->schedule(st_put);
 //	m_rest->schedule(st_get);
 
 	// Clean up afterwards
@@ -67,6 +67,10 @@
 		qDebug("GET-ERROR: URL '%s'", qPrintable(url));
 	else if(method == StateTransfer::del)
 		qDebug("DEL-ERROR: URL '%s'", qPrintable(url));
+	else if(method == StateTransfer::put)
+		qDebug("PUT-ERROR: URL '%s'", qPrintable(url));
+	else if(method == StateTransfer::post)
+		qDebug("POST-ERROR: URL '%s'", qPrintable(url));
 	else
 		qDebug("?!?-ERROR: URL '%s'", qPrintable(url));
 }
--- trunk/playground/libs/webtech/lokarest/lokarest/lokarest.cpp #871064:871065
@@ -43,7 +43,7 @@
 {
 	qDebug("POST URL: '%s'; POST DATA: '%s'", qPrintable(url), data.data());
 
-	KIO::TransferJob *job = KIO::http_post(url, data, KIO::DefaultFlags);
+	KIO::TransferJob *job = KIO::http_post(url, data, KIO::HideProgressInfo);
 	job->addMetaData("content-type", "Content-type: " + type);
 
 	connect(job,
@@ -58,13 +58,16 @@
 {
 	qDebug("PUT URL: '%s'; PUT DATA: '%s'", qPrintable(url), data.data());
 
-	KIO::TransferJob *job = KIO::put(url, -1, KIO::DefaultFlags | KIO::Overwrite);
+	KIO::TransferJob *job = KIO::put(url, -1, KIO::HideProgressInfo | KIO::Overwrite);
 	job->addMetaData("content-type", "Content-type: " + type);
 	// FIXME: kio_http doesn't use this metadata
 
 	connect(job,
 		SIGNAL(dataReq(KIO::Job*, QByteArray&)),
 		SLOT(slotOutgoingJob(KIO::Job*, QByteArray&)));
+	connect(job,
+		SIGNAL(result(KJob*)),
+		SLOT(slotDone(KJob*)));
 
 	m_data[job] = data;
 
@@ -74,7 +77,6 @@
 
 void LokaRest::remove(const QString& url)
 {
-	// FIXME: KIO tries to remove local file here for some reason
 	qDebug("REMOVE URL: '%s'", qPrintable(url));
 
 	KIO::DeleteJob *job = KIO::del(url, KIO::HideProgressInfo);
@@ -115,12 +117,8 @@
 
 void LokaRest::slotIncomingJob(KIO::Job *job, const QByteArray& data)
 {
-	//m_data[job] = data;
-
-	// FIXME: wait for slotDone?
 	qDebug("-> slotIncomingJob '%s'", qPrintable(m_targeturls[job]));
-//	emit signalGet(Resource(m_targeturls[job], QString(), data));
-//	m_targeturls.remove(job);
+	m_data[job].append(data);
 }
 
 void LokaRest::slotDone(KJob *job)
@@ -128,8 +126,17 @@
 	qDebug("-> slotDone, error='%i'", job->error());
 	QString responsecodestr = dynamic_cast<KIO::Job*>(job)->queryMetaData("responsecode");
 	int responsecode = responsecodestr.toInt();
+	QString contenttype = dynamic_cast<KIO::Job*>(job)->queryMetaData("content-type");
 	qDebug("-> slotDone, meta-responsecode='%i'", responsecode);
+	qDebug("-> slotDone, meta-contenttype='%s'", qPrintable(contenttype));
+	QByteArray data = m_data.value(dynamic_cast<KIO::Job*>(job));
 
+	bool failure = job->error();
+	if((responsecode >= 400) && (responsecode <= 599))
+	{
+		failure = true;
+	}
+
 	StateTransfer::Method method = m_targetmethods[job];
 	QString url = m_targeturls[job];
 
@@ -137,7 +144,7 @@
 	|| (method == StateTransfer::put)
 	|| (method == StateTransfer::post))
 	{
-		if(job->error())
+		if(failure)
 		{
 			emit signalError(url, method);
 		}
@@ -152,7 +159,7 @@
 
 	if(method == StateTransfer::get)
 	{
-		if(job->error())
+		if(failure)
 		{
 			StateTransfer st(method, Resource(url, QString(), QByteArray()));
 			m_cache->cache(st, m_cachepolicy);
@@ -161,11 +168,13 @@
 		}
 		else
 		{
-			// FIXME: get payload and content-type
 			Resource resource(url, QString(), QByteArray());
 			m_resourcecache->cache(resource, m_cachepolicy);
+
+			emit signalGet(Resource(m_targeturls[job], contenttype, data));
 		}
 
+		m_data.remove(job);
 		m_targeturls.remove(job);
 		m_targetmethods.remove(job);
 	}
--- trunk/playground/libs/webtech/lokarest/lokarest/lokarest.h #871064:871065
@@ -49,7 +49,7 @@
 		void remove(const QString& url);
 		void get(const QString& url);
 
-		QMap<KIO::Job*, QByteArray> m_data;
+		QMap<KJob*, QByteArray> m_data;
 		QMap<KJob*, QString> m_targeturls;
 		QMap<KJob*, StateTransfer::Method> m_targetmethods;
 		CachePolicy m_cachepolicy;
--- trunk/playground/libs/webtech/lokarest/patches/kio_http.diff #871064:871065
@@ -2,11 +2,12 @@
 ===================================================================
 --- http.protocol	(Revision 867529)
 +++ http.protocol	(Arbeitskopie)
-@@ -4,6 +4,7 @@
+@@ -4,6 +4,8 @@
  input=none
  output=filesystem
  reading=true
 +deleting=true
++writing=true
  defaultMimetype=application/octet-stream
  determineMimetypeFromExtension=false
  Icon=text-html
@@ -14,16 +15,17 @@
 ===================================================================
 --- http.cpp	(Revision 867529)
 +++ http.cpp	(Arbeitskopie)
-@@ -560,6 +560,8 @@
+@@ -560,6 +560,9 @@
    kDebug(7113) << "Previous Response:" << m_request.prevResponseCode;
    kDebug(7113) << "Current Response:" << m_request.responseCode;
  
 +  setMetaData("responsecode", QString::number(m_request.responseCode));
++  setMetaData("content-type", m_mimeType);
 +
    if (m_request.responseCode < 400 &&
        (m_request.prevResponseCode == 401 || m_request.prevResponseCode == 407)) {
        saveAuthorization(m_request.prevResponseCode == 407);
-@@ -1316,10 +1318,21 @@
+@@ -1316,10 +1319,21 @@
  
    // The server returns a HTTP/1.1 200 Ok or HTTP/1.1 204 No Content
    // on successful completion
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic