Internal changes to message redirection. As a side effect this will
authorMarcus Eggenberger <egs@quassel-irc.org>
Tue, 13 Jan 2009 17:54:50 +0000 (18:54 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 13 Jan 2009 17:54:50 +0000 (18:54 +0100)
reset your redirection settings. Automagicaly fixes #454

src/client/buffersettings.h
src/client/messagefilter.cpp
src/client/messagefilter.h
src/qtui/settingspages/generalsettingspage.cpp

index a86b12a..81667d2 100644 (file)
 
 class BufferSettings : public ClientSettings {
 public:
 
 class BufferSettings : public ClientSettings {
 public:
+  enum RedirectTarget {
+    DefaultBuffer = 0x01,
+    StatusBuffer  = 0x02,
+    CurrentBuffer = 0x04
+  };
+
   BufferSettings(const QString &idString = "__default__");
   BufferSettings(BufferId bufferId);
 
   inline void setValue(const QString &key, const QVariant &data) { setLocalValue(key, data); }
   inline QVariant value(const QString &key, const QVariant &def = QVariant()) { return localValue(key, def); }
 
   BufferSettings(const QString &idString = "__default__");
   BufferSettings(BufferId bufferId);
 
   inline void setValue(const QString &key, const QVariant &data) { setLocalValue(key, data); }
   inline QVariant value(const QString &key, const QVariant &def = QVariant()) { return localValue(key, def); }
 
+  // Message Filter (default and per view)
   inline bool hasFilter() { return localValue("hasMessageTypeFilter", false).toBool(); }
   inline int messageFilter() { return localValue("MessageTypeFilter", 0).toInt(); }
   void setMessageFilter(int filter);
   void filterMessage(Message::Type msgType, bool filter);
   void removeFilter();
 
   inline bool hasFilter() { return localValue("hasMessageTypeFilter", false).toBool(); }
   inline int messageFilter() { return localValue("MessageTypeFilter", 0).toInt(); }
   void setMessageFilter(int filter);
   void filterMessage(Message::Type msgType, bool filter);
   void removeFilter();
 
+  // user state icons for query buffers (default)
   inline bool showUserStateIcons() { return localValue("ShowUserStateIcons", true).toBool(); }
   inline void enableUserStateIcons(bool enabled) { setLocalValue("ShowUserStateIcons", enabled); }
   inline bool showUserStateIcons() { return localValue("ShowUserStateIcons", true).toBool(); }
   inline void enableUserStateIcons(bool enabled) { setLocalValue("ShowUserStateIcons", enabled); }
+
+
+  // redirection settings (default)
+  inline int userNoticesTarget() { return localValue("UserNoticesTarget", DefaultBuffer).toInt(); }
+  inline void setUserNoticesTarget(int target) { setLocalValue("UserNoticesTarget", target); }
+  inline int serverNoticesTarget() { return localValue("ServerNoticesTarget", StatusBuffer).toInt(); }
+  inline void setServerNoticesTarget(int target) { setLocalValue("ServerNoticesTarget", target); }
+  inline int errorMsgsTarget() { return localValue("ErrorMsgsTarget", DefaultBuffer).toInt(); }
+  inline void setErrorMsgsTarget(int target) { setLocalValue("ErrorMsgsTarget", target); }
 };
 
 
 };
 
 
index 6a05e9e..c9c44d1 100644 (file)
@@ -47,17 +47,9 @@ void MessageFilter::init() {
   setDynamicSortFilter(true);
 
   BufferSettings defaultSettings;
   setDynamicSortFilter(true);
 
   BufferSettings defaultSettings;
-  defaultSettings.notify("UserNoticesInDefaultBuffer", this, SLOT(messageRedirectionChanged()));
-  defaultSettings.notify("UserNoticesInStatusBuffer", this, SLOT(messageRedirectionChanged()));
-  defaultSettings.notify("UserNoticesInCurrentBuffer", this, SLOT(messageRedirectionChanged()));
-
-  defaultSettings.notify("serverNoticesInDefaultBuffer", this, SLOT(messageRedirectionChanged()));
-  defaultSettings.notify("serverNoticesInStatusBuffer", this, SLOT(messageRedirectionChanged()));
-  defaultSettings.notify("serverNoticesInCurrentBuffer", this, SLOT(messageRedirectionChanged()));
-
-  defaultSettings.notify("ErrorMsgsInDefaultBuffer", this, SLOT(messageRedirectionChanged()));
-  defaultSettings.notify("ErrorMsgsInStatusBuffer", this, SLOT(messageRedirectionChanged()));
-  defaultSettings.notify("ErrorMsgsInCurrentBuffer", this, SLOT(messageRedirectionChanged()));
+  defaultSettings.notify("UserNoticesTarget", this, SLOT(messageRedirectionChanged()));
+  defaultSettings.notify("ServerNoticesTarget", this, SLOT(messageRedirectionChanged()));
+  defaultSettings.notify("ErrorMsgsTarget", this, SLOT(messageRedirectionChanged()));
   messageRedirectionChanged();
 
   _messageTypeFilter = defaultSettings.messageFilter();
   messageRedirectionChanged();
 
   _messageTypeFilter = defaultSettings.messageFilter();
@@ -88,19 +80,25 @@ void MessageFilter::messageTypeFilterChanged() {
 
 void MessageFilter::messageRedirectionChanged() {
   BufferSettings bufferSettings;
 
 void MessageFilter::messageRedirectionChanged() {
   BufferSettings bufferSettings;
-  _userNoticesInDefaultBuffer = bufferSettings.value("UserNoticesInDefaultBuffer", QVariant(true)).toBool();
-  _userNoticesInStatusBuffer = bufferSettings.value("UserNoticesInStatusBuffer", QVariant(false)).toBool();
-  _userNoticesInCurrentBuffer = bufferSettings.value("UserNoticesInCurrentBuffer", QVariant(false)).toBool();
+  bool changed = false;
+
+  if(_userNoticesTarget != bufferSettings.userNoticesTarget()) {
+    _userNoticesTarget = bufferSettings.userNoticesTarget();
+    changed = true;
+  }
 
 
-  _serverNoticesInDefaultBuffer = bufferSettings.value("ServerNoticesInDefaultBuffer", QVariant(false)).toBool();
-  _serverNoticesInStatusBuffer = bufferSettings.value("ServerNoticesInStatusBuffer", QVariant(true)).toBool();
-  _serverNoticesInCurrentBuffer = bufferSettings.value("ServerNoticesInCurrentBuffer", QVariant(false)).toBool();
+  if(_serverNoticesTarget != bufferSettings.serverNoticesTarget()) {
+    _serverNoticesTarget = bufferSettings.serverNoticesTarget();
+    changed = true;
+  }
 
 
-  _errorMsgsInDefaultBuffer = bufferSettings.value("ErrorMsgsInDefaultBuffer", QVariant(true)).toBool();
-  _errorMsgsInStatusBuffer = bufferSettings.value("ErrorMsgsInStatusBuffer", QVariant(false)).toBool();
-  _errorMsgsInCurrentBuffer = bufferSettings.value("ErrorMsgsInCurrentBuffer", QVariant(false)).toBool();
+  if(_errorMsgsTarget != bufferSettings.errorMsgsTarget()) {
+    _errorMsgsTarget = bufferSettings.errorMsgsTarget();
+    changed = true;
+  }
 
 
-  invalidateFilter();
+  if(changed)
+    invalidateFilter();
 }
 
 QString MessageFilter::idString() const {
 }
 
 QString MessageFilter::idString() const {
@@ -143,59 +141,51 @@ bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar
     return false;
 
   bool redirect = false;
     return false;
 
   bool redirect = false;
-  bool inDefaultBuffer;
-  bool inStatusBuffer;
-  bool inCurrentBuffer;
-
+  int redirectionTarget = 0;
   switch(messageType) {
   case Message::Notice:
     if(Client::networkModel()->bufferType(bufferId) != BufferInfo::ChannelBuffer) {
       redirect = true;
       if(flags & Message::ServerMsg) {
        // server notice
   switch(messageType) {
   case Message::Notice:
     if(Client::networkModel()->bufferType(bufferId) != BufferInfo::ChannelBuffer) {
       redirect = true;
       if(flags & Message::ServerMsg) {
        // server notice
-       inDefaultBuffer = _serverNoticesInDefaultBuffer;
-       inStatusBuffer = _serverNoticesInStatusBuffer;
-       inCurrentBuffer = _serverNoticesInCurrentBuffer;
+       redirectionTarget = _serverNoticesTarget;
       } else {
       } else {
-       inDefaultBuffer = _userNoticesInDefaultBuffer;
-       inStatusBuffer = _userNoticesInStatusBuffer;
-       inCurrentBuffer = _userNoticesInCurrentBuffer;
+       redirectionTarget = _userNoticesTarget;
       }
     }
     break;
   case Message::Error:
     redirect = true;
       }
     }
     break;
   case Message::Error:
     redirect = true;
-    inDefaultBuffer = _errorMsgsInDefaultBuffer;
-    inStatusBuffer = _errorMsgsInStatusBuffer;
-    inCurrentBuffer = _errorMsgsInCurrentBuffer;
+    redirectionTarget = _errorMsgsTarget;
     break;
   default:
     break;
   }
 
   if(redirect) {
     break;
   default:
     break;
   }
 
   if(redirect) {
-    if(_redirectedMsgs.contains(msgId))
-      return true;
 
 
-    if(inDefaultBuffer && _validBuffers.contains(bufferId))
+    if(redirectionTarget & BufferSettings::DefaultBuffer && _validBuffers.contains(bufferId))
       return true;
 
       return true;
 
-    if(inCurrentBuffer && !(flags & Message::Backlog) && _validBuffers.contains(Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value<BufferId>())) {
+    if(redirectionTarget & BufferSettings::CurrentBuffer && !(flags & Message::Backlog)) {
       BufferId redirectedTo = sourceModel()->data(sourceIdx, MessageModel::RedirectedToRole).value<BufferId>();
       if(!redirectedTo.isValid()) {
       BufferId redirectedTo = sourceModel()->data(sourceIdx, MessageModel::RedirectedToRole).value<BufferId>();
       if(!redirectedTo.isValid()) {
-       sourceModel()->setData(sourceIdx, QVariant::fromValue<BufferId>(singleBufferId()), MessageModel::RedirectedToRole);
-       _redirectedMsgs << msgId;
-       return true;
-      } else if(_validBuffers.contains(redirectedTo)) {
-       return true;
+       BufferId redirectedTo = Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value<BufferId>();
+       if(redirectedTo.isValid())
+         sourceModel()->setData(sourceIdx, QVariant::fromValue<BufferId>(redirectedTo), MessageModel::RedirectedToRole);
       }
       }
-    }
 
 
-    QSet<BufferId>::const_iterator idIter = _validBuffers.constBegin();
-    while(idIter != _validBuffers.constEnd()) {
-      if(inStatusBuffer && Client::networkModel()->bufferType(*idIter) == BufferInfo::StatusBuffer)
+      if(_validBuffers.contains(redirectedTo))
        return true;
        return true;
-      idIter++;
+    }
+
+    if(redirectionTarget & BufferSettings::StatusBuffer) {
+      QSet<BufferId>::const_iterator idIter = _validBuffers.constBegin();
+      while(idIter != _validBuffers.constEnd()) {
+       if(Client::networkModel()->bufferType(*idIter) == BufferInfo::StatusBuffer)
+         return true;
+       idIter++;
+      }
     }
 
     return false;
     }
 
     return false;
index 60133d2..84d089f 100644 (file)
@@ -59,21 +59,12 @@ private:
   void init();
 
   QSet<BufferId> _validBuffers;
   void init();
 
   QSet<BufferId> _validBuffers;
-  mutable QSet<MsgId> _redirectedMsgs;
   QMultiHash<QString, uint> _filteredQuitMsgs;
   int _messageTypeFilter;
 
   QMultiHash<QString, uint> _filteredQuitMsgs;
   int _messageTypeFilter;
 
-  bool _userNoticesInDefaultBuffer;
-  bool _userNoticesInStatusBuffer;
-  bool _userNoticesInCurrentBuffer;
-
-  bool _serverNoticesInDefaultBuffer;
-  bool _serverNoticesInStatusBuffer;
-  bool _serverNoticesInCurrentBuffer;
-
-  bool _errorMsgsInDefaultBuffer;
-  bool _errorMsgsInStatusBuffer;
-  bool _errorMsgsInCurrentBuffer;
+  int _userNoticesTarget;
+  int _serverNoticesTarget;
+  int _errorMsgsTarget;
 };
 
 #endif
 };
 
 #endif
index 5b44914..081baa4 100644 (file)
@@ -109,17 +109,20 @@ void GeneralSettingsPage::load() {
 
   // bufferSettings:
   BufferSettings bufferSettings;
 
   // bufferSettings:
   BufferSettings bufferSettings;
-  SettingsPage::load(ui.userNoticesInDefaultBuffer, bufferSettings.value("UserNoticesInDefaultBuffer", QVariant(true)).toBool());
-  SettingsPage::load(ui.userNoticesInStatusBuffer, bufferSettings.value("UserNoticesInStatusBuffer", QVariant(false)).toBool());
-  SettingsPage::load(ui.userNoticesInCurrentBuffer, bufferSettings.value("UserNoticesInCurrentBuffer", QVariant(false)).toBool());
+  int redirectTarget = bufferSettings.userNoticesTarget();
+  SettingsPage::load(ui.userNoticesInDefaultBuffer, redirectTarget & BufferSettings::DefaultBuffer);
+  SettingsPage::load(ui.userNoticesInStatusBuffer, redirectTarget & BufferSettings::StatusBuffer);
+  SettingsPage::load(ui.userNoticesInCurrentBuffer, redirectTarget & BufferSettings::CurrentBuffer);
 
 
-  SettingsPage::load(ui.serverNoticesInDefaultBuffer, bufferSettings.value("ServerNoticesInDefaultBuffer", QVariant(false)).toBool());
-  SettingsPage::load(ui.serverNoticesInStatusBuffer, bufferSettings.value("ServerNoticesInStatusBuffer", QVariant(true)).toBool());
-  SettingsPage::load(ui.serverNoticesInCurrentBuffer, bufferSettings.value("ServerNoticesInCurrentBuffer", QVariant(false)).toBool());
+  redirectTarget = bufferSettings.serverNoticesTarget();
+  SettingsPage::load(ui.serverNoticesInDefaultBuffer, redirectTarget & BufferSettings::DefaultBuffer);
+  SettingsPage::load(ui.serverNoticesInStatusBuffer, redirectTarget & BufferSettings::StatusBuffer);
+  SettingsPage::load(ui.serverNoticesInCurrentBuffer, redirectTarget & BufferSettings::CurrentBuffer);
 
 
-  SettingsPage::load(ui.errorMsgsInDefaultBuffer, bufferSettings.value("ErrorMsgsInDefaultBuffer", QVariant(true)).toBool());
-  SettingsPage::load(ui.errorMsgsInStatusBuffer, bufferSettings.value("ErrorMsgsInStatusBuffer", QVariant(false)).toBool());
-  SettingsPage::load(ui.errorMsgsInCurrentBuffer, bufferSettings.value("ErrorMsgsInCurrentBuffer", QVariant(false)).toBool());
+  redirectTarget = bufferSettings.errorMsgsTarget();
+  SettingsPage::load(ui.errorMsgsInDefaultBuffer, redirectTarget & BufferSettings::DefaultBuffer);
+  SettingsPage::load(ui.errorMsgsInStatusBuffer, redirectTarget & BufferSettings::StatusBuffer);
+  SettingsPage::load(ui.errorMsgsInCurrentBuffer, redirectTarget & BufferSettings::CurrentBuffer);
 
 
   settings["DisplayTopicInTooltip"] = bufferSettings.value("DisplayTopicInTooltip", QVariant(false));
 
 
   settings["DisplayTopicInTooltip"] = bufferSettings.value("DisplayTopicInTooltip", QVariant(false));
@@ -142,17 +145,32 @@ void GeneralSettingsPage::save() {
   uiSettings.setValue("MouseWheelChangesBuffers", ui.mouseWheelChangesBuffers->isChecked());
 
   BufferSettings bufferSettings;
   uiSettings.setValue("MouseWheelChangesBuffers", ui.mouseWheelChangesBuffers->isChecked());
 
   BufferSettings bufferSettings;
-  bufferSettings.setValue("UserNoticesInDefaultBuffer", ui.userNoticesInDefaultBuffer->isChecked());
-  bufferSettings.setValue("UserNoticesInStatusBuffer", ui.userNoticesInStatusBuffer->isChecked());
-  bufferSettings.setValue("UserNoticesInCurrentBuffer", ui.userNoticesInCurrentBuffer->isChecked());
-
-  bufferSettings.setValue("ServerNoticesInDefaultBuffer", ui.serverNoticesInDefaultBuffer->isChecked());
-  bufferSettings.setValue("ServerNoticesInStatusBuffer", ui.serverNoticesInStatusBuffer->isChecked());
-  bufferSettings.setValue("ServerNoticesInCurrentBuffer", ui.serverNoticesInCurrentBuffer->isChecked());
-
-  bufferSettings.setValue("ErrorMsgsInDefaultBuffer", ui.errorMsgsInDefaultBuffer->isChecked());
-  bufferSettings.setValue("ErrorMsgsInStatusBuffer", ui.errorMsgsInStatusBuffer->isChecked());
-  bufferSettings.setValue("ErrorMsgsInCurrentBuffer", ui.errorMsgsInCurrentBuffer->isChecked());
+  int redirectTarget = 0;
+  if(ui.userNoticesInDefaultBuffer->isChecked())
+    redirectTarget |= BufferSettings::DefaultBuffer;
+  if(ui.userNoticesInStatusBuffer->isChecked())
+    redirectTarget |= BufferSettings::StatusBuffer;
+  if(ui.userNoticesInCurrentBuffer->isChecked())
+    redirectTarget |= BufferSettings::CurrentBuffer;
+  bufferSettings.setUserNoticesTarget(redirectTarget);
+
+  redirectTarget = 0;
+  if(ui.serverNoticesInDefaultBuffer->isChecked())
+    redirectTarget |= BufferSettings::DefaultBuffer;
+  if(ui.serverNoticesInStatusBuffer->isChecked())
+    redirectTarget |= BufferSettings::StatusBuffer;
+  if(ui.serverNoticesInCurrentBuffer->isChecked())
+    redirectTarget |= BufferSettings::CurrentBuffer;
+  bufferSettings.setServerNoticesTarget(redirectTarget);
+
+  redirectTarget = 0;
+  if(ui.errorMsgsInDefaultBuffer->isChecked())
+    redirectTarget |= BufferSettings::DefaultBuffer;
+  if(ui.errorMsgsInStatusBuffer->isChecked())
+    redirectTarget |= BufferSettings::StatusBuffer;
+  if(ui.errorMsgsInCurrentBuffer->isChecked())
+    redirectTarget |= BufferSettings::CurrentBuffer;
+  bufferSettings.setErrorMsgsTarget(redirectTarget);
 
   bufferSettings.setValue("DisplayTopicInTooltip", ui.displayTopicInTooltip->isChecked());
 
 
   bufferSettings.setValue("DisplayTopicInTooltip", ui.displayTopicInTooltip->isChecked());