// I think this is unnecessary since IrcUsers have us as their daddy :)
Network::~Network() {
+ emit aboutToBeDestroyed();
// QHashIterator<QString, IrcUser *> ircuser(_ircUsers);
// while (ircuser.hasNext()) {
// ircuser.next();
void ircChannelInitDone();
signals:
+ void aboutToBeDestroyed();
void networkNameSet(const QString &networkName);
void currentServerSet(const QString ¤tServer);
void connectedSet(bool isConnected);
}
void CoreSession::removeNetwork(NetworkId id) {
+ // Make sure the network is disconnected!
+ NetworkConnection *conn = _connections.value(id, 0);
+ if(conn) {
+ if(conn->connectionState() != Network::Disconnected) {
+ connect(conn, SIGNAL(disconnected(NetworkId)), this, SLOT(destroyNetwork(NetworkId)));
+ conn->disconnectFromIrc();
+ } else {
+ _connections.take(id)->deleteLater(); // TODO make this saner
+ destroyNetwork(id);
+ }
+ } else {
+ destroyNetwork(id);
+ }
+}
+
+void CoreSession::destroyNetwork(NetworkId id) {
+ Q_ASSERT(!_connections.contains(id));
Network *net = _networks.take(id);
if(net && Core::removeNetwork(user(), id)) {
emit networkRemoved(id);
void networkConnected(NetworkId networkid);
void networkDisconnected(NetworkId networkid);
+ void destroyNetwork(NetworkId);
+
//! Called when storage updated a BufferInfo.
/** This emits bufferInfoUpdated() via SignalProxy, iff it's one of our buffers.
* \param user The buffer's owner (not necessarily us)
SignalProxy *_signalProxy;
QHash<NetworkId, NetworkConnection *> _connections;
QHash<NetworkId, Network *> _networks;
+ QHash<NetworkId, Network *> _networksToRemove;
QHash<IdentityId, Identity *> _identities;
QScriptEngine *scriptEngine;
}
void NetworksSettingsPage::setItemState(NetworkId id, QListWidgetItem *item) {
- if(!item) item = networkItem(id);
+ if(!item && !(item = networkItem(id))) return;
const Network *net = Client::network(id);
if(!net || net->isInitialized()) item->setFlags(item->flags() | Qt::ItemIsEnabled);
else item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
item->setIcon(disconnectedIcon);
}
if(net) {
+ bool select = false;
// check if we already have another net of this name in the list, and replace it
QList<QListWidgetItem *> items = ui.networkList->findItems(net->networkName(), Qt::MatchExactly);
if(items.count()) {
foreach(QListWidgetItem *i, items) {
NetworkId oldid = i->data(Qt::UserRole).value<NetworkId>();
if(oldid > 0) continue; // only locally created nets should be replaced
- if(oldid == currentId) item->setSelected(true);
- delete ui.networkList->takeItem(ui.networkList->row(i));
+ if(oldid == currentId) select = true;
+ int row = ui.networkList->row(i);
+ if(row >= 0) delete ui.networkList->takeItem(row);
networkInfos.remove(oldid);
break;
}
}
item->setText(net->networkName());
+ if(select) item->setSelected(true);
}
}
quasselVersion = "0.2.0-pre";
quasselDate = "2008-02-12";
- quasselBuild = 509;
+ quasselBuild = 510;
//! Minimum client build number the core needs
clientBuildNeeded = 509;