[Pkg-owncloud-commits] [owncloud-client] 14/175: ShareDialog: Improve error reporting for share API fails.
Sandro Knauß
hefee-guest at moszumanska.debian.org
Sat Aug 8 10:36:21 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 441eca86c4f5074959c9efe5254db845738b704c
Author: Christian Kamm <kamm at incasoftware.de>
Date: Thu May 7 10:23:39 2015 +0200
ShareDialog: Improve error reporting for share API fails.
This would have made debugging #3204 and #3136 easier.
---
src/gui/sharedialog.cpp | 98 +++++++++++++++++++++++++------------------------
src/gui/sharedialog.h | 15 ++++----
2 files changed, 59 insertions(+), 54 deletions(-)
diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp
index 3662a0a..31c44f6 100644
--- a/src/gui/sharedialog.cpp
+++ b/src/gui/sharedialog.cpp
@@ -144,6 +144,15 @@ void ShareDialog::done( int r ) {
QDialog::done(r);
}
+static int getJsonReturnCode(const QVariantMap &json, QString &message)
+{
+ //TODO proper checking
+ int code = json.value("ocs").toMap().value("meta").toMap().value("statuscode").toInt();
+ message = json.value("ocs").toMap().value("meta").toMap().value("message").toString();
+
+ return code;
+}
+
void ShareDialog::setExpireDate(const QDate &date)
{
if( _public_share_id == 0 ) {
@@ -162,16 +171,14 @@ void ShareDialog::setExpireDate(const QDate &date)
OcsShareJob *job = new OcsShareJob("PUT", url, _account, this);
job->setPostParams(postParams);
- connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotExpireSet(QString)));
+ connect(job, SIGNAL(jobFinished(QVariantMap)), this, SLOT(slotExpireSet(QVariantMap)));
job->start();
}
-void ShareDialog::slotExpireSet(const QString &reply)
+void ShareDialog::slotExpireSet(const QVariantMap &reply)
{
QString message;
- int code = checkJsonReturnCode(reply, message);
-
- qDebug() << Q_FUNC_INFO << "Status code: " << code;
+ int code = getJsonReturnCode(reply, message);
if (code != 100) {
displayError(code);
}
@@ -234,18 +241,15 @@ void ShareDialog::setPassword(const QString &password)
}
OcsShareJob *job = new OcsShareJob(verb, url, _account, this);
job->setPostParams(requestParams);
- connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotPasswordSet(QString)));
+ connect(job, SIGNAL(jobFinished(QVariantMap)), this, SLOT(slotPasswordSet(QVariantMap)));
job->start();
_passwordJobRunning = true;
}
-void ShareDialog::slotPasswordSet(const QString &reply)
+void ShareDialog::slotPasswordSet(const QVariantMap &reply)
{
QString message;
- int code = checkJsonReturnCode(reply, message);
-
- qDebug() << Q_FUNC_INFO << "Status code: " << code;
-
+ int code = getJsonReturnCode(reply, message);
if (code != 100) {
displayError(code);
}
@@ -267,23 +271,20 @@ void ShareDialog::getShares()
params.append(qMakePair(QString::fromLatin1("path"), _sharePath));
url.setQueryItems(params);
OcsShareJob *job = new OcsShareJob("GET", url, _account, this);
- connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotSharesFetched(QString)));
+ job->addPassStatusCode(404); // don't report error if share doesn't exist yet
+ connect(job, SIGNAL(jobFinished(QVariantMap)), this, SLOT(slotSharesFetched(QVariantMap)));
job->start();
}
-void ShareDialog::slotSharesFetched(const QString &reply)
+void ShareDialog::slotSharesFetched(const QVariantMap &reply)
{
QString message;
- int code = checkJsonReturnCode(reply, message);
-
- qDebug() << Q_FUNC_INFO << "Status code: " << code;
+ int code = getJsonReturnCode(reply, message);
if (code != 100 && code != 404) {
displayError(code);
}
- bool success = false;
- QVariantMap json = QtJson::parse(reply, success).toMap();
- ShareDialog::_shares = json.value("ocs").toMap().value("data").toList();
+ ShareDialog::_shares = reply.value("ocs").toMap().value("data").toList();
const QString versionString = AccountManager::instance()->account()->serverVersion();
Q_FOREACH(auto share, ShareDialog::_shares) {
@@ -384,12 +385,10 @@ void ShareDialog::setShareLink( const QString& url )
}
-void ShareDialog::slotDeleteShareFetched(const QString &reply)
+void ShareDialog::slotDeleteShareFetched(const QVariantMap &reply)
{
QString message;
- int code = checkJsonReturnCode(reply, message);
-
- qDebug() << Q_FUNC_INFO << "Status code: " << code;
+ int code = getJsonReturnCode(reply, message);
if (code != 100) {
displayError(code);
}
@@ -423,21 +422,22 @@ void ShareDialog::slotCheckBoxShareLinkClicked()
postParams.append(qMakePair(QString::fromLatin1("shareType"), QString::number(SHARETYPE_PUBLIC)));
OcsShareJob *job = new OcsShareJob("POST", url, _account, this);
job->setPostParams(postParams);
- connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotCreateShareFetched(QString)));
+ job->addPassStatusCode(403); // "password required" is not an error
+ connect(job, SIGNAL(jobFinished(QVariantMap)), this, SLOT(slotCreateShareFetched(QVariantMap)));
job->start();
} else {
_pi_link->startAnimation();
QUrl url = Account::concatUrlPath(_account->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(_public_share_id));
OcsShareJob *job = new OcsShareJob("DELETE", url, _account, this);
- connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteShareFetched(QString)));
+ connect(job, SIGNAL(jobFinished(QVariantMap)), this, SLOT(slotDeleteShareFetched(QVariantMap)));
job->start();
}
}
-void ShareDialog::slotCreateShareFetched(const QString &reply)
+void ShareDialog::slotCreateShareFetched(const QVariantMap &reply)
{
QString message;
- int code = checkJsonReturnCode(reply, message);
+ int code = getJsonReturnCode(reply, message);
_pi_link->stopAnimation();
if (code == 403) {
@@ -455,9 +455,7 @@ void ShareDialog::slotCreateShareFetched(const QString &reply)
return;
}
- bool success;
- QVariantMap json = QtJson::parse(reply, success).toMap();
- _public_share_id = json.value("ocs").toMap().values("data")[0].toMap().value("id").toULongLong();
+ _public_share_id = reply.value("ocs").toMap().values("data")[0].toMap().value("id").toULongLong();
getShares();
}
@@ -500,22 +498,6 @@ void ShareDialog::slotPushButtonCopyLinkPressed()
clipboard->setText(_shareUrl);
}
-int ShareDialog::checkJsonReturnCode(const QString &reply, QString &message)
-{
- bool success;
- QVariantMap json = QtJson::parse(reply, success).toMap();
-
- if (!success) {
- qDebug() << Q_FUNC_INFO << "Failed to parse reply";
- }
-
- //TODO proper checking
- int code = json.value("ocs").toMap().value("meta").toMap().value("statuscode").toInt();
- message = json.value("ocs").toMap().value("meta").toMap().value("message").toString();
-
- return code;
-}
-
void ShareDialog::setShareCheckBoxTitle(bool haveShares)
{
const QString noSharesTitle(tr("&Share link"));
@@ -672,6 +654,7 @@ OcsShareJob::OcsShareJob(const QByteArray &verb, const QUrl &url, AccountPtr acc
_verb(verb),
_url(url)
{
+ _passStatusCodes.append(100);
setIgnoreCredentialFailure(true);
}
@@ -680,6 +663,11 @@ void OcsShareJob::setPostParams(const QList<QPair<QString, QString> >& postParam
_postParams = postParams;
}
+void OcsShareJob::addPassStatusCode(int code)
+{
+ _passStatusCodes.append(code);
+}
+
void OcsShareJob::start()
{
QNetworkRequest req;
@@ -711,7 +699,23 @@ void OcsShareJob::start()
bool OcsShareJob::finished()
{
- emit jobFinished(reply()->readAll());
+ const QString replyData = reply()->readAll();
+
+ bool success;
+ QVariantMap json = QtJson::parse(replyData, success).toMap();
+ if (!success) {
+ qDebug() << "Could not parse reply to" << _verb << _url << _postParams
+ << ":" << replyData;
+ }
+
+ QString message;
+ const int statusCode = getJsonReturnCode(json, message);
+ if (!_passStatusCodes.contains(statusCode)) {
+ qDebug() << "Reply to" << _verb << _url << _postParams
+ << "has unexpected status code:" << statusCode << replyData;
+ }
+
+ emit jobFinished(json);
return true;
}
diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h
index 26763a7..600e35e 100644
--- a/src/gui/sharedialog.h
+++ b/src/gui/sharedialog.h
@@ -29,17 +29,19 @@ public:
explicit OcsShareJob(const QByteArray& verb, const QUrl& url, AccountPtr account, QObject* parent = 0);
void setPostParams(const QList<QPair<QString, QString> >& postParams);
+ void addPassStatusCode(int code);
public slots:
void start() Q_DECL_OVERRIDE;
signals:
- void jobFinished(QString reply);
+ void jobFinished(QVariantMap reply);
private slots:
virtual bool finished() Q_DECL_OVERRIDE;
private:
QByteArray _verb;
QUrl _url;
QList<QPair<QString, QString> > _postParams;
+ QVector<int> _passStatusCodes;
};
@@ -62,11 +64,11 @@ public:
void getShares();
private slots:
- void slotSharesFetched(const QString &reply);
- void slotCreateShareFetched(const QString &reply);
- void slotDeleteShareFetched(const QString &reply);
- void slotPasswordSet(const QString &reply);
- void slotExpireSet(const QString &reply);
+ void slotSharesFetched(const QVariantMap &reply);
+ void slotCreateShareFetched(const QVariantMap &reply);
+ void slotDeleteShareFetched(const QVariantMap &reply);
+ void slotPasswordSet(const QVariantMap &reply);
+ void slotExpireSet(const QVariantMap &reply);
void slotCalendarClicked(const QDate &date);
void slotCheckBoxShareLinkClicked();
void slotCheckBoxPasswordClicked();
@@ -101,7 +103,6 @@ private:
qulonglong _public_share_id;
void setPassword(const QString &password);
void setExpireDate(const QDate &date);
- int checkJsonReturnCode(const QString &reply, QString &message);
QProgressIndicator *_pi_link;
QProgressIndicator *_pi_password;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list