Act properly if OCS endpoint returned an error (OCS error)
authorRoeland Jago Douma <rullzer@owncloud.com>
Thu, 29 Oct 2015 15:56:23 +0000 (16:56 +0100)
committerRoeland Jago Douma <rullzer@owncloud.com>
Thu, 29 Oct 2015 15:56:23 +0000 (16:56 +0100)
For now pass it on to the gui. So at least they know something is wrong.

src/gui/ocsjob.cpp
src/gui/ocsjob.h
src/gui/share.cpp
src/gui/share.h
src/gui/sharedialog.cpp
src/gui/sharedialog.h

index d83a1d35facff8093132b78518011dd2874e3e0e..5b0b0ad54588b89dec421799e0d424fd2753d68c 100644 (file)
@@ -105,9 +105,10 @@ bool OcsJob::finished()
                  << Account::concatUrlPath(account()->url(), path())
                  << _params
                  << "has unexpected status code:" << statusCode << replyData;
+        emit ocsError(statusCode, message);
+    } else {
+        emit jobFinished(json);
     }
-
-    emit jobFinished(json);
     deleteLater();
     return true;
 }
index a6c405d3c29e1956b6576d29ce3877070a870e45..344b004aebf2be46557bfb86f6d17e16833015eb 100644 (file)
@@ -108,6 +108,15 @@ signals:
      */
     void jobFinished(QVariantMap reply);
 
+    /**
+     * The status code was not one of the expected (passing)
+     * status code for this command
+     *
+     * @param statusCode The actual status code
+     * @param message The message provided by the server
+     */
+    void ocsError(int statusCode, const QString &message);
+
 private slots:
     virtual bool finished() Q_DECL_OVERRIDE;
 
index c8bc5de4f8cdd7c612ef143ec195649c77f18704..06ce06613f50c3f0cf032a28901fb22861d3fe0e 100644 (file)
@@ -48,21 +48,21 @@ int Share::getPermissions() const
 void Share::deleteShare()
 {
     OcsShareJob *job = new OcsShareJob(_account, this);
-    connect(job, SIGNAL(jobFinished(QVariantMap)), this, SLOT(slotDeleted(QVariantMap)));
+    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotDeleted()));
+    connect(job, SIGNAL(ocsError(int, const QString &)), SLOT(slotOcsError(int, const QString &)));
     job->deleteShare(getId());
 }
 
-void Share::slotDeleted(const QVariantMap &reply)
+void Share::slotDeleted()
 {
-    QString message;
-    int code = OcsShareJob::getJsonReturnCode(reply, message);
-    if (code != 100) {
-        //emit error!
-    }
-
     emit shareDeleted();
 }
 
+void Share::slotOcsError(int statusCode, const QString &message)
+{
+    emit serverError(statusCode, message);   
+}
+
 QUrl LinkShare::getLink() const
 {
     return _url;
@@ -103,21 +103,13 @@ bool LinkShare::getPublicUpload()
 void LinkShare::setPublicUpload(bool publicUpload)
 {
     OcsShareJob *job = new OcsShareJob(_account, this);
-    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), this, SLOT(slotPublicUploadSet(QVariantMap, QVariant)));
+    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotPublicUploadSet(QVariantMap, QVariant)));
+    connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
     job->setPublicUpload(getId(), publicUpload);
 }
 
-void LinkShare::slotPublicUploadSet(const QVariantMap &reply, const QVariant &value)
+void LinkShare::slotPublicUploadSet(const QVariantMap&, const QVariant &value)
 {
-    qDebug() << Q_FUNC_INFO << reply;
-    qDebug() << Q_FUNC_INFO << value;
-
-    QString message;
-    int code = OcsShareJob::getJsonReturnCode(reply, message);
-    if (code != 100) {
-        //emit error
-    }
-
     //TODO FIX permission with names
     if (value.toBool()) {
         _permissions = 7;
@@ -131,18 +123,13 @@ void LinkShare::slotPublicUploadSet(const QVariantMap &reply, const QVariant &va
 void LinkShare::setPassword(const QString &password)
 {
     OcsShareJob *job = new OcsShareJob(_account, this);
-    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), this, SLOT(slotPasswordSet(QVariantMap, QVariant)));
+    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotPasswordSet(QVariantMap, QVariant)));
+    connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
     job->setPassword(getId(), password);
 }
 
