KviRegisteredUser * KviRegisteredUserDataBase::addUser(const QString & name) { if(name.isEmpty()) return 0; if(m_pUserDict->find(name))return 0; KviRegisteredUser * u = new KviRegisteredUser(name); m_pUserDict->replace(u->name(),u); //u->name() because we're NOT copying keys! emit(userAdded(name)); return u; }
KviRegisteredUser * KviRegisteredUserDataBase::getUser(const QString & name) { if(name.isEmpty()) return 0; KviRegisteredUser * u = m_pUserDict->find(name); if(!u) { u = new KviRegisteredUser(name); m_pUserDict->replace(u->name(),u); //u->name() because we're NOT copying keys! } return u; }
void KviRegisteredUserDataBase::load(const QString & filename) { QString szCurrent; KviConfigurationFile cfg(filename, KviConfigurationFile::Read); KviConfigurationFileIterator it(*cfg.dict()); while(it.current()) { cfg.setGroup(it.currentKey()); szCurrent = it.currentKey(); if(KviQString::equalCSN("#Group ", szCurrent, 7)) { szCurrent.remove(0, 7); addGroup(szCurrent); } else { KviRegisteredUser * u = addUser(szCurrent); if(u) { u->setIgnoreEnabled(cfg.readBoolEntry("IgnoreEnabled", false)); u->setIgnoreFlags(cfg.readIntEntry("IgnoreFlags", 0)); KviConfigurationFileGroupIterator sdi(*(it.current())); while(sdi.current()) { QString tmp = sdi.currentKey(); if(KviQString::equalCSN("prop_", tmp, 5)) { tmp.remove(0, 5); u->setProperty(tmp, *(sdi.current())); } else if(KviQString::equalCSN("mask_", tmp, 5)) { KviIrcMask * mask = new KviIrcMask(*(sdi.current())); addMask(u, mask); } else if(KviQString::equalCI(tmp, "Group")) { u->setGroup(*(sdi.current())); } ++sdi; } } } ++it; } if(!m_pGroupDict->find(__tr("Default"))) addGroup(__tr("Default")); }
bool KviRegisteredUserDataBase::removeUser(const QString & name) { if(name.isEmpty()) return false; KviRegisteredUser * u = m_pUserDict->find(name); if(!u)return false; while(KviIrcMask * mask = u->maskList()->first()) { if(!removeMaskByPointer(mask)) qDebug("Ops... removeMaskByPointer(%s) failed ?",name.toUtf8().data()); } emit(userRemoved(name)); m_pUserDict->remove(name); return true; }
void KviRegisteredUserDataBase::copyFrom(KviRegisteredUserDataBase * db) { m_pUserDict->clear(); m_pWildMaskList->clear(); m_pMaskDict->clear(); m_pGroupDict->clear(); emit(databaseCleared()); KviPointerHashTableIterator<QString, KviRegisteredUser> it(*(db->m_pUserDict)); while(KviRegisteredUser * theCur = it.current()) { KviRegisteredUser * u = getUser(theCur->name()); // copy masks KviPointerList<KviIrcMask> * l = theCur->maskList(); for(KviIrcMask * m = l->first(); m; m = l->next()) { KviIrcMask * m2 = new KviIrcMask(*m); addMask(u, m2); } // copy properties KviPointerHashTable<QString, QString> * pd = theCur->propertyDict(); if(pd) { KviPointerHashTableIterator<QString, QString> pdi(*pd); while(pdi.current()) { u->setProperty(pdi.currentKey(), *(pdi.current())); ++pdi; } } u->m_iIgnoreFlags = theCur->m_iIgnoreFlags; u->m_bIgnoreEnabled = theCur->m_bIgnoreEnabled; u->setGroup(theCur->group()); ++it; } KviPointerHashTableIterator<QString, KviRegisteredUserGroup> git(*db->m_pGroupDict); while(git.current()) { addGroup(git.currentKey()); ++git; } }
KviRegisteredUser * KviIrcUserDataBase::registeredUser(const QString & szNick, const QString & szUser, const QString & szHost) { if(szNick.isEmpty()) return 0; KviIrcUserEntry * pEntry = find(szNick); if(!pEntry) return g_pRegisteredUserDataBase->findMatchingUser(szNick,szUser,szHost); KviRegisteredUser * pUser = 0; if(pEntry->m_bNotFoundRegUserLoockup && pEntry->m_szLastRegisteredMatchNick == szNick) return 0; if(!pEntry->m_szRegisteredUserName.isEmpty() && pEntry->m_szLastRegisteredMatchNick == szNick) pUser = g_pRegisteredUserDataBase->getUser(pEntry->m_szRegisteredUserName); if(!pUser) { //user renamed or it is a first loockup if(pEntry->hasHost() && pEntry->hasUser()) { pUser = g_pRegisteredUserDataBase->findMatchingUser(szNick,pEntry->user(),pEntry->host()); if(pUser) { pEntry->m_szLastRegisteredMatchNick = szNick; pEntry->m_szRegisteredUserName = pUser->name(); pEntry->m_bUseCustomColor = pUser->getBoolProperty("useCustomColor"); QString szTmp = pUser->getProperty("customColor"); KviStringConversion::fromString(szTmp,pEntry->m_cachedColor); pEntry->m_bNotFoundRegUserLoockup = false; //to be sure } else { pEntry->m_szLastRegisteredMatchNick = szNick; pEntry->m_bNotFoundRegUserLoockup = true; } } } return pUser; }
void RegisteredUsersDialog::editGroup(KviRegisteredUserGroup * group) { bool ok; QString text = QInputDialog::getText(this, "Change Group Name - KVIrc", __tr2qs_ctx("Group name:", "register"), QLineEdit::Normal, group->name(), &ok); if(ok && !text.isEmpty()) { QString szOldGroup = group->name(); g_pLocalRegisteredUserDataBase->groupDict()->setAutoDelete(false); g_pLocalRegisteredUserDataBase->groupDict()->remove(szOldGroup); g_pLocalRegisteredUserDataBase->groupDict()->setAutoDelete(true); group->setName(text); g_pLocalRegisteredUserDataBase->groupDict()->insert(text, group); KviPointerHashTable<QString, KviRegisteredUser> * d = g_pLocalRegisteredUserDataBase->userDict(); for(KviRegisteredUser * u = d->first(); u; u = d->next()) { if(u->group() == szOldGroup) u->setGroup(text); } fillList(); // select the last edited item for(int c = 0; c < m_pListView->topLevelItemCount(); c++) { QTreeWidgetItem * pGroup = m_pListView->topLevelItem(c); if(KviQString::equalCI(pGroup->text(0), text)) { pGroup->setSelected(true); m_pListView->setCurrentItem(pGroup); break; } } } }
void RegisteredUserEntryDialog::okClicked() { QString szGroup; if(m_pUser) { szGroup=m_pUser->group(); g_pLocalRegisteredUserDataBase->removeUser(m_pUser->name()); } QString name = m_pNameEdit->text(); if(name.isEmpty())name = "user"; KviRegisteredUser * u; QString szNameOk = name; int idx = 1; do { u = g_pLocalRegisteredUserDataBase->findUserByName(szNameOk); if(u) { szNameOk = QString("%1%2").arg(name).arg(idx); idx++; } } while(u); u = g_pLocalRegisteredUserDataBase->addUser(szNameOk); u->setGroup(szGroup); if(!u) { // ops... no way // FIXME: spit an error message ? qDebug("Ops.. something wrong with the regusers db"); accept(); return; } int cnt = m_pMaskListBox->count(); idx = 0; while(cnt > 0) { QString mask = m_pMaskListBox->item(idx)->text(); KviIrcMask * mk = new KviIrcMask(mask); g_pLocalRegisteredUserDataBase->removeMask(*mk); g_pLocalRegisteredUserDataBase->addMask(u,mk); cnt--; idx++; } u->setProperty("comment",m_pCommentEdit->text()); m_pAvatarSelector->commit(); if(!m_pAvatar->isNull()) { QString szPath = m_pAvatar->path(); u->setProperty("avatar",szPath); } if(m_pNotifyCheck->isChecked()) { QString szNicks = m_pNotifyNick->text(); if(szNicks.isEmpty()) { u->setProperty("notify",QString("")); } else { u->setProperty("notify",szNicks); } } else { u->setProperty("notify",QString("")); } m_pPropertyDict->remove("comment"); m_pPropertyDict->remove("notify"); m_pPropertyDict->remove("avatar"); KviPointerHashTableIterator<QString,QString> it(*m_pPropertyDict); while(QString *s = it.current()) { u->setProperty(it.currentKey(),*s); ++it; } u->setProperty("useCustomColor",m_pCustomColorCheck->isChecked()); QString col; KviStringConversion::toString(m_pCustomColorSelector->getColor(),col); u->setProperty("customColor",col); int iIgnoreFlags=0; u->setIgnoreEnabled(m_pIgnoreEnabled->isChecked()); if(m_pIgnoreQuery->isChecked()) iIgnoreFlags |= KviRegisteredUser::Query; if(m_pIgnoreChannel->isChecked()) iIgnoreFlags |= KviRegisteredUser::Channel; if(m_pIgnoreNotice->isChecked()) iIgnoreFlags |= KviRegisteredUser::Notice; if(m_pIgnoreCtcp->isChecked()) iIgnoreFlags |= KviRegisteredUser::Ctcp; if(m_pIgnoreInvite->isChecked()) iIgnoreFlags |= KviRegisteredUser::Invite; if(m_pIgnoreDcc->isChecked()) iIgnoreFlags |= KviRegisteredUser::Dcc; u->setIgnoreFlags(iIgnoreFlags); accept(); g_pApp->optionResetUpdate(KviOption_resetUpdateGui); }
void RegistrationWizard::accept() { bool bLocalDb = true; if(!m_pDb) { bLocalDb = false; m_pDb = g_pRegisteredUserDataBase; } QString szName = m_pEditRealName->text(); KviRegisteredUser * u; if(bLocalDb) { if(szName.isEmpty()) szName = "user"; QString szNameOk = szName; int idx = 1; do { u = m_pDb->findUserByName(szNameOk); if(u) { szNameOk = QString("%1%2").arg(szNameOk).arg(idx); idx++; } } while(u); u = m_pDb->addUser(szNameOk); } else { u = m_pDb->findUserByName(szName); if(!u)u = m_pDb->addUser(szName); } if(!u) { // ops... no way // FIXME: spit an error message ? qDebug("Oops! Something wrong with the regusers DB"); //delete this; return; } KviIrcMask * mk; QString m1 = m_pNicknameEdit1->text(); QString m2 = m_pUsernameEdit1->text(); QString m3 = m_pHostEdit1->text(); if(!(m1.isEmpty() && m2.isEmpty() && m3.isEmpty())) { mk = new KviIrcMask(m1,m2,m3); m_pDb->removeMask(*mk); m_pDb->addMask(u,mk); } m1 = m_pNicknameEdit2->text(); m2 = m_pUsernameEdit2->text(); m3 = m_pHostEdit2->text(); if(!(m1.isEmpty() && m2.isEmpty() && m3.isEmpty())) { if(m1.isEmpty())m1 = "*"; if(m2.isEmpty())m2 = "*"; if(m3.isEmpty())m3 = "*"; mk = new KviIrcMask(m1,m2,m3); m_pDb->removeMask(*mk); m_pDb->addMask(u,mk); } m_pAvatarSelector->commit(); bool bSetAvatar = false; if(!m_pAvatar->isNull()) { QString szPath = m_pAvatar->path(); u->setProperty("avatar",szPath); bSetAvatar = true; } if(m_pNotifyCheck->isChecked()) { m1 = m_pNotifyNickEdit1->text(); m2 = m_pNotifyNickEdit2->text(); if(!m2.isEmpty()) { if(!m1.isEmpty()) m1.append(' '); m1.append(m2); } if(!m1.isEmpty()) { u->setProperty("notify",m1); if(!bLocalDb)g_pApp->restartNotifyLists(); } } if(bSetAvatar && !bLocalDb) g_pApp->resetAvatarForMatchingUsers(u); KviTalWizard::accept(); // if(!m_bModal)delete this; // hide(); // g_pApp->collectGarbage(this); }