aboutsummaryrefslogtreecommitdiffstats
path: root/src/kvilib
diff options
context:
space:
mode:
authorGravatar Elvio Basello2010-12-30 05:48:54 +0000
committerGravatar Elvio Basello2010-12-30 05:48:54 +0000
commitd682a3c0d52ee75250d3c2f07ed0ade7826b124e (patch)
tree2bbdef341e50123f00369fac9d02f3d0aeac479f /src/kvilib
parentSome fixes for the http request (diff)
downloadKVIrc-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.txt1
-rw-r--r--src/kvilib/irc/KviIrcUserDataBase.cpp6
-rw-r--r--src/kvilib/irc/KviMircCntrl.cpp56
-rw-r--r--src/kvilib/irc/KviMircCntrl.h97
-rw-r--r--src/kvilib/irc/KviUserIdentity.cpp141
-rw-r--r--src/kvilib/irc/KviUserIdentity.h104
-rw-r--r--src/kvilib/irc/KviUserIdentityManager.cpp166
-rw-r--r--src/kvilib/irc/KviUserIdentityManager.h143
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