X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=b0f68e4b8f94804eb7c8bda43ca27510b98aa40d;hp=295e062e596ea460a5ee9081d389dd96fc80bcc9;hb=79fbcfb49f7cc92a89f0158ebac1a3006a559e8a;hpb=1adc00219ba072da57994764d086beed8ffb7bb4 diff --git a/src/client/client.cpp b/src/client/client.cpp index 295e062e..b0f68e4b 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -21,12 +21,14 @@ #include "client.h" #include "abstractmessageprocessor.h" +#include "abstractui.h" #include "bufferinfo.h" #include "buffermodel.h" #include "buffersettings.h" #include "buffersyncer.h" -#include "bufferviewmanager.h" +#include "bufferviewconfig.h" #include "clientbacklogmanager.h" +#include "clientbufferviewmanager.h" #include "clientirclisthelper.h" #include "clientidentity.h" #include "ircchannel.h" @@ -36,7 +38,6 @@ #include "network.h" #include "networkmodel.h" #include "quassel.h" -#include "quasselui.h" #include "signalproxy.h" #include "util.h" @@ -81,6 +82,7 @@ Client::Client(QObject *parent) _messageProcessor(0), _connectedToCore(false), _syncedToCore(false), + _internalCore(false), _debugLog(&_debugLogBuffer) { _signalProxy->synchronize(_ircListHelper); @@ -115,7 +117,7 @@ void Client::init() { p->attachSlot(SIGNAL(identityCreated(const Identity &)), this, SLOT(coreIdentityCreated(const Identity &))); p->attachSlot(SIGNAL(identityRemoved(IdentityId)), this, SLOT(coreIdentityRemoved(IdentityId))); - p->attachSignal(this, SIGNAL(requestCreateNetwork(const NetworkInfo &)), SIGNAL(createNetwork(const NetworkInfo &))); + p->attachSignal(this, SIGNAL(requestCreateNetwork(const NetworkInfo &, const QStringList &)), SIGNAL(createNetwork(const NetworkInfo &, const QStringList &))); p->attachSignal(this, SIGNAL(requestRemoveNetwork(NetworkId)), SIGNAL(removeNetwork(NetworkId))); p->attachSlot(SIGNAL(networkCreated(NetworkId)), this, SLOT(coreNetworkCreated(NetworkId))); p->attachSlot(SIGNAL(networkRemoved(NetworkId)), this, SLOT(coreNetworkRemoved(NetworkId))); @@ -165,8 +167,8 @@ const Network * Client::network(NetworkId networkid) { else return 0; } -void Client::createNetwork(const NetworkInfo &info) { - emit instance()->requestCreateNetwork(info); +void Client::createNetwork(const NetworkInfo &info, const QStringList &persistentChannels) { + emit instance()->requestCreateNetwork(info, persistentChannels); } void Client::removeNetwork(NetworkId id) { @@ -275,6 +277,7 @@ void Client::setConnectedToCore(AccountId id, QIODevice *socket) { socket->setParent(0); signalProxy()->addPeer(socket); } + _internalCore = !socket; _connectedToCore = true; setCurrentCoreAccount(id); } @@ -286,14 +289,20 @@ void Client::setSyncedToCore() { connect(bufferSyncer(), SIGNAL(lastSeenMsgSet(BufferId, MsgId)), _networkModel, SLOT(setLastSeenMsgId(BufferId, MsgId))); connect(bufferSyncer(), SIGNAL(bufferRemoved(BufferId)), this, SLOT(bufferRemoved(BufferId))); connect(bufferSyncer(), SIGNAL(bufferRenamed(BufferId, QString)), this, SLOT(bufferRenamed(BufferId, QString))); + connect(bufferSyncer(), SIGNAL(buffersPermanentlyMerged(BufferId, BufferId)), this, SLOT(buffersPermanentlyMerged(BufferId, BufferId))); + connect(bufferSyncer(), SIGNAL(buffersPermanentlyMerged(BufferId, BufferId)), _messageModel, SLOT(buffersPermanentlyMerged(BufferId, BufferId))); connect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog())); connect(networkModel(), SIGNAL(setLastSeenMsg(BufferId, MsgId)), bufferSyncer(), SLOT(requestSetLastSeenMsg(BufferId, const MsgId &))); signalProxy()->synchronize(bufferSyncer()); // create a new BufferViewManager Q_ASSERT(!_bufferViewManager); - _bufferViewManager = new BufferViewManager(signalProxy(), this); + _bufferViewManager = new ClientBufferViewManager(signalProxy(), this); connect(bufferViewManager(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog())); + connect(bufferViewManager(), SIGNAL(initDone()), this, SLOT(createDefaultBufferView())); + + createDefaultIdentity(); + createDefaultNetworks(); _syncedToCore = true; emit connected(); @@ -305,8 +314,35 @@ void Client::requestInitialBacklog() { Client::backlogManager()->requestInitialBacklog(); } -void Client::setSecuredConnection() { - emit securedConnection(); +void Client::createDefaultBufferView() { + if(bufferViewManager()->bufferViewConfigs().isEmpty()) { + BufferViewConfig config(-1); + config.setBufferViewName(tr("All Buffers")); + config.initSetBufferList(networkModel()->allBufferIdsSorted()); + bufferViewManager()->requestCreateBufferView(config.toVariantMap()); + } +} + +void Client::createDefaultIdentity() { + if(_identities.isEmpty()) { + Identity identity; + identity.setToDefaults(); + identity.setIdentityName(tr("Default Identity")); + createIdentity(identity); + } +} + +void Client::createDefaultNetworks() { + if(_networks.isEmpty()) { + QStringList defaultNets = Network::presetNetworks(true); + foreach(QString net, defaultNets) { + NetworkInfo info = Network::networkInfoFromPreset(net); + if(info.networkName.isEmpty()) + continue; + QStringList defaultChans = Network::presetDefaultChannels(net); + createNetwork(info, defaultChans); + } + } } void Client::disconnectFromCore() { @@ -398,6 +434,18 @@ void Client::removeBuffer(BufferId id) { bufferSyncer()->requestRemoveBuffer(id); } +void Client::renameBuffer(BufferId bufferId, const QString &newName) { + if(!bufferSyncer()) + return; + bufferSyncer()->requestRenameBuffer(bufferId, newName); +} + +void Client::mergeBuffersPermanently(BufferId bufferId1, BufferId bufferId2) { + if(!bufferSyncer()) + return; + bufferSyncer()->requestMergeBuffersPermanently(bufferId1, bufferId2); +} + void Client::bufferRemoved(BufferId bufferId) { // select a sane buffer (status buffer) /* we have to manually select a buffer because otherwise inconsitent changes @@ -423,6 +471,12 @@ void Client::bufferRenamed(BufferId bufferId, const QString &newName) { } } +void Client::buffersPermanentlyMerged(BufferId bufferId1, BufferId bufferId2) { + QModelIndex idx = networkModel()->bufferIndex(bufferId1); + bufferModel()->setCurrentIndex(bufferModel()->mapFromSource(idx)); + networkModel()->removeBuffer(bufferId2); +} + void Client::logMessage(QtMsgType type, const char *msg) { fprintf(stderr, "%s\n", msg); fflush(stderr);