X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoreirclisthelper.cpp;h=dbcdcc4c07090922cc2127ba9e75ee5c38b7a2d1;hp=d8a317cdd59d7b5b9c0114bf0c4ee4cd297c1a1c;hb=02455427bfd88584a81f94b1b234fe21ad3e09cd;hpb=733eedc159bd22a9f5e307e2db3d075eedc3b7a9 diff --git a/src/core/coreirclisthelper.cpp b/src/core/coreirclisthelper.cpp index d8a317cd..dbcdcc4c 100644 --- a/src/core/coreirclisthelper.cpp +++ b/src/core/coreirclisthelper.cpp @@ -23,7 +23,6 @@ #include "networkconnection.h" #include "userinputhandler.h" - QVariantList CoreIrcListHelper::requestChannelList(const NetworkId &netId, const QStringList &channelFilters) { if(_finishedChannelLists.contains(netId)) return _finishedChannelLists.take(netId); @@ -31,13 +30,8 @@ QVariantList CoreIrcListHelper::requestChannelList(const NetworkId &netId, const if(_channelLists.contains(netId)) { _queuedQuery[netId] = channelFilters.join(","); } else { - _channelLists[netId] = QList(); - - NetworkConnection *networkConnection = coreSession()->networkConnection(netId); - if(networkConnection) - networkConnection->userInputHandler()->handleList(BufferInfo(), channelFilters.join(",")); + dispatchQuery(netId, channelFilters.join(",")); } - return QVariantList(); } @@ -49,17 +43,22 @@ bool CoreIrcListHelper::addChannel(const NetworkId &netId, const QString &channe return true; } +bool CoreIrcListHelper::dispatchQuery(const NetworkId &netId, const QString &query) { + NetworkConnection *networkConnection = coreSession()->networkConnection(netId); + if(networkConnection) { + _channelLists[netId] = QList(); + networkConnection->userInputHandler()->handleList(BufferInfo(), query); + _queryTimeout[startTimer(10000)] = netId; + return true; + } else { + return false; + } +} + bool CoreIrcListHelper::endOfChannelList(const NetworkId &netId) { if(_queuedQuery.contains(netId)) { // we're no longer interessted in the current data. drop it and issue a new request. - _channelLists[netId] = QList(); - - NetworkConnection *networkConnection = coreSession()->networkConnection(netId); - if(networkConnection) - networkConnection->userInputHandler()->handleList(BufferInfo(), _queuedQuery[netId]); - - _queuedQuery.remove(netId); - return true; + return dispatchQuery(netId, _queuedQuery.take(netId)); } else if(_channelLists.contains(netId)) { QVariantList channelList; foreach(ChannelDescription channel, _channelLists[netId]) { @@ -78,3 +77,9 @@ bool CoreIrcListHelper::endOfChannelList(const NetworkId &netId) { } } +void CoreIrcListHelper::timerEvent(QTimerEvent *event) { + int timerId = event->timerId(); + killTimer(timerId); + NetworkId netId = _queryTimeout.take(timerId); + endOfChannelList(netId); +}