summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2011-11-29 16:35:50 (GMT)
committerKevin Smith <git@kismith.co.uk>2011-12-13 08:17:10 (GMT)
commit7d19f0d81371d86d530d0e7083a04db914ce6745 (patch)
tree8ad4647f8f87591e97d3478fd493bdd81425cc83
parentdd721764a3605d14e0a8970e8bf0976657da8e4a (diff)
downloadswift-contrib-7d19f0d81371d86d530d0e7083a04db914ce6745.zip
swift-contrib-7d19f0d81371d86d530d0e7083a04db914ce6745.tar.bz2
Change MainController to not log back in if there's an error during logout
Resolves an issue where sending the stream close triggers an error.
-rw-r--r--Swift/Controllers/MainController.cpp13
-rw-r--r--Swift/Controllers/MainController.h1
2 files changed, 13 insertions, 1 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index d485abc..2f9c42e 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -118,18 +118,19 @@ MainController::MainController(
chatsManager_ = NULL;
eventWindowController_ = NULL;
profileController_ = NULL;
contactEditController_ = NULL;
userSearchControllerChat_ = NULL;
userSearchControllerAdd_ = NULL;
adHocManager_ = NULL;
quitRequested_ = false;
clientInitialized_ = false;
+ offlineRequested_ = false;
timeBeforeNextReconnect_ = -1;
dock_ = dock;
uiEventStream_ = new UIEventStream();
notifier_ = new TogglableNotifier(notifier);
eventController_ = new EventController();
eventController_->onEventQueueLengthChange.connect(boost::bind(&MainController::handleEventQueueLengthChange, this, _1));
@@ -360,20 +361,22 @@ void MainController::reconnectAfterError() {
}
void MainController::handleChangeStatusRequest(StatusShow::Type show, const std::string &statusText) {
boost::shared_ptr<Presence> presence(new Presence());
if (show == StatusShow::None) {
// Note: this is misleading, None doesn't mean unavailable on the wire.
presence->setType(Presence::Unavailable);
resetPendingReconnects();
myStatusLooksOnline_ = false;
+ offlineRequested_ = true;
}
else {
+ offlineRequested_ = false;
presence->setShow(show);
}
presence->setStatus(statusText);
statusTracker_->setRequestedPresence(presence);
if (presence->getType() != Presence::Unavailable) {
profileSettings_->storeInt("lastShow", presence->getShow());
profileSettings_->storeString("lastStatus", presence->getStatus());
}
if (presence->getType() != Presence::Unavailable && !client_->isAvailable()) {
@@ -495,18 +498,24 @@ void MainController::performLoginFromCachedCredentials() {
client_->disconnect();
}
systemTrayController_->setConnecting();
if (rosterController_) {
rosterController_->getWindow()->setConnecting();
}
ClientOptions clientOptions;
clientOptions.forgetPassword = eagleMode_;
clientOptions.useTLS = eagleMode_ ? ClientOptions::RequireTLS : ClientOptions::UseTLSWhenAvailable;
+ if (clientJID.getDomain() == "wonderland.lit") {
+ clientOptions.boshURL = URL("http", "192.168.1.185", 5280, "http-bind/");
+ }
+ else if (clientJID.getDomain() == "prosody.doomsong.co.uk") {
+ clientOptions.boshURL = URL("http", "192.168.1.130", 5280, "http-bind/");
+ }
client_->connect(clientOptions);
}
void MainController::handleDisconnected(const boost::optional<ClientError>& error) {
if (eagleMode_) {
purgeCachedCredentials();
}
if (quitRequested_) {
resetClient();
@@ -564,19 +573,21 @@ void MainController::handleDisconnected(const boost::optional<ClientError>& erro
else if (!rosterController_) { //hasn't been logged in yet
signOut();
loginWindow_->setMessage(message);
loginWindow_->setIsLoggingIn(false);
} else {
logout();
if (eagleMode_) {
message = str(format(QT_TRANSLATE_NOOP("", "Disconnected from %1%: %2%. To reconnect, Sign Out and provide your password again.")) % jid_.getDomain() % message);
} else {
- setReconnectTimer();
+ if (!offlineRequested_) {
+ setReconnectTimer();
+ }
if (lastDisconnectError_) {
message = str(format(QT_TRANSLATE_NOOP("", "Reconnect to %1% failed: %2%. Will retry in %3% seconds.")) % jid_.getDomain() % message % boost::lexical_cast<std::string>(timeBeforeNextReconnect_));
lastDisconnectError_->conclude();
} else {
message = str(format(QT_TRANSLATE_NOOP("", "Disconnected from %1%: %2%.")) % jid_.getDomain() % message);
}
lastDisconnectError_ = boost::shared_ptr<ErrorEvent>(new ErrorEvent(JID(jid_.getDomain()), message));
eventController_->handleIncomingEvent(lastDisconnectError_);
}
diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h
index 12028d7..013f8bb 100644
--- a/Swift/Controllers/MainController.h
+++ b/Swift/Controllers/MainController.h
@@ -158,14 +158,15 @@ namespace Swift {
boost::shared_ptr<ErrorEvent> lastDisconnectError_;
bool useDelayForLatency_;
UserSearchController* userSearchControllerChat_;
UserSearchController* userSearchControllerAdd_;
int timeBeforeNextReconnect_;
Timer::ref reconnectTimer_;
StatusTracker* statusTracker_;
bool myStatusLooksOnline_;
bool quitRequested_;
+ bool offlineRequested_;
static const int SecondsToWaitBeforeForceQuitting;
bool eagleMode_;
FileTransferOverview* ftOverview_;
};
}