Pressing enter in the topic line now sets the channel topic.
[quassel.git] / src / core / userinputhandler.cpp
index 956e352..d7b827e 100644 (file)
@@ -107,18 +107,27 @@ void UserInputHandler::handleInvite(const BufferInfo &bufferInfo, const QString
 }
 
 void UserInputHandler::handleJ(const BufferInfo &bufferInfo, const QString &msg) {
-  Q_UNUSED(bufferInfo)
-  QStringList params = msg.split(" ");
-  if(params.size() > 0 && !params[0].startsWith("#")) {
-    params[0] = QString("#%1").arg(params[0]);
-  }
-  emit putCmd("JOIN", serverEncode(params));
+  QString trimmed = msg.trimmed();
+  if(trimmed.length() == 0) return;
+  if(trimmed[0].isLetter()) trimmed.prepend("#");
+  handleJoin(bufferInfo, trimmed);
 }
 
 void UserInputHandler::handleJoin(const BufferInfo &bufferInfo, const QString &msg) {
   Q_UNUSED(bufferInfo)
-  QStringList params = msg.split(" ");
-  emit putCmd("JOIN", serverEncode(params));
+  QStringList params = msg.trimmed().split(" ");
+  QStringList chans = params[0].split(",");
+  QStringList keys;
+  if(params.count() > 1) keys = params[1].split(",");
+  emit putCmd("JOIN", serverEncode(params)); // FIXME handle messages longer than 512 bytes!
+  int i = 0;
+  for(; i < keys.count(); i++) {
+    if(i >= chans.count()) break;
+    networkConnection()->addChannelKey(chans[i], keys[i]);
+  }
+  for(; i < chans.count(); i++) {
+    networkConnection()->removeChannelKey(chans[i]);
+  }
 }
 
 void UserInputHandler::handleKick(const BufferInfo &bufferInfo, const QString &msg) {
@@ -213,9 +222,13 @@ void UserInputHandler::handleSay(const BufferInfo &bufferInfo, const QString &ms
 
 void UserInputHandler::handleTopic(const BufferInfo &bufferInfo, const QString &msg) {
   if(bufferInfo.bufferName().isEmpty()) return;
-  QList<QByteArray> params;
-  params << serverEncode(bufferInfo.bufferName()) << channelEncode(bufferInfo.bufferName(), msg);
-  emit putCmd("TOPIC", params);
+  if(!msg.isEmpty()) {
+    QList<QByteArray> params;
+    params << serverEncode(bufferInfo.bufferName()) << channelEncode(bufferInfo.bufferName(), msg);
+    emit putCmd("TOPIC", params);
+  } else {
+    emit networkConnection()->putRawLine("TOPIC " + serverEncode(bufferInfo.bufferName()) + " :");
+  }
 }
 
 void UserInputHandler::handleVoice(const BufferInfo &bufferInfo, const QString &msg) {