Warning, file /network/kaccounts-providers/plugins/nextcloud-ui/nextcloudcontroller.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  *  SPDX-FileCopyrightText: 2019 Rituka Patwal <ritukapatwal21@gmail.com>
0003  *  SPDX-FileCopyrightText: 2015 Martin Klapetek <mklapetek@kde.org>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #ifndef QMLHELPER_H
0009 #define QMLHELPER_H
0010 
0011 #include <QObject>
0012 #include <QQuickWebEngineProfile>
0013 #include <QStringList>
0014 #include <QVariant>
0015 #include <QWebEngineUrlRequestInterceptor>
0016 
0017 namespace KIO
0018 {
0019 class Job;
0020 }
0021 
0022 class KJob;
0023 
0024 class Service
0025 {
0026     Q_GADGET
0027     Q_PROPERTY(QString id MEMBER m_id)
0028     Q_PROPERTY(QString name MEMBER m_name)
0029     Q_PROPERTY(QString description MEMBER m_description)
0030 
0031 public:
0032     QString m_id;
0033     QString m_name;
0034     QString m_description;
0035 };
0036 
0037 class NextcloudUrlIntercepter : public QWebEngineUrlRequestInterceptor
0038 {
0039     void interceptRequest(QWebEngineUrlRequestInfo &info) override;
0040 };
0041 
0042 class NextcloudController : public QObject
0043 {
0044     Q_OBJECT
0045     Q_PROPERTY(bool isWorking READ isWorking NOTIFY isWorkingChanged)
0046     Q_PROPERTY(QString errorMessage READ errorMessage NOTIFY errorMessageChanged)
0047     Q_PROPERTY(State state MEMBER m_state NOTIFY stateChanged)
0048     Q_PROPERTY(QQuickWebEngineProfile *webengineProfile MEMBER m_webengineProfile CONSTANT)
0049     Q_PROPERTY(QString loginUrl MEMBER m_loginUrl NOTIFY loginUrlChanged)
0050     Q_PROPERTY(QVariantList availableServices READ availableServices CONSTANT)
0051 
0052 public:
0053     enum State {
0054         ServerUrl = 0,
0055         WebLogin,
0056         Services,
0057     };
0058     Q_ENUM(State)
0059 
0060     NextcloudController(QObject *parent = nullptr);
0061     ~NextcloudController();
0062 
0063     Q_INVOKABLE void checkServer(const QString &server);
0064     Q_INVOKABLE void finish(const QStringList disabledServices);
0065     Q_INVOKABLE void cancel();
0066     bool isWorking();
0067     bool isLoginComplete();
0068     QString errorMessage() const;
0069     QVariantList availableServices() const;
0070 
0071 Q_SIGNALS:
0072     void isWorkingChanged();
0073     void errorMessageChanged();
0074     void wizardFinished(const QString &username, const QString &password, const QVariantMap &data);
0075     void stateChanged();
0076     void loginUrlChanged();
0077     void wizardCancelled();
0078 
0079 private Q_SLOTS:
0080     void fileChecked(KJob *job);
0081     void dataReceived(KIO::Job *job, const QByteArray &data);
0082     void authCheckResult(KJob *job);
0083     void finalUrlHandler(const QUrl &url);
0084 
0085 private:
0086     void checkServer(const QUrl &url);
0087     void figureOutServer(const QUrl &url);
0088     void setWorking(bool start);
0089     void serverCheckResult();
0090     void wrongUrlDetected();
0091 
0092     QByteArray m_json;
0093     QString m_errorMessage;
0094     QString m_server;
0095     QString m_username;
0096     QString m_password;
0097     QStringList m_disabledServices;
0098     bool m_isWorking = false;
0099     State m_state = ServerUrl;
0100     QQuickWebEngineProfile *m_webengineProfile;
0101     NextcloudUrlIntercepter m_urlIntercepter;
0102     QString m_loginUrl;
0103 };
0104 
0105 #endif // QMLHELPER_H