From: Manuel Nickschas Date: Thu, 20 Nov 2008 09:12:22 +0000 (+0100) Subject: Add method to search for a buffer with a given name in a given network X-Git-Tag: 0.4.0~421 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=00f4731d43366b9c5fb535147597c254084984ce;hp=8b896450a5fc56a2bde37b44e81dc5af6c338be1 Add method to search for a buffer with a given name in a given network This allows us to find a particularly named buffer in the NetworkModel. --- diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 23e06422..1de02e50 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -922,14 +922,14 @@ void NetworkModel::removeBuffer(BufferId bufferId) { buffItem->parent()->removeChild(buffItem); } -MsgId NetworkModel::lastSeenMsgId(BufferId bufferId) { +MsgId NetworkModel::lastSeenMsgId(BufferId bufferId) const { if(!_bufferItemCache.contains(bufferId)) return MsgId(); return _bufferItemCache[bufferId]->lastSeenMsgId(); } -MsgId NetworkModel::lastSeenMarkerMsgId(BufferId bufferId) { +MsgId NetworkModel::lastSeenMarkerMsgId(BufferId bufferId) const { if(!_bufferItemCache.contains(bufferId)) return MsgId(); @@ -998,28 +998,28 @@ void NetworkModel::checkForNewBuffers(const QModelIndex &parent, int start, int } } -QString NetworkModel::bufferName(BufferId bufferId) { +QString NetworkModel::bufferName(BufferId bufferId) const { if(!_bufferItemCache.contains(bufferId)) return QString(); return _bufferItemCache[bufferId]->bufferName(); } -BufferInfo::Type NetworkModel::bufferType(BufferId bufferId) { +BufferInfo::Type NetworkModel::bufferType(BufferId bufferId) const { if(!_bufferItemCache.contains(bufferId)) return BufferInfo::InvalidBuffer; return _bufferItemCache[bufferId]->bufferType(); } -BufferInfo NetworkModel::bufferInfo(BufferId bufferId) { +BufferInfo NetworkModel::bufferInfo(BufferId bufferId) const { if(!_bufferItemCache.contains(bufferId)) return BufferInfo(); return _bufferItemCache[bufferId]->bufferInfo(); } -NetworkId NetworkModel::networkId(BufferId bufferId) { +NetworkId NetworkModel::networkId(BufferId bufferId) const { if(!_bufferItemCache.contains(bufferId)) return NetworkId(); @@ -1030,7 +1030,7 @@ NetworkId NetworkModel::networkId(BufferId bufferId) { return NetworkId(); } -QString NetworkModel::networkName(BufferId bufferId) { +QString NetworkModel::networkName(BufferId bufferId) const { if(!_bufferItemCache.contains(bufferId)) return QString(); @@ -1040,3 +1040,12 @@ QString NetworkModel::networkName(BufferId bufferId) { else return QString(); } + +BufferId NetworkModel::bufferId(NetworkId networkId, const QString &bufferName) const { + foreach(BufferItem *item, _bufferItemCache) { + NetworkItem *netItem = qobject_cast(item->parent()); + if(netItem && netItem->networkId() == networkId && item->bufferName() == bufferName) + return item->bufferId(); + } + return BufferId(); +} diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index d6179865..89ecb968 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -50,7 +50,7 @@ class NetworkItem : public PropertyMapItem { Q_PROPERTY(QString networkName READ networkName) Q_PROPERTY(QString currentServer READ currentServer) Q_PROPERTY(int nickCount READ nickCount) - + public: NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0); @@ -180,7 +180,7 @@ public: virtual inline QString topic() const { return (bool)_ircChannel ? _ircChannel->topic() : QString(); } virtual inline int nickCount() const { return (bool)_ircChannel ? _ircChannel->ircUsers().count() : 0; } - + void attachIrcChannel(IrcChannel *ircChannel); public slots: @@ -207,7 +207,7 @@ class IrcUserItem; class UserCategoryItem : public PropertyMapItem { Q_OBJECT Q_PROPERTY(QString categoryName READ categoryName) - + public: UserCategoryItem(int category, AbstractTreeItem *parent); @@ -233,7 +233,7 @@ private: class IrcUserItem : public PropertyMapItem { Q_OBJECT Q_PROPERTY(QString nickName READ nickName) - + public: IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent); @@ -299,13 +299,21 @@ public: BufferInfo::ActivityLevel bufferActivity(const BufferInfo &buffer) const; - QString bufferName(BufferId bufferId); - BufferInfo::Type bufferType(BufferId bufferId); - BufferInfo bufferInfo(BufferId bufferId); - MsgId lastSeenMsgId(BufferId bufferId); - MsgId lastSeenMarkerMsgId(BufferId bufferId); - NetworkId networkId(BufferId bufferId); - QString networkName(BufferId bufferId); + //! Finds a buffer with a given name in a given network + /** This performs a linear search through all BufferItems, hence it is expensive. + * @param networkId The network which we search in + * @param bufferName The bufferName we look for + * @return The id of the buffer if found, an invalid one else + */ + BufferId bufferId(NetworkId networkId, const QString &bufferName) const; + + QString bufferName(BufferId bufferId) const; + BufferInfo::Type bufferType(BufferId bufferId) const; + BufferInfo bufferInfo(BufferId bufferId) const; + MsgId lastSeenMsgId(BufferId bufferId) const; + MsgId lastSeenMarkerMsgId(BufferId bufferId) const; + NetworkId networkId(BufferId bufferId) const; + QString networkName(BufferId bufferId) const; inline QList allBufferIds() const { return _bufferItemCache.keys(); }