KviRegisteredUserMask * KviRegisteredUserDataBase::findMatchingMask(const QString & nick, const QString & user, const QString & host) { // first lookup the nickname in the maskDict if(nick.isEmpty()) return nullptr; KviRegisteredUserMaskList * l = m_pMaskDict->find(nick); if(l) { for(KviRegisteredUserMask * m = l->first(); m; m = l->next()) { if(m->mask()->matchesFixed(nick, user, host)) return m; } } // not found....lookup the wild ones for(KviRegisteredUserMask * m = m_pWildMaskList->first(); m; m = m_pWildMaskList->next()) { if(m->mask()->matchesFixed(nick, user, host)) return m; } return nullptr; // no match at all }
KviRegisteredUserMask * KviRegisteredUserDataBase::findExactMask(const KviIrcMask & mask) { // first lookup the nickname in the maskDict if(mask.nick() == "") return nullptr; KviRegisteredUserMaskList * l = m_pMaskDict->find(mask.nick()); if(l) { for(KviRegisteredUserMask * m = l->first(); m; m = l->next()) { if(*(m->mask()) == mask) return m; } } // not found....lookup the wild ones for(KviRegisteredUserMask * m = m_pWildMaskList->first(); m; m = m_pWildMaskList->next()) { if(*(m->mask()) == mask) return m; } return nullptr; // no match at all }
bool KviRegisteredUserDataBase::removeMask(const KviIrcMask &mask) { // find the mask pointer KviRegisteredUserMask * m = findExactMask(mask); // and remove it if(m){ if(removeMaskByPointer(m->mask())) { return true; } } return 0; }
KviRegisteredUser * KviRegisteredUserDataBase::addMask(KviRegisteredUser * u, KviIrcMask * mask) { if(!u || !mask) return nullptr; KVI_ASSERT(u == m_pUserDict->find(u->name())); KviRegisteredUserMaskList * l; if(mask->hasWildNick()) { for(KviRegisteredUserMask * m = m_pWildMaskList->first(); m; m = m_pWildMaskList->next()) { if(*(m->mask()) == *mask) { delete mask; mask = nullptr; return m->user(); } } // not found ...ok... add it // masks with more info go first in the list l = m_pWildMaskList; } else { l = m_pMaskDict->find(mask->nick()); if(l) { // FIXME: #warning "Here we could compare the host and username only: nick matches for sure" for(KviRegisteredUserMask * m = l->first(); m; m = l->next()) { if(*(m->mask()) == *mask) { delete mask; mask = nullptr; return m->user(); } } // not found ...ok... add it } else { // not found ...ok... add it // this is the first mask in the list l = new KviRegisteredUserMaskList; l->setAutoDelete(true); if(!u->addMask(mask)) { qDebug("Oops! Received an incoherent regusers action, recovered?"); delete l; l = nullptr; } else { append_mask_to_list(l, u, mask); m_pMaskDict->insert(mask->nick(), l); } return nullptr; } } // Ok...add it if(!u->addMask(mask)) { qDebug("Oops! Received an incoherent regusers action, recovered?"); return nullptr; // ops...already there ? } append_mask_to_list(l, u, mask); return nullptr; }