]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/confluence-agent.h
New upstream version 2.9.22
[sven/vym.git] / src / confluence-agent.h
diff --git a/src/confluence-agent.h b/src/confluence-agent.h
new file mode 100644 (file)
index 0000000..ed9cee3
--- /dev/null
@@ -0,0 +1,155 @@
+#ifndef CONFLUENCEAGENT_H
+#define CONFLUENCEAGENT_H
+
+#include <QHash>
+#include <QJsonObject>
+#include <QNetworkAccessManager>
+#include <QObject>
+#include <QTimer>
+
+#include "confluence-user.h"
+
+class BranchItem;
+class VymModel;
+
+//////////////////////////////////////////////////////////////////////////
+
+class ConfluenceAgent : public QObject {
+    Q_OBJECT
+
+  public:
+    enum JobType {
+        Undefined,
+        CopyPagenameToHeading,
+        CreatePage,
+        UpdatePage,
+        UploadAttachments,
+        GetUserInfo
+    };
+
+    static bool available();
+
+    ConfluenceAgent();
+    ConfluenceAgent(BranchItem *bi);
+    ~ConfluenceAgent();
+    void init();
+    void setJobType(JobType jt);
+    void setBranch(BranchItem *bi);
+    void setModelID(uint id);
+    void setPageURL(const QString &u);
+    void setNewPageName(const QString &t);
+    void setUploadPagePath(const QString &fp);
+    void addUploadAttachmentPath(const QString &fp);
+
+    void startJob();
+
+  private:
+    void continueJob(int nextStep = -1);
+    void finishJob();
+    void unknownStepWarningFinishJob();
+
+  signals:
+    void foundUsers(QList <ConfluenceUser>);
+
+  public:
+    void getUsers(const QString &name); //! Convenience function to get user data
+
+  private: QNetworkRequest createRequest(const QUrl &url);
+  private: void startGetPageSourceRequest(QUrl requestedUrl);
+  private slots: void pageSourceReceived(QNetworkReply *reply);
+
+  private: void startGetPageDetailsRequest();
+  private slots: void pageDetailsReceived(QNetworkReply *reply);
+
+  private: void startCreatePageRequest();
+  private: void startUpdatePageRequest();
+  private slots: void pageUploaded(QNetworkReply *reply);
+
+
+  private: void startGetUserInfoRequest();
+  private slots: void userInfoReceived(QNetworkReply *reply);
+
+  private: void startGetAttachmentsInfoRequest();
+  private slots: void attachmentsInfoReceived(QNetworkReply *reply);
+
+  private: void startCreateAttachmentRequest();
+  private slots: void attachmentCreated(QNetworkReply *reply);
+
+  private: void startUpdateAttachmentRequest();
+  private slots: void attachmentUpdated(QNetworkReply *reply);
+
+  signals:
+    void attachmentsSuccess();
+    void attachmentsFailure();
+
+  public slots:
+    void attachmentsUploadSuccess();
+    void attachmentsUploadFailure();
+
+  private: bool wasRequestSuccessful(
+            QNetworkReply *reply, 
+            const QString &requestDesc,
+            const QByteArray &fullReply);
+
+
+  private slots: void timeout();
+
+#ifndef QT_NO_SSL
+    void sslErrors(QNetworkReply *, const QList<QSslError> &errors);
+#endif
+
+  private:
+    // Job related 
+    QTimer *killTimer;
+    JobType jobType;
+    int jobStep;
+    bool abortJob;  // Flag to abort during initialization of job
+
+    // Network handling
+    QNetworkAccessManager *networkManager;
+    QJsonObject pageObj;
+    QJsonObject attachmentObj;
+
+    // Settings: Credentials to access Confluence
+    bool authUsingPAT;
+    QString personalAccessToken;
+    QString username;
+    QString password;
+
+    // Settings: Where to find Confluggence
+    QString baseURL;
+    QString apiURL;
+
+    // Backreferences to take action in calling model
+    uint branchID;
+    uint modelID;
+
+  private:
+    // Parameters
+    QString pageURL;
+    QString newPageName;
+    QString uploadPagePath;
+    QString userQuery;
+
+    // Page details received from Confluence
+    QString pageID;
+    QString spaceKey;
+
+    // Child agent for attachments
+    ConfluenceAgent *attachmentsAgent;
+
+    // Attachments found in page
+    QStringList attachmentsTitles;
+    QStringList attachmentsIds;
+
+    // Current attachments queued for upload
+    QStringList uploadAttachmentPaths;
+    int currentUploadAttachmentIndex;
+    QString currentAttachmentPath;      // set with basename(..) from path
+    QString currentAttachmentTitle;      // set with basename(..) from path
+    QString currentAttachmentId;         // copied from attachmentsIds
+
+    // User info received from Confluence
+    QList <ConfluenceUser> userList;
+};
+#endif