diff options
| author | 2010-12-30 05:48:54 +0000 | |
|---|---|---|
| committer | 2010-12-30 05:48:54 +0000 | |
| commit | d682a3c0d52ee75250d3c2f07ed0ade7826b124e (patch) | |
| tree | 2bbdef341e50123f00369fac9d02f3d0aeac479f /src/kvilib | |
| parent | Some fixes for the http request (diff) | |
| download | KVIrc-d682a3c0d52ee75250d3c2f07ed0ade7826b124e.tar.gz KVIrc-d682a3c0d52ee75250d3c2f07ed0ade7826b124e.tar.bz2 KVIrc-d682a3c0d52ee75250d3c2f07ed0ade7826b124e.zip | |
reworked mIRC control codes;
yet more splitting;
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5272 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/kvilib')
| -rw-r--r-- | src/kvilib/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/kvilib/irc/KviIrcUserDataBase.cpp | 6 | ||||
| -rw-r--r-- | src/kvilib/irc/KviMircCntrl.cpp | 56 | ||||
| -rw-r--r-- | src/kvilib/irc/KviMircCntrl.h | 97 | ||||
| -rw-r--r-- | src/kvilib/irc/KviUserIdentity.cpp | 141 | ||||
| -rw-r--r-- | src/kvilib/irc/KviUserIdentity.h | 104 | ||||
| -rw-r--r-- | src/kvilib/irc/KviUserIdentityManager.cpp | 166 | ||||
| -rw-r--r-- | src/kvilib/irc/KviUserIdentityManager.h | 143 |
8 files changed, 396 insertions, 318 deletions
diff --git a/src/kvilib/CMakeLists.txt b/src/kvilib/CMakeLists.txt index 4274cc276..ece9c9b62 100644 --- a/src/kvilib/CMakeLists.txt +++ b/src/kvilib/CMakeLists.txt @@ -105,6 +105,7 @@ SET(kvilib_SRCS irc/KviNickServRule.cpp irc/KviNickServRuleSet.cpp irc/KviUserIdentity.cpp + irc/KviUserIdentityManager.cpp net/KviDnsResolver.cpp net/KviHttpRequest.cpp net/KviNetUtils.cpp diff --git a/src/kvilib/irc/KviIrcUserDataBase.cpp b/src/kvilib/irc/KviIrcUserDataBase.cpp index 3cf11a88f..d1f552571 100644 --- a/src/kvilib/irc/KviIrcUserDataBase.cpp +++ b/src/kvilib/irc/KviIrcUserDataBase.cpp @@ -56,7 +56,7 @@ void KviIrcUserEntry::setRealName(const QString &rn) m_szRealName = rn.trimmed(); if(m_szRealName.length()>=3) { - if( (m_szRealName[0].unicode()==KVI_TEXT_COLOR) && (m_szRealName[2].unicode()==KVI_TEXT_RESET) ) + if((m_szRealName[0].unicode() == KviMircCntrl::Color) && (m_szRealName[2].unicode() == KviMircCntrl::Reset)) { // hum.. encoded as hidden color code eh ? publish is somewhere, so others might implement this... // for backwards compatibily, 3=bot @@ -84,12 +84,12 @@ void KviIrcUserEntry::setRealName(const QString &rn) */ if(m_szRealName.length()>=5) { - if((m_szRealName[0].unicode()==KVI_TEXT_COLOR)) + if((m_szRealName[0].unicode() == KviMircCntrl::Color)) { unsigned char iFore, iBack; int iPos=getUnicodeColorBytes(m_szRealName, 1, &iFore, &iBack); // extract smart nick color code - if(iPos > 1 && m_szRealName[iPos]==KVI_TEXT_RESET) + if(iPos > 1 && m_szRealName[iPos] == KviMircCntrl::Reset) { m_szRealName.truncate(iPos); int color = KviNickColors::getSmartColorIntByMircColor(iFore, iBack); diff --git a/src/kvilib/irc/KviMircCntrl.cpp b/src/kvilib/irc/KviMircCntrl.cpp index f34658d45..da24ff639 100644 --- a/src/kvilib/irc/KviMircCntrl.cpp +++ b/src/kvilib/irc/KviMircCntrl.cpp @@ -56,19 +56,19 @@ KVILIB_API const char * getColorBytes(const char *data_ptr,unsigned char *byte_1 data_ptr++; } else { //Senseless return - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return data_ptr; } } } else { //Senseless character control code OK and return - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return data_ptr; } } else { //Senseless character : only a CTRL+K code - (*byte_1)=KVI_NOCHANGE; - (*byte_2)=KVI_NOCHANGE; + (*byte_1)=KviMircCntrl::NoChange; + (*byte_2)=KviMircCntrl::NoChange; return data_ptr; } @@ -84,7 +84,7 @@ KVILIB_API const char * getColorBytes(const char *data_ptr,unsigned char *byte_1 } return data_ptr; } else { - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return data_ptr-1; } } @@ -121,19 +121,19 @@ KVILIB_API const kvi_wchar_t * getColorBytesW(const kvi_wchar_t *data_ptr,unsign data_ptr++; } else { //Senseless return - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return data_ptr; } } } else { //Senseless character control code OK and return - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return data_ptr; } } else { //Senseless character : only a CTRL+K code - (*byte_1)=KVI_NOCHANGE; - (*byte_2)=KVI_NOCHANGE; + (*byte_1)=KviMircCntrl::NoChange; + (*byte_2)=KviMircCntrl::NoChange; return data_ptr; } @@ -150,7 +150,7 @@ KVILIB_API const kvi_wchar_t * getColorBytesW(const kvi_wchar_t *data_ptr,unsign } return data_ptr; } else { - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return data_ptr-1; } } @@ -164,8 +164,8 @@ KVILIB_API unsigned int getUnicodeColorBytes(const QString &szData,unsigned int if(charIdx >= (unsigned int) szData.length()) { - (*byte_1)=KVI_NOCHANGE; - (*byte_2)=KVI_NOCHANGE; + (*byte_1)=KviMircCntrl::NoChange; + (*byte_2)=KviMircCntrl::NoChange; return charIdx; } @@ -175,8 +175,8 @@ KVILIB_API unsigned int getUnicodeColorBytes(const QString &szData,unsigned int if(((c < '0') || (c > '9'))) { // senseless : only a CTRL+K code - (*byte_1)=KVI_NOCHANGE; - (*byte_2)=KVI_NOCHANGE; + (*byte_1)=KviMircCntrl::NoChange; + (*byte_2)=KviMircCntrl::NoChange; return charIdx; } @@ -185,7 +185,7 @@ KVILIB_API unsigned int getUnicodeColorBytes(const QString &szData,unsigned int charIdx++; if(charIdx >= (unsigned int) szData.length()) { - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return charIdx; } @@ -193,7 +193,7 @@ KVILIB_API unsigned int getUnicodeColorBytes(const QString &szData,unsigned int if(((c < '0') || (c > '9')) && (c != ',')) { - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return charIdx; } @@ -204,7 +204,7 @@ KVILIB_API unsigned int getUnicodeColorBytes(const QString &szData,unsigned int charIdx++; if(charIdx >= (unsigned int) szData.length()) { - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return charIdx; } c = szData[(int)charIdx].unicode(); @@ -215,18 +215,18 @@ KVILIB_API unsigned int getUnicodeColorBytes(const QString &szData,unsigned int charIdx++; if(charIdx >= (unsigned int) szData.length()) { - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return charIdx; } c = szData[(int)charIdx].unicode(); } else { - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; return charIdx; } if((c < '0') || (c > '9')) { - (*byte_2)=KVI_NOCHANGE; + (*byte_2)=KviMircCntrl::NoChange; if(szData[(int)(charIdx-1)].unicode()==',') return charIdx-1; else @@ -264,25 +264,25 @@ namespace KviMircCntrl { switch(szData[i].unicode()) { - case KVI_TEXT_UNDERLINE: - case KVI_TEXT_BOLD: - case KVI_TEXT_RESET: - case KVI_TEXT_REVERSE: - case KVI_TEXT_CRYPTESCAPE: - case KVI_TEXT_CTCP: + case KviMircCntrl::Underline: + case KviMircCntrl::Bold: + case KviMircCntrl::Reset: + case KviMircCntrl::Reverse: + case KviMircCntrl::CryptEscape: + case KviMircCntrl::CTCP: if(i != begin) ret += szData.mid(begin,i - begin); i++; begin = i; break; - case KVI_TEXT_COLOR: + case KviMircCntrl::Color: if(i != begin) ret += szData.mid(begin,i - begin); i++; i = getUnicodeColorBytes(szData,i,&b1,&b2); begin = i; break; - case KVI_TEXT_ICON: + case KviMircCntrl::Icon: if(i != begin) ret += szData.mid(begin,i - begin); i++; diff --git a/src/kvilib/irc/KviMircCntrl.h b/src/kvilib/irc/KviMircCntrl.h index c3e813cde..edfd5709b 100644 --- a/src/kvilib/irc/KviMircCntrl.h +++ b/src/kvilib/irc/KviMircCntrl.h @@ -34,43 +34,10 @@ #include "kvi_settings.h" #include "KviCString.h" -// -// mIrc color codes -// - -#define KVI_WHITE 0 -#define KVI_BLACK 1 -#define KVI_DARKBLUE 2 -#define KVI_DARKGREEN 3 -#define KVI_RED 4 -#define KVI_DARKRED 5 -#define KVI_DARKVIOLET 6 -#define KVI_ORANGE 7 -#define KVI_YELLOW 8 -#define KVI_LIGHTGREEN 9 -#define KVI_BLUEMARINE 10 -#define KVI_LIGHTBLUE 11 -#define KVI_BLUE 12 -#define KVI_LIGHTVIOLET 13 -#define KVI_DARKGRAY 14 -#define KVI_LIGHTGRAY 15 - #define KVI_MIRCCOLOR_MAX_FOREGROUND 15 #define KVI_MIRCCOLOR_MAX_BACKGROUND 15 -// -// Non-standard color codes for KviIrcView -// -#define KVI_TRANSPARENT 100 -#define KVI_NOCHANGE 101 -// -// Internal control codes for KviIrcView -// -// (Totally artificial and internal to KviIrcView) -#define KVI_TEXT_ESCAPE 0x04 -#define KVI_TEXT_UNESCAPE 0x05 -#define KVI_TEXT_UNICON 0x06 -//#define KVI_TEXT_EMOTICON 0x07 + // ASCII Stuff: the following defines are meant to be escape sequences // that can go thru an IRC connection @@ -119,31 +86,23 @@ // // mIrc control codes // - //31 (0001 1111) US (Unit separator) -#define KVI_TEXT_UNDERLINE 0x1f //2 (0000 0010) STX (Start of text) -#define KVI_TEXT_BOLD 0x02 //15 (0000 1111) SI (Shift in) -#define KVI_TEXT_RESET 0x0f //22 (0001 0110) SYN (Synchronous idle) -#define KVI_TEXT_REVERSE 0x16 //3 (0000 0011) ETX (End of text) -#define KVI_TEXT_COLOR 0x03 // // Irc control codes // //1 (0000 0001) SOH (Start of heading) -#define KVI_TEXT_CTCP 0x01 // // KVirc added control codes // //30 (0001 1110) RS (Record separator) -#define KVI_TEXT_CRYPTESCAPE 0x1e //29 (0001 1101) GS (Group separator) -#define KVI_TEXT_ICON 0x1d + #ifndef _KVI_MIRCCNTRL_CPP_ extern KVILIB_API const char * getColorBytes(const char *data_ptr,unsigned char *byte_1,unsigned char *byte_2); @@ -151,13 +110,59 @@ extern KVILIB_API unsigned int getUnicodeColorBytes(const QString &szData,unsigned int charIdx,unsigned char *byte_1,unsigned char *byte_2); inline const QChar * getUnicodeColorBytes(const QChar *pData,unsigned char *byte_1,unsigned char *byte_2) { return (QChar *)getColorBytesW((const kvi_wchar_t *)pData,byte_1,byte_2); } - #endif namespace KviMircCntrl { - KVILIB_API QString stripControlBytes(const QString &szData); -} + /** + * \enum Color + * \brief Contains mIRC color codes + */ + enum Color { + White = 0, /**< White */ + Black = 1, /**< Black */ + DarkBlue = 2, /**< Dark blue */ + DarkGreen = 3, /**< Dark green */ + Red = 4, /**< Red */ + DarkRed = 5, /**< Dark red */ + DarkViolet = 6, /**< Dark violet */ + Orange = 7, /**< Orange */ + Yellow = 8, /**< Yellow */ + LightGreen = 9, /**< Light green */ + BlueMarine = 10, /**< Blue marine */ + LightBlue = 11, /**< Light blue */ + Blue = 12, /**< Blue */ + LightViolet = 13, /**< Light violet */ + DarkGray = 14, /**< Dark gray */ + LightGray = 15, /**< Light gray */ + Transparent = 100, /**< Transparent, non standard color code for KviIrcView */ + NoChange = 101 /**< No change, non standard color code for KviIrcView */ + }; + + /** + * \enum Control + * \brief Contains mIRC control codes + */ + enum Control { + CTCP = 0x01, /**< CTCP, IRC control code */ + Bold = 0x02, /**< Bold */ + Color = 0x03, /**< Color */ + Escape = 0x04, /**< Escape, totally artificial and internal to KviIrcView */ + UnEscape = 0x05, /**< Unescape, totally artificial and internal to KviIrcView */ + UnIcon = 0x06, /**< Unicon, totally artificial and internal to KviIrcView */ + Reset = 0x0f, /**< Reset */ + Reverse = 0x16, /**< Reverse */ + Icon = 0x1d, /**< Icon, KVIrc control code */ + CryptEscape = 0x1e, /**< Crypt escape, KVIrc control code */ + Underline = 0x1f /**< Underline */ + }; + /** + * \brief Removes control bytes from the given string + * \param szData The stringe to clean + * \return QString + */ + KVILIB_API QString stripControlBytes(const QString & szData); +} #endif //_KVI_MIRCCNTRL_H_ diff --git a/src/kvilib/irc/KviUserIdentity.cpp b/src/kvilib/irc/KviUserIdentity.cpp index e240d5568..b323e5caa 100644 --- a/src/kvilib/irc/KviUserIdentity.cpp +++ b/src/kvilib/irc/KviUserIdentity.cpp @@ -38,7 +38,7 @@ KviUserIdentity::~KviUserIdentity() { } -bool KviUserIdentity::load(KviConfigurationFile &cfg) +bool KviUserIdentity::load(KviConfigurationFile & cfg) { m_szId = cfg.group(); m_szNickName = cfg.readEntry("NickName"); @@ -63,7 +63,7 @@ bool KviUserIdentity::load(KviConfigurationFile &cfg) return !(m_szId.isEmpty() || m_szNickName.isEmpty()); } -bool KviUserIdentity::save(KviConfigurationFile &cfg) +bool KviUserIdentity::save(KviConfigurationFile & cfg) { cfg.setGroup(m_szId); cfg.writeEntry("NickName",m_szNickName); @@ -87,7 +87,7 @@ bool KviUserIdentity::save(KviConfigurationFile &cfg) return true; } -void KviUserIdentity::copyFrom(const KviUserIdentity &src) +void KviUserIdentity::copyFrom(const KviUserIdentity & src) { m_szId = src.m_szId; m_szNickName = src.m_szNickName; @@ -122,138 +122,3 @@ void KviUserIdentity::copyFrom(const KviUserIdentity &src) m_szOnConnectCommand = src.m_szOnConnectCommand; m_szOnLoginCommand = src.m_szOnLoginCommand; } - - -KviUserIdentityManager * KviUserIdentityManager::m_pInstance = 0; - -KviUserIdentityManager::KviUserIdentityManager() -: KviHeapObject() -{ - m_pIdentityDict = new KviPointerHashTable<QString,KviUserIdentity>(); - m_pIdentityDict->setAutoDelete(true); -} - -KviUserIdentityManager::~KviUserIdentityManager() -{ - delete m_pIdentityDict; -} - -void KviUserIdentityManager::init() -{ - if(m_pInstance)return; - m_pInstance = new KviUserIdentityManager(); -} - -void KviUserIdentityManager::done() -{ - if(!m_pInstance)return; - delete m_pInstance; - m_pInstance = 0; -} - -const KviUserIdentity * KviUserIdentityManager::defaultIdentity() -{ - KviUserIdentity * ret; - if(!m_szDefaultIdentity.isEmpty()) - { - ret = m_pIdentityDict->find(m_szDefaultIdentity); - if(ret)return ret; - } - - // the default identity is borken :/ - // grab the first one - KviPointerHashTableIterator<QString,KviUserIdentity> it(*m_pIdentityDict); - ret = it.current(); - if(ret) - { - m_szDefaultIdentity = ret->id(); - return ret; - } - // no identities available: create the default - ret = new KviUserIdentity(); - - ret->setId(__tr2qs("Default")); - ret->setNickName(KVI_DEFAULT_NICKNAME1); - - ret->setAltNickName1(QString(KVI_DEFAULT_NICKNAME2).replace(KVI_DEFAULT_NICKNAME_TOKEN, KVI_DEFAULT_NICKNAME1)); - ret->setAltNickName2(QString(KVI_DEFAULT_NICKNAME3).replace(KVI_DEFAULT_NICKNAME_TOKEN, KVI_DEFAULT_NICKNAME1)); - ret->setAltNickName3(QString(KVI_DEFAULT_NICKNAME4).replace(KVI_DEFAULT_NICKNAME_TOKEN, KVI_DEFAULT_NICKNAME1)); - ret->setUserName(KVI_DEFAULT_USERNAME); - ret->setRealName(KVI_DEFAULT_REALNAME); - ret->setPartMessage(KVI_DEFAULT_PART_MESSAGE); - ret->setQuitMessage(KVI_DEFAULT_QUIT_MESSAGE); - - m_pIdentityDict->replace(ret->id(),ret); - - return ret; -} - -void KviUserIdentityManager::load(const QString &szFileName) -{ - m_pIdentityDict->clear(); - - KviConfigurationFile cfg(szFileName,KviConfigurationFile::Read); - - cfg.setGroup("KVIrc"); - - m_szDefaultIdentity = cfg.readEntry("DefaultIdentity",""); - - KviConfigurationFileIterator it(*(cfg.dict())); - while( (it.current()) ) - { - if(!KviQString::equalCI(it.currentKey(),"KVIrc")) - { - cfg.setGroup(it.currentKey()); - - KviUserIdentity * id = new KviUserIdentity(); - if(id->load(cfg)) - m_pIdentityDict->replace(id->id(),id); - else - delete id; - } - ++it; - } -} - -void KviUserIdentityManager::save(const QString &szFileName) -{ - KviConfigurationFile cfg(szFileName,KviConfigurationFile::Write); - cfg.clear(); - - cfg.setGroup("KVIrc"); - - cfg.writeEntry("DefaultIdentity",m_szDefaultIdentity); - - KviPointerHashTableIterator<QString,KviUserIdentity> it(*m_pIdentityDict); - while(KviUserIdentity * id = it.current()) - { - id->save(cfg); - ++it; - } -} - -void KviUserIdentityManager::copyFrom(KviUserIdentityManager * pWorkingCopy) -{ - m_pIdentityDict->clear(); - m_szDefaultIdentity = pWorkingCopy->m_szDefaultIdentity; - KviPointerHashTableIterator<QString,KviUserIdentity> it(*(pWorkingCopy->m_pIdentityDict)); - while(KviUserIdentity * id = it.current()) - { - KviUserIdentity * pNew = new KviUserIdentity(); - pNew->copyFrom(*id); - m_pIdentityDict->replace(pNew->id(),pNew); - ++it; - } -} - -KviUserIdentityManager * KviUserIdentityManager::createWorkingCopy() -{ - KviUserIdentityManager * pCopy = new KviUserIdentityManager(); - pCopy->copyFrom(this); - return pCopy; -} - -void KviUserIdentityManager::releaseWorkingCopy(KviUserIdentityManager * pWorkingCopy) -{ - if(pWorkingCopy)delete pWorkingCopy; -} diff --git a/src/kvilib/irc/KviUserIdentity.h b/src/kvilib/irc/KviUserIdentity.h index 5301e5aca..e5562d92b 100644 --- a/src/kvilib/irc/KviUserIdentity.h +++ b/src/kvilib/irc/KviUserIdentity.h @@ -345,106 +345,4 @@ protected: bool load(KviConfigurationFile & cfg); }; -/** -* \class KviUserIdentityManager -* \brief The class to manage the user identity -*/ -class KVILIB_API KviUserIdentityManager : public KviHeapObject -{ -protected: - /** - * \brief Constructs the user identity manager object - * \return KviUserIdentityManager - */ - KviUserIdentityManager(); - - /** - * \brief Destroys the user identity manager object - */ - ~KviUserIdentityManager(); -protected: - static KviUserIdentityManager * m_pInstance; - KviPointerHashTable<QString,KviUserIdentity> * m_pIdentityDict; - QString m_szDefaultIdentity; -public: - /** - * \brief Initializes a new user identity - * \return void - */ - static void init(); - - /** - * \brief Deletese the user identity - * \return void - */ - static void done(); - - /** - * \brief Returns the instance of the identity - * \returns KviUserIdentityManager * - */ - static KviUserIdentityManager * instance(){ return m_pInstance; }; - - /** - * \brief Returns the identity dictionary - * \returns KviPointerHashTable<QString,KviUserIdentity> * - */ - KviPointerHashTable<QString,KviUserIdentity> * identityDict(){ return m_pIdentityDict; }; - - /** - * \brief Searches fot an identity - * \param szId The identity id to find - * \return const KviUserIdentity * - */ - const KviUserIdentity * findIdentity(const QString & szId){ return m_pIdentityDict->find(szId); }; - - /** - * \brief Returns the default identity - * It's NEVER null. - * \return const KviUserIdentity * - */ - const KviUserIdentity * defaultIdentity(); - - /** - * \brief Sets the default identity - * \param szIdentityId The identity id to set - * \return void - */ - void setDefaultIdentity(const QString & szIdentityId){ m_szDefaultIdentity = szIdentityId; }; - - /** - * \brief Creates a new working copy - * \return KviUserIdentityManager * - */ - KviUserIdentityManager * createWorkingCopy(); - - /** - * \brief Carbon copy - * \param pWorkingCopy The source working copy - * \return void - */ - void copyFrom(KviUserIdentityManager * pWorkingCopy); - - /** - * \brief Deletes the working copy - * \param pWorkingCopy The source working copy - * \return void - */ - void releaseWorkingCopy(KviUserIdentityManager * pWorkingCopy); - - /** - * \brief Saves the user identity database - * \param szFileName The filename where to save - * \return void - */ - void save(const QString & szFileName); - - /** - * \brief Loads the user identity database - * \param szFileName The filename where to load - * \return void - */ - void load(const QString & szFileName); -}; - -#endif //!_KVI_USERIDENTITY_H_ +#endif // _KVI_USERIDENTITY_H_ diff --git a/src/kvilib/irc/KviUserIdentityManager.cpp b/src/kvilib/irc/KviUserIdentityManager.cpp new file mode 100644 index 000000000..0568cb39b --- /dev/null +++ b/src/kvilib/irc/KviUserIdentityManager.cpp @@ -0,0 +1,166 @@ +//============================================================================= +// +// File : KviUserIdentityManager.h +// Creation date : Thu Dec Jan 2007 05:03:47 by Elvio Basello +// +// This file is part of the KVIrc IRC Client distribution +// Copyright (C) 2010 Elvio Basello (hellvis69 at gmail dot com) +// +// 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. +// +//============================================================================= + +#include "KviUserIdentityManager.h" +#include "KviUserIdentity.h" +#include "KviLocale.h" +#include "kvi_defaults.h" + +KviUserIdentityManager * KviUserIdentityManager::m_pInstance = 0; + +KviUserIdentityManager::KviUserIdentityManager() +: KviHeapObject() +{ + m_pIdentityDict = new KviPointerHashTable<QString,KviUserIdentity>(); + m_pIdentityDict->setAutoDelete(true); +} + +KviUserIdentityManager::~KviUserIdentityManager() +{ + delete m_pIdentityDict; +} + +void KviUserIdentityManager::init() +{ + if(m_pInstance) + return; + m_pInstance = new KviUserIdentityManager(); +} + +void KviUserIdentityManager::done() +{ + if(!m_pInstance) + return; + delete m_pInstance; + m_pInstance = 0; +} + +const KviUserIdentity * KviUserIdentityManager::defaultIdentity() +{ + KviUserIdentity * pUser; + if(!m_szDefaultIdentity.isEmpty()) + { + pUser = m_pIdentityDict->find(m_szDefaultIdentity); + if(pUser) + return pUser; + } + + // the default identity is borken :/ + // grab the first one + KviPointerHashTableIterator<QString,KviUserIdentity> it(*m_pIdentityDict); + pUser = it.current(); + if(pUser) + { + m_szDefaultIdentity = pUser->id(); + return pUser; + } + // no identities available: create the default + pUser = new KviUserIdentity(); + + pUser->setId(__tr2qs("Default")); + pUser->setNickName(KVI_DEFAULT_NICKNAME1); + + pUser->setAltNickName1(QString(KVI_DEFAULT_NICKNAME2).replace(KVI_DEFAULT_NICKNAME_TOKEN, KVI_DEFAULT_NICKNAME1)); + pUser->setAltNickName2(QString(KVI_DEFAULT_NICKNAME3).replace(KVI_DEFAULT_NICKNAME_TOKEN, KVI_DEFAULT_NICKNAME1)); + pUser->setAltNickName3(QString(KVI_DEFAULT_NICKNAME4).replace(KVI_DEFAULT_NICKNAME_TOKEN, KVI_DEFAULT_NICKNAME1)); + pUser->setUserName(KVI_DEFAULT_USERNAME); + pUser->setRealName(KVI_DEFAULT_REALNAME); + pUser->setPartMessage(KVI_DEFAULT_PART_MESSAGE); + pUser->setQuitMessage(KVI_DEFAULT_QUIT_MESSAGE); + + m_pIdentityDict->replace(pUser->id(),pUser); + + return pUser; +} + +void KviUserIdentityManager::load(const QString & szFileName) +{ + m_pIdentityDict->clear(); + + KviConfigurationFile cfg(szFileName,KviConfigurationFile::Read); + + cfg.setGroup("KVIrc"); + + m_szDefaultIdentity = cfg.readEntry("DefaultIdentity",""); + + KviConfigurationFileIterator it(*(cfg.dict())); + while( (it.current()) ) + { + if(!KviQString::equalCI(it.currentKey(),"KVIrc")) + { + cfg.setGroup(it.currentKey()); + + KviUserIdentity * pUser = new KviUserIdentity(); + if(pUser->load(cfg)) + m_pIdentityDict->replace(pUser->id(),pUser); + else + delete pUser; + } + ++it; + } +} + +void KviUserIdentityManager::save(const QString & szFileName) +{ + KviConfigurationFile cfg(szFileName,KviConfigurationFile::Write); + cfg.clear(); + + cfg.setGroup("KVIrc"); + + cfg.writeEntry("DefaultIdentity",m_szDefaultIdentity); + + KviPointerHashTableIterator<QString,KviUserIdentity> it(*m_pIdentityDict); + while(KviUserIdentity * pUser = it.current()) + { + pUser->save(cfg); + ++it; + } +} + +void KviUserIdentityManager::copyFrom(KviUserIdentityManager * pWorkingCopy) +{ + m_pIdentityDict->clear(); + m_szDefaultIdentity = pWorkingCopy->m_szDefaultIdentity; + KviPointerHashTableIterator<QString,KviUserIdentity> it(*(pWorkingCopy->m_pIdentityDict)); + while(KviUserIdentity * pUser = it.current()) + { + KviUserIdentity * pNew = new KviUserIdentity(); + pNew->copyFrom(*pUser); + m_pIdentityDict->replace(pNew->id(),pNew); + ++it; + } +} + +KviUserIdentityManager * KviUserIdentityManager::createWorkingCopy() +{ + KviUserIdentityManager * pCopy = new KviUserIdentityManager(); + pCopy->copyFrom(this); + return pCopy; +} + +void KviUserIdentityManager::releaseWorkingCopy(KviUserIdentityManager * pWorkingCopy) +{ + if(pWorkingCopy) + delete pWorkingCopy; +} diff --git a/src/kvilib/irc/KviUserIdentityManager.h b/src/kvilib/irc/KviUserIdentityManager.h new file mode 100644 index 000000000..4c55f48a3 --- /dev/null +++ b/src/kvilib/irc/KviUserIdentityManager.h @@ -0,0 +1,143 @@ +#ifndef _KVI_USERIDENTITY_MANAGER_H_ +#define _KVI_USERIDENTITY_MANAGER_H_ +//============================================================================= +// +// File : KviUserIdentityManager.h +// Creation date : Thu Dec Jan 2007 05:03:47 by Elvio Basello +// +// This file is part of the KVIrc IRC Client distribution +// Copyright (C) 2010 Elvio Basello (hellvis69 at gmail dot com) +// +// 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. +// +//============================================================================= + +/** +* \file KviUserIdentityManager.h +* \author Szymon Stefanek +* \brief User identity handling +* +* This file was originally part of KviUserIdentity.h +*/ + +#include "kvi_settings.h" +#include "KviHeapObject.h" +#include "KviPointerHashTable.h" + +class KviUserIdentity; + +/** +* \class KviUserIdentityManager +* \brief The class to manage the user identity +*/ +class KVILIB_API KviUserIdentityManager : public KviHeapObject +{ +protected: + /** + * \brief Constructs the user identity manager object + * \return KviUserIdentityManager + */ + KviUserIdentityManager(); + + /** + * \brief Destroys the user identity manager object + */ + ~KviUserIdentityManager(); +protected: + static KviUserIdentityManager * m_pInstance; + KviPointerHashTable<QString,KviUserIdentity> * m_pIdentityDict; + QString m_szDefaultIdentity; +public: + /** + * \brief Initializes a new user identity + * \return void + */ + static void init(); + + /** + * \brief Deletese the user identity + * \return void + */ + static void done(); + + /** + * \brief Returns the instance of the identity + * \returns KviUserIdentityManager * + */ + static KviUserIdentityManager * instance(){ return m_pInstance; }; + + /** + * \brief Returns the identity dictionary + * \returns KviPointerHashTable<QString,KviUserIdentity> * + */ + KviPointerHashTable<QString,KviUserIdentity> * identityDict(){ return m_pIdentityDict; }; + + /** + * \brief Searches fot an identity + * \param szId The identity id to find + * \return const KviUserIdentity * + */ + const KviUserIdentity * findIdentity(const QString & szId){ return m_pIdentityDict->find(szId); }; + + /** + * \brief Returns the default identity + * It's NEVER null. + * \return const KviUserIdentity * + */ + const KviUserIdentity * defaultIdentity(); + + /** + * \brief Sets the default identity + * \param szIdentityId The identity id to set + * \return void + */ + void setDefaultIdentity(const QString & szIdentityId){ m_szDefaultIdentity = szIdentityId; }; + + /** + * \brief Creates a new working copy + * \return KviUserIdentityManager * + */ + KviUserIdentityManager * createWorkingCopy(); + + /** + * \brief Carbon copy + * \param pWorkingCopy The source working copy + * \return void + */ + void copyFrom(KviUserIdentityManager * pWorkingCopy); + + /** + * \brief Deletes the working copy + * \param pWorkingCopy The source working copy + * \return void + */ + void releaseWorkingCopy(KviUserIdentityManager * pWorkingCopy); + + /** + * \brief Saves the user identity database + * \param szFileName The filename where to save + * \return void + */ + void save(const QString & szFileName); + + /** + * \brief Loads the user identity database + * \param szFileName The filename where to load + * \return void + */ + void load(const QString & szFileName); +}; + +#endif // _KVI_USERIDENTITY_MANAGER_H_
\ No newline at end of file |
