making away state and user modes persistent
[quassel.git] / src / core / corenetwork.cpp
index 7a34d65..314f3d2 100644 (file)
@@ -181,6 +181,16 @@ void CoreNetwork::disconnectFromIrc(bool requested, const QString &reason) {
   _quitRequested = requested; // see socketDisconnected();
   _autoReconnectTimer.stop();
   _autoReconnectCount = 0; // prohibiting auto reconnect
+
+  IrcUser *me_ = me();
+  if(me_) {
+    QString awayMsg;
+    if(me_->isAway())
+      awayMsg = me_->awayMessage();
+    Core::setAwayMessage(userId(), networkId(), awayMsg);
+    Core::setUserModes(userId(), networkId(), me_->userModes());
+  }
+
   displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Disconnecting."));
   if(socket.state() == QAbstractSocket::UnconnectedState) {
     socketDisconnected();
@@ -404,19 +414,21 @@ void CoreNetwork::sendPerform() {
   }
 
   // rejoin channels we've been in
-  QStringList channels, keys;
-  foreach(QString chan, persistentChannels()) {
-    QString key = channelKey(chan);
-    if(!key.isEmpty()) {
-      channels.prepend(chan);
-      keys.prepend(key);
-    } else {
-      channels.append(chan);
+  if(rejoinChannels()) {
+    QStringList channels, keys;
+    foreach(QString chan, coreSession()->persistentChannels(networkId()).keys()) {
+      QString key = channelKey(chan);
+      if(!key.isEmpty()) {
+        channels.prepend(chan);
+        keys.prepend(key);
+      } else {
+        channels.append(chan);
+      }
     }
+    QString joinString = QString("%1 %2").arg(channels.join(",")).arg(keys.join(",")).trimmed();
+    if(!joinString.isEmpty())
+      userInputHandler()->handleJoin(statusBuf, joinString);
   }
-  QString joinString = QString("%1 %2").arg(channels.join(",")).arg(keys.join(",")).trimmed();
-  if(!joinString.isEmpty())
-    userInputHandler()->handleJoin(statusBuf, joinString);
 }
 
 void CoreNetwork::setUseAutoReconnect(bool use) {