diff options
author | Tobias Markmann <tm@ayena.de> | 2017-02-07 13:03:53 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2017-02-10 09:39:53 (GMT) |
commit | 72824c12ab6c15501e6e17c15465d9b27c6f7e1b (patch) | |
tree | 9035caf97724f42c8917b0e4cbd50cbe9d948f87 | |
parent | d81f9e750627a83c12afeb4718eb12bbb53f5270 (diff) | |
download | swift-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.cpp | 1 | ||||
-rw-r--r-- | Swift/Controllers/ShowProfileController.cpp | 17 | ||||
-rw-r--r-- | Swift/Controllers/ShowProfileController.h | 4 | ||||
-rw-r--r-- | Swift/QtUI/QtProfileWindow.cpp | 4 | ||||
-rw-r--r-- | Swiften/Network/GConfProxyProvider.cpp | 2 |
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> } |