-void LinkShare::slotPasswordSet(const QVariantMap &reply, const QVariant &value)
+void LinkShare::slotPasswordSet(const QVariantMap&, const QVariant &value)
 {
-    QString message;
-    int code = OcsShareJob::getJsonReturnCode(reply, message);
-    if (code != 100) {
-        //emit error
-    }
-
     _passwordSet = value.toString() == "";
     emit passwordSet();
 }
@@ -150,18 +137,13 @@ void LinkShare::slotPasswordSet(const QVariantMap &reply, const QVariant &value)
 void LinkShare::setExpireDate(const QDate &date)
 {
     OcsShareJob *job = new OcsShareJob(_account, this);
-    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), this, SLOT(slotExpireDateSet(QVariantMap, QVariant)));
+    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotExpireDateSet(QVariantMap, QVariant)));
+    connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
     job->setExpireDate(getId(), date);
 }
 
-void LinkShare::slotExpireDateSet(const QVariantMap &reply, const QVariant &value)
+void LinkShare::slotExpireDateSet(const QVariantMap&, const QVariant &value)
 {
-    QString message;
-    int code = OcsShareJob::getJsonReturnCode(reply, message);
-    if (code != 100) {
-        //emit error
-    }
-
     _expireDate = value.toDate();
     emit expireDateSet();
 }
@@ -177,7 +159,8 @@ void ShareManager::createLinkShare(const QString &path,
                                    const QString &password)
 {
     OcsShareJob *job = new OcsShareJob(_account, this);
-    connect(job, SIGNAL(jobFinished(QVariantMap)), this, SLOT(slotLinkShareCreated(QVariantMap)));
+    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotLinkShareCreated(QVariantMap)));
+    connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
     job->createShare(path, OcsShareJob::ShareType::Link, password);
 }
 
@@ -193,9 +176,7 @@ void ShareManager::slotLinkShareCreated(const QVariantMap &reply)
     if (code == 403) {
         emit linkShareRequiresPassword();
         return;
-    } else if (code != 100) {
-        //emit error
-    }
+    } 
 
     //Parse share
     auto data = reply.value("ocs").toMap().value("data").toMap();
@@ -207,18 +188,13 @@ void ShareManager::slotLinkShareCreated(const QVariantMap &reply)
 void ShareManager::fetchShares(const QString &path)
 {
     OcsShareJob *job = new OcsShareJob(_account, this);
-    connect(job, SIGNAL(jobFinished(QVariantMap)), this, SLOT(slotSharesFetched(QVariantMap)));
+    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotSharesFetched(QVariantMap)));
+    connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
     job->getShares(path);
 }
 
 void ShareManager::slotSharesFetched(const QVariantMap &reply)
 {
-    QString message;
-    int code = OcsShareJob::getJsonReturnCode(reply, message);
-    if (code != 100 && code != 404) {
-        //emit error!
-    }
-
     auto tmpShares = reply.value("ocs").toMap().value("data").toList();
     const QString versionString = _account->serverVersion();
     qDebug() << Q_FUNC_INFO << versionString << "Fetched" << tmpShares.count() << "shares";
@@ -280,4 +256,9 @@ QSharedPointer<LinkShare> ShareManager::parseLinkShare(const QVariantMap &data)
                                                    expireDate));
 }
 
+void ShareManager::slotOcsError(int statusCode, const QString &message)
+{
+    emit serverError(statusCode, message);   
+}
+
 }
index 9fbc4b1a17f3c9c7b54d6a91ced3cd51637823ac..fca2c2482ec394b517c0cbefaad5d489842f1e38 100644 (file)
@@ -82,8 +82,11 @@ protected:
     int _shareType;
     int _permissions;
 
+protected slots:
+    void slotOcsError(int statusCode, const QString &message);
+
 private slots:
-    void slotDeleted(const QVariantMap &reply);
+    void slotDeleted();
 
 };
 
@@ -156,9 +159,9 @@ signals:
     void passwordSet();
 
 private slots:
-    void slotPasswordSet(const QVariantMap &reply, const QVariant &value);
-    void slotPublicUploadSet(const QVariantMap &reply, const QVariant &value);
-    void slotExpireDateSet(const QVariantMap &reply, const QVariant &value);
+    void slotPasswordSet(const QVariantMap&, const QVariant &value);
+    void slotPublicUploadSet(const QVariantMap&, const QVariant &value);
+    void slotExpireDateSet(const QVariantMap&, const QVariant &value);
 
 private:
     bool _passwordSet;
