Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsnetworkreplyparser.h - Multipart QNetworkReply parser 3 : : ------------------- 4 : : begin : 4 January, 2013 5 : : copyright : (C) 2013 by Radim Blazek 6 : : email : radim dot blazek at gmail.com 7 : : 8 : : ***************************************************************************/ 9 : : 10 : : /*************************************************************************** 11 : : * * 12 : : * This program is free software; you can redistribute it and/or modify * 13 : : * it under the terms of the GNU General Public License as published by * 14 : : * the Free Software Foundation; either version 2 of the License, or * 15 : : * (at your option) any later version. * 16 : : * * 17 : : ***************************************************************************/ 18 : : 19 : : #ifndef QGSNETWORKREPLYPARSER_H 20 : : #define QGSNETWORKREPLYPARSER_H 21 : : 22 : : #define SIP_NO_FILE 23 : : 24 : : #include <QNetworkReply> 25 : : 26 : : #include "qgis_core.h" 27 : : 28 : : /** 29 : : * \ingroup core 30 : : * \brief Multipart QNetworkReply parser. 31 : : * 32 : : * It seams that Qt does not have currently support for multipart reply 33 : : * and it is not even possible to create QNetworkReply from raw data 34 : : * so we need a class for multipart QNetworkReply parsing. 35 : : * \note not available in Python bindings 36 : : */ 37 : : 38 : : class CORE_EXPORT QgsNetworkReplyParser : public QObject 39 : : { 40 : 0 : Q_OBJECT 41 : : 42 : : public: 43 : : typedef QMap<QByteArray, QByteArray> RawHeaderMap; 44 : : 45 : : /** 46 : : * Constructor 47 : : * \param reply 48 : : */ 49 : : QgsNetworkReplyParser( QNetworkReply *reply ); 50 : : 51 : : /** 52 : : * Indicates if successfully parsed 53 : : * \returns TRUE if successfully parsed 54 : : */ 55 : : bool isValid() const { return mValid; } 56 : : 57 : : /** 58 : : * Gets number of parts 59 : : * \returns number of parts 60 : : */ 61 : : int parts() const { return mHeaders.size(); } 62 : : 63 : : /** 64 : : * Gets part header 65 : : * \param part part index 66 : : * \param headerName header name 67 : : * \returns raw header 68 : : */ 69 : : QByteArray rawHeader( int part, const QByteArray &headerName ) const { return mHeaders.value( part ).value( headerName ); } 70 : : 71 : : //! Gets headers 72 : : QList< RawHeaderMap > headers() const { return mHeaders; } 73 : : 74 : : /** 75 : : * Gets part part body 76 : : * \param part part index 77 : : * \returns part body 78 : : */ 79 : : QByteArray body( int part ) const { return mBodies.value( part ); } 80 : : 81 : : //! Gets bodies 82 : : QList<QByteArray> bodies() const { return mBodies; } 83 : : 84 : : //! Parsing error 85 : : QString error() const { return mError; } 86 : : 87 : : /** 88 : : * Test if reply is multipart. 89 : : * \returns TRUE if reply is multipart 90 : : */ 91 : : static bool isMultipart( QNetworkReply *reply ); 92 : : 93 : : private: 94 : : QNetworkReply *mReply = nullptr; 95 : : 96 : : bool mValid; 97 : : 98 : : QString mError; 99 : : 100 : : /* List of header maps */ 101 : : QList< RawHeaderMap > mHeaders; 102 : : 103 : : /* List of part bodies */ 104 : : QList<QByteArray> mBodies; 105 : : }; 106 : : 107 : : #endif