SignalProxy *p = signalProxy();
connect(p, SIGNAL(peerRemoved(QIODevice *)), this, SLOT(removeClient(QIODevice *)));
+ connect(p, SIGNAL(connected()), this, SLOT(clientsConnected()));
+ connect(p, SIGNAL(disconnected()), this, SLOT(clientsDisconnected()));
+
//p->attachSlot(SIGNAL(disconnectFromNetwork(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId))); // FIXME
p->attachSlot(SIGNAL(sendInput(BufferInfo, QString)), this, SLOT(msgFromClient(BufferInfo, QString)));
p->attachSignal(this, SIGNAL(displayMsg(Message)));
}
}
-UserId CoreSession::user() const {
- return _user;
-}
-
CoreNetwork *CoreSession::network(NetworkId id) const {
if(_networks.contains(id)) return _networks[id];
return 0;
emit bufferRenamed(bufferId, newName);
}
}
+
+void CoreSession::clientsConnected() {
+ QHash<NetworkId, NetworkConnection *>::iterator conIter = _connections.begin();
+ Identity *identity = 0;
+ NetworkConnection *con = 0;
+ Network *network = 0;
+ IrcUser *me = 0;
+ QString awayReason;
+ while(conIter != _connections.end()) {
+ con = *conIter;
+ conIter++;
+
+ if(!con->isConnected())
+ continue;
+ identity = con->identity();
+ if(!identity)
+ continue;
+ network = con->network();
+ if(!network)
+ continue;
+ me = network->me();
+ if(!me)
+ continue;
+
+ if(identity->detachAwayEnabled() && me->isAway()) {
+ con->userInputHandler()->handleAway(BufferInfo(), QString());
+ }
+ }
+}
+
+void CoreSession::clientsDisconnected() {
+ QHash<NetworkId, NetworkConnection *>::iterator conIter = _connections.begin();
+ Identity *identity = 0;
+ NetworkConnection *con = 0;
+ Network *network = 0;
+ IrcUser *me = 0;
+ QString awayReason;
+ while(conIter != _connections.end()) {
+ con = *conIter;
+ conIter++;
+
+ if(!con->isConnected())
+ continue;
+ identity = con->identity();
+ if(!identity)
+ continue;
+ network = con->network();
+ if(!network)
+ continue;
+ me = network->me();
+ if(!me)
+ continue;
+
+ if(identity->detachAwayEnabled() && !me->isAway()) {
+ if(identity->detachAwayReasonEnabled())
+ awayReason = identity->detachAwayReason();
+ else
+ awayReason = identity->awayReason();
+ con->userInputHandler()->handleAway(BufferInfo(), awayReason);
+ }
+ }
+}
~CoreSession();
QList<BufferInfo> buffers() const;
- UserId user() const;
+ inline UserId user() const { return _user; }
CoreNetwork *network(NetworkId) const;
NetworkConnection *networkConnection(NetworkId) const;
Identity *identity(IdentityId) const;
void scriptRequest(QString script);
+ void clientsConnected();
+ void clientsDisconnected();
+
private:
void loadSettings();
void initScriptEngine();
// we would need this if we enabled drag and drop in the nicklist...
//connect(ui.nicknameList, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(setWidgetStates()));
//connect(ui.nicknameList->model(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(nicklistHasChanged()));
-
}
void IdentitiesSettingsPage::setWidgetStates() {
ui.nickDown->setDisabled(true);
}
ui.deleteNick->setEnabled(ui.nicknameList->count() > 1);
-
- // FIXME this is until stuff has been implemented
- ui.detachAwayEnabled->setEnabled(false);
}
void IdentitiesSettingsPage::coreConnectionStateChanged(bool state) {