summaryrefslogtreecommitdiff
path: root/xmlrpcpendingcall.h
diff options
context:
space:
mode:
authorJavier S. Pedro <maemo@javispedro.com>2013-04-01 15:04:58 +0200
committerJavier S. Pedro <maemo@javispedro.com>2013-04-01 15:04:58 +0200
commit5ef8b38e55c1883224fe1f01f47aba45b7b42666 (patch)
tree67a873c6a7c5263d202793314c3b3a61543fbb40 /xmlrpcpendingcall.h
downloadtapasboard-5ef8b38e55c1883224fe1f01f47aba45b7b42666.tar.gz
tapasboard-5ef8b38e55c1883224fe1f01f47aba45b7b42666.zip
initial import
Diffstat (limited to 'xmlrpcpendingcall.h')
-rw-r--r--xmlrpcpendingcall.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/xmlrpcpendingcall.h b/xmlrpcpendingcall.h
new file mode 100644
index 0000000..620ddc4
--- /dev/null
+++ b/xmlrpcpendingcall.h
@@ -0,0 +1,69 @@
+#ifndef XMLRPCPENDINGCALL_H
+#define XMLRPCPENDINGCALL_H
+
+#include <QtCore/QObject>
+#include <QtCore/QXmlStreamReader>
+#include <QtNetwork/QNetworkReply>
+
+class XmlRpcInterface;
+
+class XmlRpcPendingCall : public QObject
+{
+ Q_OBJECT
+ friend class XmlRpcInterface;
+protected:
+ explicit XmlRpcPendingCall(QNetworkReply *reply, XmlRpcInterface *parent);
+
+public:
+ bool isError() const;
+ bool isFinished() const;
+ bool isValid() const;
+
+ QVariant value() const;
+
+public slots:
+ void waitForFinished();
+
+signals:
+ void finished(XmlRpcPendingCall *self);
+
+private:
+ bool decodeMethodResponse(QXmlStreamReader* r);
+ static QVariant decodeValue(QXmlStreamReader* r);
+
+private slots:
+ void handleRequestFinished();
+
+private:
+ QNetworkReply *_reply;
+ QVariant _value;
+ enum State {
+ StateWaitingReply,
+ StateNetworkError,
+ StateParseError,
+ StateReplyReceived,
+ StateFaultReceived
+ } _state;
+};
+
+inline bool XmlRpcPendingCall::isError() const
+{
+ return _state != StateWaitingReply && _state != StateReplyReceived;
+}
+
+inline bool XmlRpcPendingCall::isFinished() const
+{
+ return _state != StateWaitingReply;
+}
+
+inline bool XmlRpcPendingCall::isValid() const
+{
+ return _state == StateReplyReceived;
+}
+
+inline QVariant XmlRpcPendingCall::value() const
+{
+ return _value;
+}
+
+#endif // XMLRPCPENDINGCALL_H