//============================================================================= // // File : KviUserIdentityManager.cpp // 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 option) 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 "KviConfigurationFile.h" #include "KviLocale.h" #include "KviUserIdentity.h" #include "kvi_defaults.h" KviUserIdentityManager * KviUserIdentityManager::m_pInstance = nullptr; KviUserIdentityManager::KviUserIdentityManager() : KviHeapObject() { m_pIdentityDict = new KviPointerHashTable(); 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 = nullptr; } 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 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 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 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; }