|
|
Line 1: |
Line 1: |
| = Class type to return attributes =
| | For the coding style we follow [kdelibs coding style][http://techbase.kde.org/Policies/Kdelibs_Coding_Style] |
|
| |
|
| == attribute.h ==
| | astyle --indent=spaces=4 --brackets=linux \ |
| | | --indent-labels --pad-oper --unpad-paren \ |
| /*
| | --one-line=keep-statements --convert-tabs \ |
| | | --indent-preprocessor \ |
| *
| | `find -type f -name '*.cpp'` `find -type f -name '*.cc'` `find -type f -name '*.h'` |
| * This program is free software; you can redistribute it and/or modify
| |
| * it under the terms of the GNU Library General Public License as
| |
| * published by the Free Software Foundation; either version 2, or
| |
| * (at your option) any later version.
| |
| *
| |
| * This program is distributed in the hope that it will be useful,
| |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of
| |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| |
| * GNU General Public License for more details
| |
| *
| |
| * You should have received a copy of the GNU Library General Public
| |
| * License along with this program; if not, write to the
| |
| * Free Software Foundation, Inc.,
| |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
| |
| */
| |
| | |
| <nowiki>#</nowiki>ifndef ATTRIBUTE_H
| |
| | |
| <nowiki>#</nowiki>define ATTRIBUTE_H
| |
| | |
| <nowiki>#</nowiki>include <QtCore/QObject>
| |
| | |
| <nowiki>#</nowiki>include <kdemacros.h>
| |
| | |
| class MediaWiki;
| |
| class QNetworkReply;
| |
| | |
| class KDE_EXPORT Attribute : public QObject
| |
| {
| |
| Q_OBJECT
| |
| | |
| public:
| |
| /**
| |
| @brief Create an instance of Attribute and send a request.
| |
| @param media
| |
| @param parent
| |
| */
| |
| explicit Attribute( MediaWiki const & media, /*Put attributes here*/ QObject * parent = 0 );
| |
| | |
| /**
| |
| @brief Destroy the AttributePrivate pointer.
| |
| */
| |
| virtual ~Attribute();
| |
| | |
| signals:
| |
| | |
| /**
| |
| @brief Emitted when a request has been completed.
| |
| @param success true if the request was completed successfully.
| |
| */
| |
| void finished( bool );
| |
| | |
| public slots:
| |
| | |
| /**
| |
| @brief Aborts the currently running request.
| |
| */
| |
| void abort();
| |
| | |
| private slots:
| |
| | |
| /**
| |
| @brief Reads the xml and build results
| |
| @param reply
| |
| */
| |
| void onFinished( QNetworkReply *reply );
| |
| | |
| private:
| |
| | |
| struct AttributePrivate * const d;
| |
| };
| |
| | |
| <nowiki>#</nowiki>endif // ATTRIBUTE_H
| |
| | |
| == attribute.cpp ==
| |
| | |
| /*
| |
| | |
| *
| |
| * This program is free software; you can redistribute it and/or modify
| |
| * it under the terms of the GNU Library General Public License as
| |
| * published by the Free Software Foundation; either version 2, or
| |
| * (at your option) any later version.
| |
| *
| |
| * This program is distributed in the hope that it will be useful,
| |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of
| |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| |
| * GNU General Public License for more details
| |
| *
| |
| * You should have received a copy of the GNU Library General Public
| |
| * License along with this program; if not, write to the
| |
| * Free Software Foundation, Inc.,
| |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
| |
| */
| |
| | |
| <nowiki>#</nowiki>include <QtNetwork/QNetworkAccessManager>
| |
| | |
| <nowiki>#</nowiki>include <QtNetwork/QNetworkRequest>
| |
| | |
| <nowiki>#</nowiki>include <QtNetwork/QNetworkReply>
| |
| | |
| <nowiki>#</nowiki>include <QtCore/QXmlStreamReader>
| |
| | |
| <nowiki>#</nowiki>include <QtCore/QTimer>
| |
| | |
| <nowiki>#</nowiki>include <QtCore/QDebug>
| |
| | |
| <nowiki>#</nowiki>include "attribute.h"
| |
| | |
| struct AttributePrivate
| |
| {
| |
| QNetworkAccessManager *manager;
| |
| QNetworkReply *reply;
| |
| QUrl apiUrl;
| |
| /*Put attributes here*/
| |
| };
| |
| | |
| Attribute::Attribute( MediaWiki const & media, /*Put attributes here*/, QObject * parent )
| |
| : QObject( parent )
| |
| , d( new AttributePrivate )
| |
| {
| |
| | |
| d->apiUrl = media.url();
| |
| QUrl url = d->apiUrl;
| |
| | |
| url.addQueryItem( QString("action"), QString("query") );
| |
| | |
| // Set the request
| |
| QNetworkRequest request( url );
| |
| request.setRawHeader( "User-Agent", "mediawiki-silk" );
| |
| // Send the request
| |
| d->manager = new QNetworkAccessManager( this );
| |
| | |
| connect( d->manager, SIGNAL( onFinished( QNetworkReply* ) ), this, SLOT( onFinished( QNetworkReply * ) ) );
| |
| d->reply = d->manager->get( request );
| |
| QTimer::singleShot( 30 * 1000, this, SLOT( abort() ) );
| |
| | |
| }
| |
| | |
| Attribute::~Attribute()
| |
| {
| |
| delete d;
| |
| }
| |
| | |
| void Attribute::abort()
| |
| {
| |
| qDebug() << "abort";
| |
| if ( !d->reply )
| |
| return;
| |
| | |
| d->reply->abort();
| |
| d->reply = 0;
| |
| }
| |
| | |
| void Attribute::onFinished( QNetworkReply *reply )
| |
| {
| |
| if ( reply->error() != QNetworkReply::NoError )
| |
| {
| |
| qDebug() << "Request failed, " << reply->errorString();
| |
| emit onFinished( false );
| |
| return;
| |
| }
| |
| | |
| QXmlStreamReader reader( reply );
| |
| | |
| while ( !reader.atEnd() && !reader.hasError() )
| |
| {
| |
| QXmlStreamReader::TokenType token = reader.readNext();
| |
| if ( token == QXmlStreamReader::StartElement )
| |
| {
| |
| if ( reader.name() == QString( "goodName" ) )
| |
| {
| |
| QXmlStreamAttributes attrs = reader.attributes();
| |
| if ( attrs.value( QString( "result" ) ).toString() == "goodResult" )
| |
| {
| |
| qDebug() << "Request succed, " << reply->errorString();
| |
| d->lgtoken = attrs.value( QString( "result" ) ).toString() ;
| |
| emit onFinished( true );
| |
| }
| |
| }
| |
| }
| |
| else if ( token == QXmlStreamReader::Invalid )
| |
| emit onFinished( false );
| |
| }
| |
| }
| |
| | |
| = Class type to return list =
| |
| | |
| == list.h ==
| |
| | |
| /*
| |
| | |
| *
| |
| * This program is free software; you can redistribute it and/or modify
| |
| * it under the terms of the GNU Library General Public License as
| |
| * published by the Free Software Foundation; either version 2, or
| |
| * (at your option) any later version.
| |
| *
| |
| * This program is distributed in the hope that it will be useful,
| |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of
| |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| |
| * GNU General Public License for more details
| |
| *
| |
| * You should have received a copy of the GNU Library General Public
| |
| * License along with this program; if not, write to the
| |
| * Free Software Foundation, Inc.,
| |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
| |
| */
| |
| | |
| <nowiki>#</nowiki>ifndef LIST_H
| |
| | |
| <nowiki>#</nowiki>define LIST_H
| |
| | |
| <nowiki>#</nowiki>include <QtCore/QObject>
| |
| | |
| <nowiki>#</nowiki>include <kdemacros.h>
| |
| | |
| class MediaWiki;
| |
| class QNetworkReply;
| |
| | |
| class KDE_EXPORT List : public QObject
| |
| {
| |
| Q_OBJECT
| |
| | |
| public:
| |
| struct Result {
| |
| /* Attribute result */
| |
| };
| |
| /**
| |
| @brief Create an instance of List and send a request.
| |
| @param media
| |
| @param parent
| |
| */
| |
| explicit List( MediaWiki const & media, /*Put attributes here*/, QObject * parent = 0 );
| |
| | |
| /**
| |
| @brief Destroy the ListPrivate pointer.
| |
| */
| |
| virtual ~List();
| |
| | |
| signals:
| |
| | |
| /**
| |
| @brief Emitted when a request has been completed.
| |
| @param success true if the request was completed successfully.
| |
| */
| |
| void finished( QList<List::Result> list );
| |
| | |
| public slots:
| |
| | |
| /**
| |
| @brief Aborts the currently running request.
| |
| */
| |
| void abort();
| |
| | |
| private slots:
| |
| | |
| /**
| |
| @brief Reads the xml and build results
| |
| @param reply
| |
| */
| |
| void onFinished( QNetworkReply *reply );
| |
| | |
| private:
| |
| | |
| struct ListPrivate *const d;
| |
| };
| |
| | |
| <nowiki>#</nowiki>endif // LIST_H
| |
| | |
| == list.cpp ==
| |
| | |
| /*
| |
| | |
| *
| |
| * This program is free software; you can redistribute it and/or modify
| |
| * it under the terms of the GNU Library General Public License as
| |
| * published by the Free Software Foundation; either version 2, or
| |
| * (at your option) any later version.
| |
| *
| |
| * This program is distributed in the hope that it will be useful,
| |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of
| |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| |
| * GNU General Public License for more details
| |
| *
| |
| * You should have received a copy of the GNU Library General Public
| |
| * License along with this program; if not, write to the
| |
| * Free Software Foundation, Inc.,
| |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
| |
| */
| |
| | |
| <nowiki>#</nowiki>include <QtNetwork/QNetworkAccessManager>
| |
| | |
| <nowiki>#</nowiki>include <QtNetwork/QNetworkRequest>
| |
| | |
| <nowiki>#</nowiki>include <QtNetwork/QNetworkReply>
| |
| | |
| <nowiki>#</nowiki>include <QtCore/QXmlStreamReader>
| |
| | |
| <nowiki>#</nowiki>include <QtCore/QDebug>
| |
| | |
| <nowiki>#</nowiki>include "list.h"
| |
| | |
| struct ListPrivate
| |
| {
| |
| QNetworkAccessManager *manager;
| |
| QNetworkReply *reply;
| |
| QUrl apiUrl;
| |
| /*Put attributes here*/
| |
| };
| |
| | |
| List::List( MediaWiki const & media, /*Put attributes here*/, QObject * parent )
| |
| : QObject( parent )
| |
| , d( new ListPrivate )
| |
| {
| |
| | |
| d->apiUrl = media.url();
| |
| QUrl url = d->apiUrl;
| |
| | |
| url.addQueryItem( QString("action"), QString("query") );
| |
| | |
| // Set the request
| |
| QNetworkRequest request( url );
| |
| request.setRawHeader( "User-Agent", "mediawiki-silk" );
| |
| // Send the request
| |
| d->manager = new QNetworkAccessManager( this );
| |
| | |
| connect( d->manager, SIGNAL( onFinished( QNetworkReply* ) ), this, SLOT( onFinished( QNetworkReply * ) ) );
| |
| d->reply = d->manager->get( request );
| |
| | |
| }
| |
| | |
| List::~List()
| |
| {
| |
| delete d;
| |
| }
| |
| | |
| void List::abort()
| |
| {
| |
| qDebug() << "abort";
| |
| if ( !d->reply )
| |
| return;
| |
| | |
| d->reply->abort();
| |
| d->reply = 0;
| |
| }
| |
| | |
| void List::onFinished( QNetworkReply *reply )
| |
| {
| |
| if ( reply->error() == QNetworkReply::NoError )
| |
| {
| |
| // Parse xml
| |
| emit finished( list );
| |
| }
| |
| }
| |