diff options
-rw-r--r-- | Swift/Controllers/MainController.cpp | 13 | ||||
-rw-r--r-- | Swift/Controllers/MainController.h | 1 |
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_; }; } |