From ff69ed502225031685c97bdce203d5fa915ab928 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Wed, 11 Feb 2009 14:28:30 +0100 Subject: [PATCH 1/1] fixes #526 - session restore takes now care of last away state and user modes --- src/core/corenetwork.cpp | 35 +++++++++++++++++++++++++++++++++++ src/core/corenetwork.h | 1 + 2 files changed, 36 insertions(+) diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 314f3d29..7d62b763 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -386,6 +386,20 @@ void CoreNetwork::networkInitialized() { _autoReconnectCount = autoReconnectRetries(); } + // restore away state + userInputHandler()->handleAway(BufferInfo(), Core::awayMessage(userId(), networkId())); + + // restore old user modes if server default mode is set. + IrcUser *me_ = me(); + if(me_) { + if(!me_->userModes().isEmpty()) { + restoreUserModes(); + } else { + connect(me_, SIGNAL(userModesSet(QString)), this, SLOT(restoreUserModes())); + connect(me_, SIGNAL(userModesAdded(QString)), this, SLOT(restoreUserModes())); + } + } + sendPerform(); _pingTimer.start(); @@ -431,6 +445,27 @@ void CoreNetwork::sendPerform() { } } +void CoreNetwork::restoreUserModes() { + IrcUser *me_ = me(); + Q_ASSERT(me_); + + disconnect(me_, SIGNAL(userModesSet(QString)), this, SLOT(restoreUserModes())); + disconnect(me_, SIGNAL(userModesAdded(QString)), this, SLOT(restoreUserModes())); + + QString removeModes; + QString addModes = Core::userModes(userId(), networkId()); + QString currentModes = me_->userModes(); + + removeModes = currentModes; + removeModes.remove(QRegExp(QString("[%1]").arg(addModes))); + addModes.remove(QRegExp(QString("[%1]").arg(currentModes))); + + removeModes = QString("%1 -%2").arg(me_->nick(), removeModes); + addModes = QString("%1 +%2").arg(me_->nick(), addModes); + userInputHandler()->handleMode(BufferInfo(), removeModes); + userInputHandler()->handleMode(BufferInfo(), addModes); +} + void CoreNetwork::setUseAutoReconnect(bool use) { Network::setUseAutoReconnect(use); if(!use) diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index f0887070..6c6f9782 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -129,6 +129,7 @@ private slots: void networkInitialized(); void sendPerform(); + void restoreUserModes(); void doAutoReconnect(); void sendPing(); void sendAutoWho(); -- 2.20.1