1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-26 01:27:28 +00:00
transmission/qt/RpcClient.h
Mike Gelfand 18ea8c429a Improve RPC performance for local sessions
Don't unnecessarily de-/serialize JSON data if local session is used.
2015-07-13 00:32:48 +00:00

82 lines
1.8 KiB
C++

/*
* This file Copyright (C) 2014-2015 Mnemosyne LLC
*
* It may be used under the GNU GPL versions 2 or 3
* or any future license endorsed by Mnemosyne LLC.
*
* $Id$
*/
#ifndef QTR_RPC_CLIENT_H
#define QTR_RPC_CLIENT_H
#include <memory>
#include <QNetworkReply>
#include <QObject>
#include <QString>
#include <QUrl>
#include <libtransmission/transmission.h>
#include <libtransmission/quark.h>
#include <libtransmission/variant.h>
class QByteArray;
class QNetworkAccessManager;
typedef std::shared_ptr<tr_variant> TrVariantPtr;
Q_DECLARE_METATYPE (TrVariantPtr);
extern "C"
{
struct evbuffer;
struct tr_session;
}
class RpcClient: public QObject
{
Q_OBJECT
public:
RpcClient (QObject * parent = nullptr);
virtual ~RpcClient () {}
void stop ();
void start (tr_session * session);
void start (const QUrl& url);
bool isLocal () const;
const QUrl& url () const;
void exec (tr_quark method, tr_variant * args, int64_t tag = -1);
void exec (const char* method, tr_variant * args, int64_t tag = -1);
signals:
void httpAuthenticationRequired ();
void dataReadProgress ();
void dataSendProgress ();
void error (QNetworkReply::NetworkError code);
void errorMessage (const QString& message);
void executed (int64_t tag, const QString& result, tr_variant * args);
// private
void responseReceived (TrVariantPtr json);
private:
void sendRequest (TrVariantPtr json);
QNetworkAccessManager * networkAccessManager ();
static void localSessionCallback (tr_session * s, tr_variant * response, void * vself);
private slots:
void onFinished (QNetworkReply * reply);
void parseResponse (TrVariantPtr json);
private:
tr_session * mySession;
QString mySessionId;
QUrl myUrl;
QNetworkAccessManager * myNAM;
};
#endif // QTR_RPC_CLIENT_H