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;
	}
}
Пример #6
0
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;
}
Пример #7
0
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);
}
Пример #9
0
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);
}