aboutsummaryrefslogtreecommitdiff
path: root/jobs/basejob.h
blob: 98b7358b06a2c45b71f06bb69d72719b968f3172 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/******************************************************************************
 * Copyright (C) 2015 Felix Rohrbach <kde@fxrh.de>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */

#ifndef QMATRIXCLIENT_BASEJOB_H
#define QMATRIXCLIENT_BASEJOB_H

#ifdef USING_SYSTEM_KCOREADDONS
#include <KCoreAddons/KJob>
#else
#include "kjob.h"
#endif // KCOREADDONS_FOUND

#include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject>
#include <QtCore/QUrlQuery>
#include <QtNetwork/QNetworkReply>

namespace QMatrixClient
{
    class ConnectionData;

    enum class JobHttpType { GetJob, PutJob, PostJob };
    
    class BaseJob: public KJob
    {
            Q_OBJECT
        public:
            BaseJob(ConnectionData* connection, JobHttpType type,
                    QString name, bool needsToken=true);
            virtual ~BaseJob();

            void start() override;

            enum ErrorCode { NetworkError = KJob::UserDefinedError,
                             JsonParseError, TimeoutError, UserDefinedError };

        signals:
            /**
             * Emitted together with KJob::result() but only if there's no error.
             */
            void success(BaseJob*);
            /**
             * Emitted together with KJob::result() if there's an error.
             * Same as result(), this won't be emitted in case of kill(Quietly).
             */
            void failure(BaseJob*);

        protected:
            ConnectionData* connection() const;

            // to implement
            virtual QString apiPath() const = 0;
            virtual QUrlQuery query() const;
            virtual QJsonObject data() const;
            virtual void parseJson(const QJsonDocument& data);
            
            void fail( int errorCode, QString errorString );
            QNetworkReply* networkReply() const;

            
        protected slots:
            virtual void gotReply();
            void timeout();
            void sslErrors(const QList<QSslError>& errors);

            //void networkError(QNetworkReply::NetworkError code);


        private:
            class Private;
            Private* d;
    };
}

#endif // QMATRIXCLIENT_BASEJOB_H