X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclientsyncer.cpp;h=fb8bebc2f0e67c38b41d070697d2a7d44f0c68d9;hp=a5a64d741da394bfeccee38bbd8ebe9b31db4c73;hb=236dda81632fa792e788d45b0f4f31b973823f7f;hpb=01922b87be01cd5c9844d2a273acd9a71aee8e96 diff --git a/src/client/clientsyncer.cpp b/src/client/clientsyncer.cpp index a5a64d74..fb8bebc2 100644 --- a/src/client/clientsyncer.cpp +++ b/src/client/clientsyncer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel IRC Team * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -26,17 +26,11 @@ #include "client.h" #include "identity.h" -#include "ircuser.h" -#include "ircchannel.h" #include "network.h" #include "networkmodel.h" #include "quassel.h" #include "signalproxy.h" -//#ifdef BUILD_MONO -#include "core.h" -//#endif - ClientSyncer::ClientSyncer(QObject *parent) : QObject(parent) { @@ -44,11 +38,6 @@ ClientSyncer::ClientSyncer(QObject *parent) blockSize = 0; connect(Client::signalProxy(), SIGNAL(disconnected()), this, SLOT(coreSocketDisconnected())); - - //#ifdef BUILD_MONO - connect(this, SIGNAL(connectToInternalCore(SignalProxy *)), Core::instance(), SLOT(setupInternalClientSession(SignalProxy *))); - connect(Core::instance(), SIGNAL(sessionState(const QVariant &)), this, SLOT(internalSessionStateReceived(const QVariant &))); - //#endif } ClientSyncer::~ClientSyncer() { @@ -134,10 +123,10 @@ void ClientSyncer::connectToCore(const QVariantMap &conn) { #ifdef HAVE_SSL QSslSocket *sock = new QSslSocket(Client::instance()); + connect(sock, SIGNAL(encrypted()), this, SIGNAL(encrypted())); #else if(conn["useSsl"].toBool()) { emit connectionError(tr("This client is built without SSL Support!
Disable the usage of SSL in the account settings.")); - emit encrypted(false); return; } QTcpSocket *sock = new QTcpSocket(Client::instance()); @@ -179,6 +168,34 @@ void ClientSyncer::coreSocketConnected() { } void ClientSyncer::useInternalCore() { + AccountId internalAccountId; + + CoreAccountSettings accountSettings; + QList knownAccounts = accountSettings.knownAccounts(); + foreach(AccountId id, knownAccounts) { + if(!id.isValid()) + continue; + QVariantMap data = accountSettings.retrieveAccountData(id); + if(data.contains("InternalAccount") && data["InternalAccount"].toBool()) { + internalAccountId = id; + break; + } + } + + if(!internalAccountId.isValid()) { + for(AccountId i = 1;; i++) { + if(!knownAccounts.contains(i)) { + internalAccountId = i; + break; + } + } + QVariantMap data; + data["InternalAccount"] = true; + accountSettings.storeAccountData(internalAccountId, data); + } + + coreConnectionInfo["AccountId"] = QVariant::fromValue(internalAccountId); + emit startInternalCore(this); emit connectToInternalCore(Client::instance()->signalProxy()); } @@ -212,11 +229,8 @@ void ClientSyncer::clientInitAck(const QVariantMap &msg) { Q_ASSERT(sslSocket); connect(sslSocket, SIGNAL(sslErrors(const QList &)), this, SLOT(sslErrors(const QList &))); sslSocket->startClientEncryption(); - emit encrypted(true); - Client::instance()->setSecuredConnection(); } else { emit connectionError(tr("The Quassel Core you are trying to connect to does not support SSL!
If you want to connect anyways, disable the usage of SSL in the account settings.")); - emit encrypted(false); disconnectFromCore(); return; } @@ -256,7 +270,7 @@ void ClientSyncer::loginToCore(const QString &user, const QString &passwd) { void ClientSyncer::internalSessionStateReceived(const QVariant &packedState) { QVariantMap state = packedState.toMap(); emit sessionProgress(1, 1); - // Client::instance()->setConnectedToCore(socket, AccountId()); + Client::instance()->setConnectedToCore(coreConnectionInfo["AccountId"].value()); syncToCore(state); } @@ -264,13 +278,11 @@ void ClientSyncer::sessionStateReceived(const QVariantMap &state) { emit sessionProgress(1, 1); disconnect(this, SIGNAL(recvPartialItem(quint32, quint32)), this, SIGNAL(sessionProgress(quint32, quint32))); disconnect(socket, 0, this, 0); // rest of communication happens through SignalProxy - //Client::signalProxy()->addPeer(socket); - Client::instance()->setConnectedToCore(socket, coreConnectionInfo["AccountId"].value()); + Client::instance()->setConnectedToCore(coreConnectionInfo["AccountId"].value(), socket); syncToCore(state); } void ClientSyncer::syncToCore(const QVariantMap &sessionState) { - // create identities foreach(QVariant vid, sessionState["Identities"].toList()) { Client::instance()->coreIdentityCreated(vid.value()); @@ -294,6 +306,8 @@ void ClientSyncer::syncToCore(const QVariantMap &sessionState) { // create network objects foreach(QVariant networkid, networkids) { NetworkId netid = networkid.value(); + if(Client::network(netid)) + continue; Network *net = new Network(netid, Client::instance()); netsToSync.insert(net); connect(net, SIGNAL(initDone()), this, SLOT(networkInitDone()));