Fix potential core crash
[quassel.git] / src / core / coresession.cpp
index d81f9c0..7f2d808 100644 (file)
@@ -84,8 +84,8 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent)
   loadSettings();
   initScriptEngine();
 
-  connect(&(Core::instance()->syncTimer()), SIGNAL(timeout()), _bufferSyncer, SLOT(storeDirtyIds()));
-  connect(&(Core::instance()->syncTimer()), SIGNAL(timeout()), _bufferViewManager, SLOT(saveBufferViews()));
+  // periodically save our session state
+  connect(&(Core::instance()->syncTimer()), SIGNAL(timeout()), this, SLOT(saveSessionState()));
 
   p->synchronize(_bufferSyncer);
   p->synchronize(&aliasManager());
@@ -154,6 +154,8 @@ void CoreSession::saveSessionState() const {
   _bufferSyncer->storeDirtyIds();
   _bufferViewManager->saveBufferViews();
   _networkConfig->save();
+  _aliasManager.save();
+  _ignoreListManager.save();
 }
 
 void CoreSession::restoreSessionState() {
@@ -248,8 +250,9 @@ void CoreSession::processMessages() {
     const RawMessage &rawMsg = _messageQueue.first();
     BufferInfo bufferInfo = Core::bufferInfo(user(), rawMsg.networkId, rawMsg.bufferType, rawMsg.target);
     Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, rawMsg.flags);
-    
-    networkName = _networks.value(bufferInfo.networkId())->networkName();
+
+    CoreNetwork *currentNetwork = network(bufferInfo.networkId());
+    networkName = currentNetwork ? currentNetwork->networkName() : QString("");
     // if message is ignored with "HardStrictness" we discard it here
     if(_ignoreListManager.match(msg, networkName) != IgnoreListManager::HardStrictness) {
       Core::storeMessage(msg);
@@ -269,7 +272,8 @@ void CoreSession::processMessages() {
       }
 
       Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, rawMsg.flags);
-      networkName = _networks.value(bufferInfo.networkId())->networkName();
+      CoreNetwork *currentNetwork = network(bufferInfo.networkId());
+      networkName = currentNetwork ? currentNetwork->networkName() : QString("");
       // if message is ignored with "HardStrictness" we discard it here
       if(_ignoreListManager.match(msg, networkName) == IgnoreListManager::HardStrictness)
         continue;