X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=5319a9a60d518b50f283ce5184677520102e4d6a;hp=e1a7a053ee598803324a6c94c71106a76aa42ced;hb=be04b68a0f10891b81c07cdda204a9abc0ac56a7;hpb=694f9bfbf7f1af19108461c7e00d133e55082bce diff --git a/src/client/client.cpp b/src/client/client.cpp index e1a7a053..5319a9a6 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-09 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "client.h" @@ -34,9 +34,11 @@ #include "clientirclisthelper.h" #include "clientidentity.h" #include "clientignorelistmanager.h" +#include "clienttransfermanager.h" #include "clientuserinputhandler.h" #include "coreaccountmodel.h" #include "coreconnection.h" +#include "dccconfig.h" #include "ircchannel.h" #include "ircuser.h" #include "message.h" @@ -46,7 +48,9 @@ #include "networkmodel.h" #include "quassel.h" #include "signalproxy.h" +#include "transfermodel.h" #include "util.h" +#include "clientauthhandler.h" #include #include @@ -98,14 +102,17 @@ Client::Client(QObject *parent) _backlogManager(new ClientBacklogManager(this)), _bufferViewManager(0), _bufferViewOverlay(new BufferViewOverlay(this)), + _dccConfig(0), _ircListHelper(new ClientIrcListHelper(this)), _inputHandler(0), _networkConfig(0), _ignoreListManager(0), + _transferManager(0), + _transferModel(new TransferModel(this)), _messageModel(0), _messageProcessor(0), _coreAccountModel(new CoreAccountModel(this)), - _coreConnection(new CoreConnection(_coreAccountModel, this)), + _coreConnection(new CoreConnection(this)), _connected(false), _debugLog(&_debugLogBuffer) { @@ -150,6 +157,9 @@ void Client::init() p->attachSlot(SIGNAL(networkCreated(NetworkId)), this, SLOT(coreNetworkCreated(NetworkId))); p->attachSlot(SIGNAL(networkRemoved(NetworkId)), this, SLOT(coreNetworkRemoved(NetworkId))); + p->attachSignal(this, SIGNAL(requestPasswordChange(PeerPtr,QString,QString,QString)), SIGNAL(changePassword(PeerPtr,QString,QString,QString))); + p->attachSlot(SIGNAL(passwordChanged(PeerPtr,bool)), this, SLOT(corePasswordChanged(PeerPtr,bool))); + //connect(mainUi(), SIGNAL(connectToCore(const QVariantMap &)), this, SLOT(connectToCore(const QVariantMap &))); connect(mainUi(), SIGNAL(disconnectFromCore()), this, SLOT(disconnectFromCore())); connect(this, SIGNAL(connected()), mainUi(), SLOT(connectedToCore())); @@ -381,28 +391,41 @@ void Client::setSyncedToCore() connect(bufferSyncer(), SIGNAL(buffersPermanentlyMerged(BufferId, BufferId)), _messageModel, SLOT(buffersPermanentlyMerged(BufferId, BufferId))); connect(bufferSyncer(), SIGNAL(bufferMarkedAsRead(BufferId)), SIGNAL(bufferMarkedAsRead(BufferId))); connect(networkModel(), SIGNAL(requestSetLastSeenMsg(BufferId, MsgId)), bufferSyncer(), SLOT(requestSetLastSeenMsg(BufferId, const MsgId &))); - signalProxy()->synchronize(bufferSyncer()); + + SignalProxy *p = signalProxy(); + p->synchronize(bufferSyncer()); // create a new BufferViewManager Q_ASSERT(!_bufferViewManager); - _bufferViewManager = new ClientBufferViewManager(signalProxy(), this); + _bufferViewManager = new ClientBufferViewManager(p, this); connect(_bufferViewManager, SIGNAL(initDone()), _bufferViewOverlay, SLOT(restore())); // create AliasManager Q_ASSERT(!_aliasManager); _aliasManager = new ClientAliasManager(this); connect(aliasManager(), SIGNAL(initDone()), SLOT(sendBufferedUserInput())); - signalProxy()->synchronize(aliasManager()); + p->synchronize(aliasManager()); // create NetworkConfig Q_ASSERT(!_networkConfig); _networkConfig = new NetworkConfig("GlobalNetworkConfig", this); - signalProxy()->synchronize(networkConfig()); + p->synchronize(networkConfig()); // create IgnoreListManager Q_ASSERT(!_ignoreListManager); _ignoreListManager = new ClientIgnoreListManager(this); - signalProxy()->synchronize(ignoreListManager()); + p->synchronize(ignoreListManager()); + + // create TransferManager and DccConfig if core supports them + Q_ASSERT(!_dccConfig); + Q_ASSERT(!_transferManager); + if (coreFeatures() & Quassel::DccFileTransfer) { + _dccConfig = new DccConfig(this); + p->synchronize(dccConfig()); + _transferManager = new ClientTransferManager(this); + _transferModel->setManager(_transferManager); + p->synchronize(transferManager()); + } // trigger backlog request once all active bufferviews are initialized connect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog())); @@ -473,6 +496,18 @@ void Client::setDisconnectedFromCore() _ignoreListManager->deleteLater(); _ignoreListManager = 0; } + + if (_transferManager) { + _transferModel->setManager(nullptr); + _transferManager->deleteLater(); + _transferManager = nullptr; + } + + if (_dccConfig) { + _dccConfig->deleteLater(); + _dccConfig = nullptr; + } + // we probably don't want to save pending input for reconnect _userInputBuffer.clear(); @@ -517,7 +552,7 @@ void Client::networkDestroyed() break; } else { - netIter++; + ++netIter; } } } @@ -634,6 +669,23 @@ void Client::markBufferAsRead(BufferId id) } +void Client::changePassword(const QString &oldPassword, const QString &newPassword) { + CoreAccount account = currentCoreAccount(); + account.setPassword(newPassword); + coreAccountModel()->createOrUpdateAccount(account); + emit instance()->requestPasswordChange(nullptr, account.user(), oldPassword, newPassword); +} + + +void Client::corePasswordChanged(PeerPtr, bool success) +{ + if (success) + coreAccountModel()->save(); + emit passwordChanged(success); +} + + +#if QT_VERSION < 0x050000 void Client::logMessage(QtMsgType type, const char *msg) { fprintf(stderr, "%s\n", msg); @@ -653,3 +705,26 @@ void Client::logMessage(QtMsgType type, const char *msg) emit instance()->logUpdated(msgString); } } +#else +void Client::logMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg) +{ + Q_UNUSED(context); + + fprintf(stderr, "%s\n", msg.toLocal8Bit().constData()); + fflush(stderr); + if (type == QtFatalMsg) { + Quassel::logFatalMessage(msg.toLocal8Bit().constData()); + } + else { + QString msgString = QString("%1\n").arg(msg); + + //Check to see if there is an instance around, else we risk recursions + //when calling instance() and creating new ones. + if (!instanceExists()) + return; + + instance()->_debugLog << msgString; + emit instance()->logUpdated(msgString); + } +} +#endif