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

List:       kde-commits
Subject:    [akonadi-google/wip-v0.3] /: Use PATCH to modify events
From:       Dan_Vrátil <dan () progdan ! cz>
Date:       2012-04-01 0:49:23
Message-ID: 20120401004923.BD82EA60A9 () git ! kde ! org
[Download RAW message or body]

Git commit fcb9201c7f42f85766b650fe8023247b641f8795 by Dan Vrátil.
Committed on 01/04/2012 at 02:49.
Pushed by dvratil into branch 'wip-v0.3'.

Use PATCH to modify events

For standard PUT (modify) request the Google API sometimes returned
a weird error. Sending the same data with PATCH request seems to work
for now. It denies the purpos of PATCH requests, but it works for now...

M  +2    -1    calendar/calendarresource.cpp
M  +1    -0    contacts/contactsresource.cpp
M  +12   -1    libkgoogle/accessmanager_p.cpp
M  +2    -1    libkgoogle/request.h

http://commits.kde.org/akonadi-google/fcb9201c7f42f85766b650fe8023247b641f8795

diff --git a/calendar/calendarresource.cpp b/calendar/calendarresource.cpp
index bb43f15..1de851c 100644
--- a/calendar/calendarresource.cpp
+++ b/calendar/calendarresource.cpp
@@ -354,7 +354,7 @@ void CalendarResource::itemChanged(const Akonadi::Item& item, const QSet< QByteA
         Services::Calendar service;
         data = service.objectToJSON(static_cast< KGoogle::Object* >(&kevent));
 
-        Request *request = new Request(url, Request::Update, "Calendar", m_account);
+        Request *request = new Request(url, Request::Patch, "Calendar", m_account);
         request->setRequestData(data, "application/json");
         request->setProperty("Item", QVariant::fromValue(item));
 
@@ -454,6 +454,7 @@ void CalendarResource::replyReceived(KGoogle::Reply* reply)
         break;
 
     case Request::Update:
+    case Request::Patch:
         itemUpdated(reply);
         break;
 
diff --git a/contacts/contactsresource.cpp b/contacts/contactsresource.cpp
index 5669d4d..727e9e1 100644
--- a/contacts/contactsresource.cpp
+++ b/contacts/contactsresource.cpp
@@ -413,6 +413,7 @@ void ContactsResource::replyReceived(KGoogle::Reply* reply)
 
     case Request::FetchAll:
     case Request::Move:
+    case Request::Patch:
         break;
     }
 
diff --git a/libkgoogle/accessmanager_p.cpp b/libkgoogle/accessmanager_p.cpp
index 19e9f66..27fd2e3 100644
--- a/libkgoogle/accessmanager_p.cpp
+++ b/libkgoogle/accessmanager_p.cpp
@@ -27,6 +27,7 @@
 #include <QtNetwork/QNetworkRequest>
 #include <QtCore/QByteArray>
 #include <QtCore/QUrl>
+#include <QBuffer>
 #include <qjson/parser.h>
 #include <qjson/serializer.h>
 
@@ -202,7 +203,8 @@ void AccessManagerPrivate::nam_replyReceived(QNetworkReply* reply)
 
     case KGoogle::Request::Fetch:
     case KGoogle::Request::Create:
-    case KGoogle::Request::Update: {
+    case KGoogle::Request::Update:
+    case KGoogle::Request::Patch: {
         if (reply->header(QNetworkRequest::ContentTypeHeader).toString().contains("application/json") ||
                 reply->header(QNetworkRequest::ContentTypeHeader).toString().contains("text/plain")) {
 
@@ -307,6 +309,15 @@ void AccessManagerPrivate::nam_sendRequest(KGoogle::Request* request)
         nr.setRawHeader("If-Match", "*");
         nam->deleteResource(nr);
         break;
+
+    case KGoogle::Request::Patch: {
+        QBuffer *buffer = new QBuffer(this);
+        buffer->setData(request->requestData());
+        buffer->open(QIODevice::ReadOnly);
+        nr.setHeader(QNetworkRequest::ContentTypeHeader, request->contentType());
+        QNetworkReply *reply = nam->sendCustomRequest(nr, "PATCH", buffer);
+        connect(reply, SIGNAL(finished()), buffer, SLOT(deleteLater()));
+        } break;
     }
 }
 
diff --git a/libkgoogle/request.h b/libkgoogle/request.h
index b8dfc00..9cf4f4d 100644
--- a/libkgoogle/request.h
+++ b/libkgoogle/request.h
@@ -45,7 +45,8 @@ class LIBKGOOGLE_EXPORT Request: public QNetworkRequest
         Create,         /** POST **/
         Move,           /** POST **/
         Update,         /** PUT **/
-        Remove          /** DELETE **/
+        Remove,         /** DELETE **/
+        Patch           /** PATCH **/
     };
 
     /**
[prev in list] [next in list] [prev in thread] [next in thread] 

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