- int numChannels = 0;
- int numChannelsWaiting = 0;
-
- foreach(Network *net, networks()) {
- if(! net->initialized())
- numNetsWaiting++;
-
- numIrcUsers += net->ircUsers().count();
- foreach(IrcUser *user, net->ircUsers()) {
- if(! user->initialized())
- numIrcUsersWaiting++;
- }
-
- numChannels += net->ircChannels().count();
- foreach(IrcChannel *channel, net->ircChannels()) {
- if(! channel->initialized())
- numChannelsWaiting++;
- }
- }
-
- if(numNetsWaiting > 0) {
- emit coreConnectionMsg(tr("Requesting network states..."));
- emit coreConnectionProgress(numNets - numNetsWaiting, numNets);
- return;
- }
-
- if(numIrcUsersWaiting > 0) {
- emit coreConnectionMsg(tr("Requesting User states..."));
- emit coreConnectionProgress(numIrcUsers - numIrcUsersWaiting, numIrcUsers);
- return;
- }
-
- if(numChannelsWaiting > 0) {
- emit coreConnectionMsg(tr("Requesting Channel states..."));
- emit coreConnectionProgress(numChannels - numChannelsWaiting, numChannels);
- return;
- }
-
- emit coreConnectionProgress(1,1);
- emit connected();
- emit coreConnectionStateChanged(true);
- foreach(Network *net, networks()) {
- disconnect(net, 0, this, SLOT(updateCoreConnectionProgress()));
- }
-
- // signalProxy()->dumpProxyStats();
-}
-
-void Client::recvSessionData(const QString &key, const QVariant &data) {
- sessionData[key] = data;
- emit sessionDataChanged(key, data);
- emit sessionDataChanged(key);
-}
-
-void Client::storeSessionData(const QString &key, const QVariant &data) {
- // Not sure if this is a good idea, but we'll try it anyway:
- // Calling this function only sends a signal to core. Data is stored upon reception of the update signal,
- // rather than immediately.
- emit instance()->sendSessionData(key, data);
-}
-
-QVariant Client::retrieveSessionData(const QString &key, const QVariant &def) {
- if(instance()->sessionData.contains(key)) return instance()->sessionData[key];
- else return def;
-}
-
-QStringList Client::sessionDataKeys() {
- return instance()->sessionData.keys();
-}
-
-void Client::coreSocketError(QAbstractSocket::SocketError) {
- emit coreConnectionError(socket->errorString());
- socket->deleteLater();
-}
-
-void Client::coreHasData() {
- QVariant item;
- if(SignalProxy::readDataFromDevice(socket, blockSize, item)) {
- emit recvPartialItem(1,1);
- QVariantMap msg = item.toMap();
- if (!msg["StartWizard"].toBool()) {
- recvCoreState(msg["Reply"]);
- } else {
- qWarning("Core not configured!");
- qDebug() << "Available storage providers: " << msg["StorageProviders"].toStringList();
- emit showConfigWizard(msg);
- }
- blockSize = 0;
- return;
- }
- if(blockSize > 0) {
- emit recvPartialItem(socket->bytesAvailable(), blockSize);
- }
-}
-
-void Client::networkConnected(uint netid) {
- // TODO: create statusBuffer / switch to networkids
- //BufferInfo id = statusBufferInfo(net);
- //Buffer *b = buffer(id);
- //b->setActive(true);
-
- Network *netinfo = new Network(netid, this);
- netinfo->setProxy(signalProxy());
- networkModel()->attachNetwork(netinfo);
-
- if(!isConnected()) {
- connect(netinfo, SIGNAL(initDone()), this, SLOT(updateCoreConnectionProgress()));
- connect(netinfo, SIGNAL(ircUserInitDone()), this, SLOT(updateCoreConnectionProgress()));
- connect(netinfo, SIGNAL(ircChannelInitDone()), this, SLOT(updateCoreConnectionProgress()));
- }
- connect(netinfo, SIGNAL(destroyed()), this, SLOT(networkDestroyed()));
- _network[netid] = netinfo;
-}
-
-void Client::networkDisconnected(uint networkid) {
- if(!_network.contains(networkid)) {
- qWarning() << "Client::networkDisconnected(uint): unknown Network" << networkid;
- return;
- }
-
- Network *net = _network.take(networkid);
- if(!net->initialized()) {
- qDebug() << "Network" << networkid << "disconnected while not yet initialized!";
- updateCoreConnectionProgress();
- }
- net->deleteLater();
-}
-
-void Client::updateBufferInfo(BufferInfo id) {
- emit bufferUpdated(id);
-}
-
-void Client::bufferDestroyed() {
- Buffer *buffer = static_cast<Buffer *>(sender());
- QHash<BufferId, Buffer *>::iterator iter = _buffers.begin();
- while(iter != _buffers.end()) {
- if(iter.value() == buffer) {
- iter = _buffers.erase(iter);