#include "ircchannel.h"
#include "ircuser.h"
#include "message.h"
-#include "networkinfo.h"
+#include "network.h"
#include "networkmodel.h"
+#include "buffermodel.h"
+#include "nickmodel.h"
#include "quasselui.h"
#include "signalproxy.h"
#include "util.h"
}
Client::Client(QObject *parent)
- : QObject(parent),
+ : QObject(parent),
socket(0),
_signalProxy(new SignalProxy(SignalProxy::Client, this)),
mainUi(0),
_networkModel(0),
+ _bufferModel(0),
+ _nickModel(0),
connectedToCore(false)
{
-
}
Client::~Client() {
-
}
void Client::init() {
blockSize = 0;
_networkModel = new NetworkModel(this);
+ connect(this, SIGNAL(bufferUpdated(BufferInfo)),
+ _networkModel, SLOT(bufferUpdated(BufferInfo)));
- connect(this, SIGNAL(bufferSelected(Buffer *)),
- _networkModel, SLOT(selectBuffer(Buffer *)));
- connect(this, SIGNAL(bufferUpdated(Buffer *)),
- _networkModel, SLOT(bufferUpdated(Buffer *)));
- connect(this, SIGNAL(bufferActivity(Buffer::ActivityLevel, Buffer *)),
- _networkModel, SLOT(bufferActivity(Buffer::ActivityLevel, Buffer *)));
-
+ _bufferModel = new BufferModel(_networkModel);
+ _nickModel = new NickModel(_networkModel);
+
SignalProxy *p = signalProxy();
p->attachSignal(this, SIGNAL(sendSessionData(const QString &, const QVariant &)),
SIGNAL(clientSessionDataChanged(const QString &, const QVariant &)));
/*** public static methods ***/
-QList<NetworkInfo *> Client::networkInfos() {
- return instance()->_networkInfo.values();
+QList<Network *> Client::networks() {
+ return instance()->_network.values();
}
-NetworkInfo *Client::networkInfo(uint networkid) {
- if(instance()->_networkInfo.contains(networkid))
- return instance()->_networkInfo[networkid];
+Network *Client::network(uint networkid) {
+ if(instance()->_network.contains(networkid))
+ return instance()->_network[networkid];
else
return 0;
}
connect(buff, SIGNAL(userInput(BufferInfo, QString)),
client, SLOT(userInput(BufferInfo, QString)));
- connect(buff, SIGNAL(bufferUpdated(Buffer *)),
- client, SIGNAL(bufferUpdated(Buffer *)));
connect(buff, SIGNAL(destroyed()),
client, SLOT(bufferDestroyed()));
client->_buffers[id.uid()] = buff;
- emit client->bufferUpdated(buff);
+ emit client->bufferUpdated(id);
}
Q_ASSERT(buff);
return buff;
}
-// FIXME switch to netids!
-// WHEN IS THIS NEEDED ANYHOW!?
-// ...only for finding the Buffer for a channel, I guess...
-BufferInfo Client::bufferInfo(QString net, QString buf) {
- foreach(Buffer *buffer_, buffers()) {
- BufferInfo bufferInfo = buffer_->bufferInfo();
- if(!bufferInfo.network().compare(net, Qt::CaseInsensitive) && !bufferInfo.buffer().compare(buf, Qt::CaseInsensitive))
- return bufferInfo;
- }
- Q_ASSERT(false); // should never happen!
- return BufferInfo();
+NetworkModel *Client::networkModel() {
+ return instance()->_networkModel;
}
-BufferInfo Client::statusBufferInfo(QString net) {
- return bufferInfo(net, "");
+BufferModel *Client::bufferModel() {
+ return instance()->_bufferModel;
}
-NetworkModel *Client::networkModel() {
- return instance()->_networkModel;
+NickModel *Client::nickModel() {
+ return instance()->_nickModel;
}
+
SignalProxy *Client::signalProxy() {
return instance()->_signalProxy;
}
Q_ASSERT(_buffers.isEmpty());
- QHash<NetworkId, NetworkInfo*>::iterator netIter = _networkInfo.begin();
- while(netIter != _networkInfo.end()) {
- NetworkInfo *net = netIter.value();
+ QHash<NetworkId, Network*>::iterator netIter = _network.begin();
+ while(netIter != _network.end()) {
+ Network *net = netIter.value();
disconnect(net, SIGNAL(destroyed()), this, 0);
- netIter = _networkInfo.erase(netIter);
+ netIter = _network.erase(netIter);
net->deleteLater();
}
- Q_ASSERT(_networkInfo.isEmpty());
+ Q_ASSERT(_network.isEmpty());
QHash<IdentityId, Identity*>::iterator idIter = _identities.begin();
while(idIter != _identities.end()) {
// create identities
foreach(QVariant vid, sessionState["Identities"].toList()) {
coreIdentityCreated(vid.value<Identity>());
- //Identity *id = new Identity(vid.value<Identity>(), this);
- //_identities[id->id()] = id;
- //signalProxy()->synchronize(id);
- //qDebug() << "received identity" << id->identityName();
}
// store Buffer details
buffer(vid.value<BufferInfo>()); // create all buffers, so we see them in the network views
}
- // create networkInfo objects
+ // create network objects
QVariantList networkids = sessionState["Networks"].toList();
foreach(QVariant networkid, networkids) {
networkConnected(networkid.toUInt());
// 2.) channels
// 3.) ircusers
- int numNets = networkInfos().count();
+ int numNets = networks().count();
int numNetsWaiting = 0;
int numIrcUsers = 0;
int numChannels = 0;
int numChannelsWaiting = 0;
- foreach(NetworkInfo *net, networkInfos()) {
+ foreach(Network *net, networks()) {
if(! net->initialized())
numNetsWaiting++;
emit coreConnectionProgress(1,1);
emit connected();
emit coreConnectionStateChanged(true);
- foreach(NetworkInfo *net, networkInfos()) {
+ foreach(Network *net, networks()) {
disconnect(net, 0, this, SLOT(updateCoreConnectionProgress()));
}
//Buffer *b = buffer(id);
//b->setActive(true);
- NetworkInfo *netinfo = new NetworkInfo(netid, this);
+ Network *netinfo = new Network(netid, this);
netinfo->setProxy(signalProxy());
- networkModel()->attachNetworkInfo(netinfo);
+ 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(ircChannelAdded(QString)), this, SLOT(ircChannelAdded(QString)));
- connect(netinfo, SIGNAL(destroyed()), this, SLOT(networkInfoDestroyed()));
- _networkInfo[netid] = netinfo;
+ connect(netinfo, SIGNAL(destroyed()), this, SLOT(networkDestroyed()));
+ _network[netid] = netinfo;
}
void Client::networkDisconnected(uint networkid) {
- foreach(Buffer *buffer, buffers()) {
- if(buffer->bufferInfo().networkId() != networkid)
- continue;
-
- //buffer->displayMsg(Message(bufferid, Message::Server, tr("Server disconnected."))); FIXME
- buffer->setActive(false);
+ if(!_network.contains(networkid)) {
+ qWarning() << "Client::networkDisconnected(uint): unknown Network" << networkid;
+ return;
}
- Q_ASSERT(networkInfo(networkid));
- if(!networkInfo(networkid)->initialized()) {
+ Network *net = _network.take(networkid);
+ if(!net->initialized()) {
qDebug() << "Network" << networkid << "disconnected while not yet initialized!";
updateCoreConnectionProgress();
}
-}
-
-void Client::ircChannelAdded(QString chanName) {
- NetworkInfo *netInfo = qobject_cast<NetworkInfo*>(sender());
- Q_ASSERT(netInfo);
- Buffer *buf = buffer(bufferInfo(netInfo->networkName(), chanName));
- Q_ASSERT(buf);
- buf->setIrcChannel(netInfo->ircChannel(chanName));
-
+ net->deleteLater();
}
void Client::updateBufferInfo(BufferInfo id) {
- buffer(id)->updateBufferInfo(id);
+ emit bufferUpdated(id);
}
void Client::bufferDestroyed() {
Buffer *buffer = static_cast<Buffer *>(sender());
- uint bufferUid = buffer->uid();
- if(_buffers.contains(bufferUid))
- _buffers.remove(bufferUid);
+ QHash<BufferId, Buffer *>::iterator iter = _buffers.begin();
+ while(iter != _buffers.end()) {
+ if(iter.value() == buffer) {
+ iter = _buffers.erase(iter);
+ break;
+ }
+ iter++;
+ }
}
-void Client::networkInfoDestroyed() {
- NetworkInfo *netinfo = static_cast<NetworkInfo *>(sender());
+void Client::networkDestroyed() {
+ Network *netinfo = static_cast<Network *>(sender());
uint networkId = netinfo->networkId();
- if(_networkInfo.contains(networkId))
- _networkInfo.remove(networkId);
+ if(_network.contains(networkId))
+ _network.remove(networkId);
}
void Client::recvMessage(const Message &msg) {
Buffer *b = buffer(msg.buffer());
- Buffer::ActivityLevel level = Buffer::OtherActivity;
- if(msg.type() == Message::Plain || msg.type() == Message::Notice){
- level |= Buffer::NewMessage;
- }
- if(msg.flags() & Message::Highlight){
- level |= Buffer::Highlight;
- }
- emit bufferActivity(level, b);
+// Buffer::ActivityLevel level = Buffer::OtherActivity;
+// if(msg.type() == Message::Plain || msg.type() == Message::Notice){
+// level |= Buffer::NewMessage;
+// }
+// if(msg.flags() & Message::Highlight){
+// level |= Buffer::Highlight;
+// }
+// emit bufferActivity(level, b);
b->appendMsg(msg);
}