@@ -208,6 +211,7 @@ signals:
 private slots:
     void slotSharesFetched(const QVariantMap &reply);
     void slotLinkShareCreated(const QVariantMap &reply);
+    void slotOcsError(int statusCode, const QString &message);
 
 private:
     QSharedPointer<LinkShare> parseLinkShare(const QVariantMap &data);
index ded38b0b1e04cc3c28fc958f529c649616c65975..4cdc28b05e7d615427fda1311c69e3e3f592621b 100644 (file)
@@ -175,9 +175,10 @@ ShareDialog::ShareDialog(AccountPtr account, const QString &sharePath, const QSt
      */
     _manager = new ShareManager(_account, this);
 
-    connect(_manager, SIGNAL(sharesFetched(QList<QSharedPointer<Share>>)), this, SLOT(slotSharesFetched(QList<QSharedPointer<Share>>)));
-    connect(_manager, SIGNAL(linkShareCreated(const QSharedPointer<LinkShare>)), this, SLOT(slotCreateShareFetched(const QSharedPointer<LinkShare>)));
-    connect(_manager, SIGNAL(linkShareRequiresPassword()), this, SLOT(slotCreateShareRequiresPassword()));
+    connect(_manager, SIGNAL(sharesFetched(QList<QSharedPointer<Share>>)), SLOT(slotSharesFetched(QList<QSharedPointer<Share>>)));
+    connect(_manager, SIGNAL(linkShareCreated(QSharedPointer<LinkShare>)), SLOT(slotCreateShareFetched(const QSharedPointer<LinkShare>)));
+    connect(_manager, SIGNAL(linkShareRequiresPassword()), SLOT(slotCreateShareRequiresPassword()));
+    connect(_manager, SIGNAL(serverError(int, QString)), SLOT(displayError(int, QString)));
 }
 
 void ShareDialog::done( int r ) {
@@ -320,10 +321,11 @@ void ShareDialog::slotSharesFetched(const QList<QSharedPointer<Share>> &shares)
             _ui->pushButton_copy->setEnabled(true);
 
             // Connect all shares signals to gui slots
-            connect(_share.data(), SIGNAL(expireDateSet()), this, SLOT(slotExpireSet()));
-            connect(_share.data(), SIGNAL(publicUploadSet()), this, SLOT(slotPublicUploadSet()));
-            connect(_share.data(), SIGNAL(passwordSet()), this, SLOT(slotPasswordSet()));
-            connect(_share.data(), SIGNAL(shareDeleted()), this, SLOT(slotDeleteShareFetched()));
+            connect(_share.data(), SIGNAL(expireDateSet()), SLOT(slotExpireSet()));
+            connect(_share.data(), SIGNAL(publicUploadSet()), SLOT(slotPublicUploadSet()));
+            connect(_share.data(), SIGNAL(passwordSet()), SLOT(slotPasswordSet()));
+            connect(_share.data(), SIGNAL(shareDeleted()), SLOT(slotDeleteShareFetched()));
+            connect(_share.data(), SIGNAL(serverError(int, QString)), SLOT(displayError(int, QString)));
 
             break;
         }
@@ -545,6 +547,13 @@ void ShareDialog::setShareCheckBoxTitle(bool haveShares)
 
 }
 
+void ShareDialog::displayError(int code, const QString &message)
+{
+    const QString arg = QString("%1, %2").arg(code).arg(message);
+    const QString errMsg = tr("OCS API error code: %1").arg(arg);
+    displayError(errMsg);
+}
+
 void ShareDialog::displayError(const QString& errMsg)
 {
     _ui->errorLabel->setText( errMsg );
index 7ffdee3b40933a790e7f26b2c321f219cb871e73..fea70152b34eb4231383f5179fc4527b15a40769 100644 (file)
@@ -66,6 +66,8 @@ private slots:
     void slotCheckBoxEditingClicked();
     void slotPublicUploadSet();
 
+    void displayError(int code, const QString &message);
+
     void done( int r );
 private:
     void setShareCheckBoxTitle(bool haveShares);