You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kvirc/src/kvilib/ext/kvi_regusersdb.h

203 lines
7.7 KiB

#ifndef _KVI_REGUSERSDB_H_
#define _KVI_REGUSERSDB_H_
//=================================================================================================
//
// File : kvi_regusersdb.h
// Creation date : Sat Sep 09 2000 15:30:56 by Szymon Stefanek
//
// This file is part of the KVirc irc client distribution
// Copyright (C) 2000-2004 Szymon Stefanek (pragma at kvirc dot net)
//
// This program is FREE software. You can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your opinion) any later version.
//
// This program is distributed in the HOPE that it will be USEFUL,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, write to the Free Software Foundation,
// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
//=================================================================================================
//
// REGISTERED USERS
//
// Here we manage users resigered by mask and their (generic!) properties
//
#include "kvi_settings.h"
#include "kvi_heapobject.h"
#include "kvi_qstring.h"
#include "kvi_ircmask.h"
#include "kvi_debug.h"
#include "kvi_pointerlist.h"
#include "kvi_pointerhashtable.h"
#include <tqobject.h>
class KviRegisteredUserDataBase;
#ifndef _KVI_REGUSERDB_CPP_
extern KVILIB_API KviRegisteredUserDataBase * g_pRegisteredUserDataBase;
#endif //!_KVI_REGUSERDB_CPP_
//=================================================================================================
//
// KviRegisteredUser
//
class KVILIB_API KviRegisteredUser : public KviHeapObject
{
friend class KviRegisteredUserDataBase;
public:
enum IgnoreFlags {
Channel=1,
Query=2,
Notice=4,
Ctcp=8,
Invite=16,
Dcc=32
};
KviRegisteredUser(const TQString &name);
~KviRegisteredUser();
private:
int m_iIgnoreFlags;
bool m_bIgnoreEnabled;
TQString m_szName;
TQString m_szGroup;
KviPointerHashTable<TQString,TQString> * m_pPropertyDict; // owned properties
KviPointerList<KviIrcMask> * m_pMaskList; // owned masks
protected:
// mask ownership is transferred! (always!) returns false if the mask was already there
bool addMask(KviIrcMask * mask);
bool removeMask(KviIrcMask * mask);
KviIrcMask * findMask(const KviIrcMask &mask);
public:
int ignoreFlags() { return m_iIgnoreFlags; };
void setIgnoreFlags(int flags) {m_iIgnoreFlags=flags; };
bool ignoreEnagled() { return m_bIgnoreEnabled; };
void setIgnoreEnabled(bool enabled) {m_bIgnoreEnabled=enabled;};
bool isIgnoreEnabledFor(IgnoreFlags flag);
const TQString &name(){ return m_szName; };
bool matches(const KviIrcMask &mask);
bool matchesFixed(const KviIrcMask &mask);
bool matchesFixed(const TQString &nick,const TQString &user,const TQString &host);
void setProperty(const TQString &name,const TQString &value);
void setProperty(const TQString &name,bool value);
void setGroup(const TQString &name) { m_szGroup=name; };
const TQString &group(){ return m_szGroup; };
const TQString & getProperty(const TQString &name); // returns 0 if the property is not there
bool getProperty(const TQString &name,TQString &value); // returns false if the property is not there
bool getBoolProperty(const TQString &name,bool def=FALSE); // returns true if the property is there and is true
// the propertyDict may be 0!
KviPointerHashTable<TQString,TQString> * propertyDict(){ return m_pPropertyDict; };
// this is never zero (but may contain no masks)
KviPointerList<KviIrcMask> * maskList(){ return m_pMaskList; };
};
//============================================================================================================
//
// KviRegisteredUserGroup
//
class KVILIB_API KviRegisteredUserGroup : public KviHeapObject
{
friend class KviRegisteredUserDataBase;
public:
KviRegisteredUserGroup(const TQString &name);
~KviRegisteredUserGroup();
void setName(const TQString &name) { m_szName=name; };
const TQString &name(){ return m_szName; };
private:
TQString m_szName;
};
//============================================================================================================
//
// KviRegisteredMask
//
class KVILIB_API KviRegisteredMask
{
private:
KviRegisteredUser * m_pUser; // pointer , not owned!
KviIrcMask * m_pMask; // pointer , not owned!
int m_iMaskNonWildChars;
public:
KviRegisteredMask(KviRegisteredUser * u,KviIrcMask * m);
~KviRegisteredMask(){};
public:
int nonWildChars(){ return m_iMaskNonWildChars; };
KviRegisteredUser * user(){ return m_pUser; };
KviIrcMask * mask(){ return m_pMask; };
};
typedef KviPointerList<KviRegisteredMask> KviRegisteredMaskList;
//=================================================================================================
//
// KviRegisteredUsersDb
//
// Manages a set of KviRegisteredUser instances stored in the m_pUserDict dictionary
// The users are identified by masks stored in m_pMaskDict and m_pWildMaskList
// m_pMaskDict contains lists of non wild-nick KviRegisteredMask that point to users
// m_pWildMaskList is a list of wild-nick KviRegisteredMask that point to users
//
class KVILIB_API KviRegisteredUserDataBase : public TQObject
{
Q_OBJECT
TQ_OBJECT
public:
KviRegisteredUserDataBase();
~KviRegisteredUserDataBase();
private:
KviPointerHashTable<TQString,KviRegisteredUser> * m_pUserDict; // unique namespace, owns the objects, does not copy keys
KviPointerHashTable<TQString,KviRegisteredMaskList> * m_pMaskDict; // owns the objects, copies the keys
KviRegisteredMaskList * m_pWildMaskList; // owns the objects
KviPointerHashTable<TQString,KviRegisteredUserGroup>* m_pGroupDict;
public:
void copyFrom(KviRegisteredUserDataBase * db);
KviRegisteredUser * addUser(const TQString &name); // returns 0 if already there
KviRegisteredUser * getUser(const TQString &name); // returns existing or adds
bool removeUser(const TQString &name);
bool removeGroup(const TQString &name);
KviRegisteredUser * findUserByName(const TQString &name){ return m_pUserDict->find(name); };
// mask must be allocated on the heap and the ownership is transferred!
// returns non zero if there is already an user with this mask (returns the pointer to it!)
KviRegisteredUser * addMask(KviRegisteredUser * u,KviIrcMask * mask);
bool removeMaskByPointer(KviIrcMask * mask);
bool removeMask(const KviIrcMask &mask);
KviRegisteredUser * findMatchingUser(const TQString &nick,const TQString &user,const TQString &host);
KviRegisteredUser * findUserWithMask(const KviIrcMask &mask);
KviRegisteredMask * findExactMask(const KviIrcMask &mask);
KviRegisteredMask * findMatchingMask(const TQString &nick,const TQString &user,const TQString &host);
//Only used in few places (actually one) of the code, but lot of times;perfect for inlining...
//bool isIgnoredUser(const char * nick,const char * user,const char * host);
void load(const TQString &filename);
void save(const TQString &filename);
KviPointerHashTable<TQString,KviRegisteredUser> * userDict(){ return m_pUserDict; };
KviPointerHashTable<TQString,KviRegisteredUserGroup>* groupDict() { return m_pGroupDict; };
KviRegisteredUserGroup* addGroup(const TQString &name);
signals:
void userRemoved(const TQString&);
void userChanged(const TQString&);
void userAdded (const TQString&);
void databaseCleared();
};
#endif //_KVI_REGUSERSDB_H_