- // restore old user modes if server default mode is set.
- IrcUser *me_ = me();
- if(me_) {
- if(!me_->userModes().isEmpty()) {
- restoreUserModes();
- } else {
- connect(me_, SIGNAL(userModesSet(QString)), this, SLOT(restoreUserModes()));
- connect(me_, SIGNAL(userModesAdded(QString)), this, SLOT(restoreUserModes()));
- }
- }
-
- // send perform list
- foreach(QString line, perform()) {
- if(!line.isEmpty()) userInput(statusBuf, line);
- }
-
- // rejoin channels we've been in
- 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);
- }
-}
-
-void CoreNetwork::restoreUserModes() {
- IrcUser *me_ = me();
- Q_ASSERT(me_);
-
- disconnect(me_, SIGNAL(userModesSet(QString)), this, SLOT(restoreUserModes()));
- disconnect(me_, SIGNAL(userModesAdded(QString)), this, SLOT(restoreUserModes()));
-
- QString modesDelta = Core::userModes(userId(), networkId());
- QString currentModes = me_->userModes();
-
- QString addModes, removeModes;
- if(modesDelta.contains('-')) {
- addModes = modesDelta.section('-', 0, 0);
- removeModes = modesDelta.section('-', 1);
- } else {
- addModes = modesDelta;
- }
-
-
- addModes.remove(QRegExp(QString("[%1]").arg(currentModes)));
- if(currentModes.isEmpty())
- removeModes = QString();
- else
- removeModes.remove(QRegExp(QString("[^%1]").arg(currentModes)));
-
- if(addModes.isEmpty() && removeModes.isEmpty())
- return;
-
- if(!addModes.isEmpty())
- addModes = '+' + addModes;
- if(!removeModes.isEmpty())
- removeModes = '-' + removeModes;
-
- // don't use InputHandler::handleMode() as it keeps track of our persistent mode changes
- putRawLine(serverEncode(QString("MODE %1 %2%3").arg(me_->nick()).arg(addModes).arg(removeModes)));
-}
-
-void CoreNetwork::updateIssuedModes(const QString &requestedModes) {
- QString addModes;
- QString removeModes;
- bool addMode = true;
-
- for(int i = 0; i < requestedModes.length(); i++) {
- if(requestedModes[i] == '+') {
- addMode = true;
- continue;
- }
- if(requestedModes[i] == '-') {
- addMode = false;
- continue;
- }
- if(addMode) {
- addModes += requestedModes[i];
- } else {
- removeModes += requestedModes[i];