Project

General

Profile

0001-add-support-for-oping-a-whole-channel-with-op.patch

sandsmark, 04/24/2012 02:58 AM

View differences:

src/core/coreuserinputhandler.cpp
371 371
}
372 372

  
373 373
void CoreUserInputHandler::handleOp(const BufferInfo &bufferInfo, const QString &msg) {
374
  QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
375
  QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'o';
376
  QStringList params;
377
  params << bufferInfo.bufferName() << m << nicks;
378
  emit putCmd("MODE", serverEncode(params));
374
  QStringList nicks;
375
  if (msg == "*") {
376
    const QList<IrcUser*> users = network()->ircChannel(bufferInfo.bufferName())->ircUsers();
377
    foreach(IrcUser *user, users) {
378
      if (!network()->ircChannel(bufferInfo.bufferName())->userModes(user).contains("o"))
379
	nicks.append(user->nick());
380
    }
381
  } else { 
382
    nicks = msg.split(' ', QString::SkipEmptyParts);
383
  }
384
  if (nicks.count() == 0) return;
385
  
386
  bool isNumber;
387
  int maxModes = network()->support("MODES").toInt(&isNumber);
388
  if (!isNumber || maxModes == 0) maxModes = 1;
389
  
390
  while (!nicks.isEmpty()) {
391
    int amount = qMin(nicks.count(), maxModes);
392
    QString m = "+"; for(int i = 0; i < amount; i++) m += 'o';
393
    QStringList params;
394
    params << bufferInfo.bufferName() << m;
395
    for(int i = 0; i < amount; i++) params << nicks.takeFirst();
396
    emit putCmd("MODE", serverEncode(params));
397
  }
379 398
}
380 399

  
381 400
void CoreUserInputHandler::handleOper(const BufferInfo &bufferInfo, const QString &msg) {
382
-