summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2017-02-07 13:03:53 (GMT)
committerTobias Markmann <tm@ayena.de>2017-02-10 09:39:53 (GMT)
commit72824c12ab6c15501e6e17c15465d9b27c6f7e1b (patch)
tree9035caf97724f42c8917b0e4cbd50cbe9d948f87
parentd81f9e750627a83c12afeb4718eb12bbb53f5270 (diff)
downloadswift-72824c12ab6c15501e6e17c15465d9b27c6f7e1b.zip
swift-72824c12ab6c15501e6e17c15465d9b27c6f7e1b.tar.bz2
Display error message in profile window if vCard request failed
Also fixed an typo error in GConfProxyProvider.cpp that prevented compilation on Linux. Test-Information: Tested with an XMPP server with vCard support disabled and also with vCard support enabled. Tested profile window and profile editor window. The profile window will show cached vCard data if present and the error message. The profile editor window will only show the error message in case of an error. Tested profile window and profile editor window in a scenario where vCard support is first enabled in the server, then disabled, and finally enabled again, and opening the editors in between. Potential error messages were always correctly cleared before showing the dialog. Tested on macOS 10.12.3 with Qt 5.7.1. Change-Id: I3958c35286f6f0096d1605c29816f666530aae03
-rw-r--r--Swift/Controllers/ProfileController.cpp1
-rw-r--r--Swift/Controllers/ShowProfileController.cpp17
-rw-r--r--Swift/Controllers/ShowProfileController.h4
-rw-r--r--Swift/QtUI/QtProfileWindow.cpp4
-rw-r--r--Swiften/Network/GConfProxyProvider.cpp2
5 files changed, 23 insertions, 5 deletions
diff --git a/Swift/Controllers/ProfileController.cpp b/Swift/Controllers/ProfileController.cpp
index d000164..1a92f29 100644
--- a/Swift/Controllers/ProfileController.cpp
+++ b/Swift/Controllers/ProfileController.cpp
@@ -48,6 +48,7 @@ void ProfileController::handleUIEvent(UIEvent::ref event) {
gettingVCard = true;
updateDialogStatus();
vcardManager->requestOwnVCard();
+ profileWindow->setError("");
profileWindow->show();
}
diff --git a/Swift/Controllers/ShowProfileController.cpp b/Swift/Controllers/ShowProfileController.cpp
index b379141..a7d7d04 100644
--- a/Swift/Controllers/ShowProfileController.cpp
+++ b/Swift/Controllers/ShowProfileController.cpp
@@ -5,7 +5,7 @@
*/
/*
- * Copyright (c) 2014-2016 Isode Limited.
+ * Copyright (c) 2014-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
@@ -17,6 +17,7 @@
#include <Swiften/VCards/VCardManager.h>
+#include <Swift/Controllers/Intl.h>
#include <Swift/Controllers/UIEvents/ShowProfileForRosterItemUIEvent.h>
#include <Swift/Controllers/UIEvents/UIEventStream.h>
#include <Swift/Controllers/UIInterfaces/ProfileWindowFactory.h>
@@ -26,6 +27,7 @@ namespace Swift {
ShowProfileController::ShowProfileController(VCardManager* vcardManager, ProfileWindowFactory* profileWindowFactory, UIEventStream* uiEventStream) : vcardManager(vcardManager), profileWindowFactory(profileWindowFactory), uiEventStream(uiEventStream) {
uiEventStream->onUIEvent.connect(boost::bind(&ShowProfileController::handleUIEvent, this, _1));
vcardManager->onVCardChanged.connect(boost::bind(&ShowProfileController::handleVCardChanged, this, _1, _2));
+ vcardManager->onVCardRetrievalError.connect(boost::bind(&ShowProfileController::handleVCardRetrievalError, this, _1, _2));
}
ShowProfileController::~ShowProfileController() {
@@ -34,6 +36,7 @@ ShowProfileController::~ShowProfileController() {
delete jidWndPair.second;
}
+ vcardManager->onVCardRetrievalError.disconnect(boost::bind(&ShowProfileController::handleVCardRetrievalError, this, _1, _2));
vcardManager->onVCardChanged.disconnect(boost::bind(&ShowProfileController::handleVCardChanged, this, _1, _2));
uiEventStream->onUIEvent.disconnect(boost::bind(&ShowProfileController::handleUIEvent, this, _1));
}
@@ -55,6 +58,7 @@ void ShowProfileController::handleUIEvent(UIEvent::ref event) {
} else {
newProfileWindow->setProcessing(true);
}
+ newProfileWindow->setError("");
newProfileWindow->show();
} else {
openedProfileWindows[showProfileEvent->getJID()]->show();
@@ -76,4 +80,15 @@ void ShowProfileController::handleProfileWindowAboutToBeClosed(const JID& profil
openedProfileWindows.erase(profileJid);
}
+void ShowProfileController::handleVCardRetrievalError(const JID& jid, ErrorPayload::ref /* error */) {
+ if (openedProfileWindows.find(jid) == openedProfileWindows.end()) {
+ return;
+ }
+
+ auto profileWindow = openedProfileWindows[jid];
+ profileWindow->setError(QT_TRANSLATE_NOOP("", "Failed to retrieve recent profile for user."));
+ profileWindow->setProcessing(false);
+ profileWindow->show();
+}
+
}
diff --git a/Swift/Controllers/ShowProfileController.h b/Swift/Controllers/ShowProfileController.h
index 4f23c19..0d01ba1 100644
--- a/Swift/Controllers/ShowProfileController.h
+++ b/Swift/Controllers/ShowProfileController.h
@@ -5,13 +5,14 @@
*/
/*
- * Copyright (c) 2016 Isode Limited.
+ * Copyright (c) 2016-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
+#include <Swiften/Elements/ErrorPayload.h>
#include <Swiften/Elements/VCard.h>
#include <Swiften/JID/JID.h>
@@ -32,6 +33,7 @@ namespace Swift {
void handleUIEvent(UIEvent::ref event);
void handleVCardChanged(const JID&, VCard::ref);
void handleProfileWindowAboutToBeClosed(const JID& profileJid);
+ void handleVCardRetrievalError(const JID& jid, ErrorPayload::ref error);
private:
VCardManager* vcardManager;
diff --git a/Swift/QtUI/QtProfileWindow.cpp b/Swift/QtUI/QtProfileWindow.cpp
index 80e275b..10326bb 100644
--- a/Swift/QtUI/QtProfileWindow.cpp
+++ b/Swift/QtUI/QtProfileWindow.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2016 Isode Limited.
+ * Copyright (c) 2011-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
@@ -74,7 +74,6 @@ void QtProfileWindow::setEnabled(bool b) {
void QtProfileWindow::setEditable(bool b) {
ui->throbberLabel->setVisible(b);
- ui->errorLabel->setVisible(b);
ui->savePushButton->setVisible(b);
ui->vcard->setEditable(b);
updateTitle();
@@ -103,6 +102,7 @@ void QtProfileWindow::setError(const std::string& error) {
else {
ui->errorLabel->setText("");
}
+ ui->errorLabel->setVisible(!error.empty());
}
void QtProfileWindow::show() {
diff --git a/Swiften/Network/GConfProxyProvider.cpp b/Swiften/Network/GConfProxyProvider.cpp
index 40cd97c..eade450 100644
--- a/Swiften/Network/GConfProxyProvider.cpp
+++ b/Swiften/Network/GConfProxyProvider.cpp
@@ -17,7 +17,7 @@
#include <iostream>
-export "C" {
+extern "C" {
#include <gconf/gconf-client.h>
}