// -*- Mode: c++-mode; c-basic-offset: 2; indent-tabs-mode: t; tab-width: 2; -*- // // Copyright (C) 2003 Grzegorz Jaskiewicz // Copyright (C) 2002-2003 Zack Rusin // // gaduprotocol.cpp // // 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 #include #include #include #include "gaduaccount.h" #include "gaducontact.h" #include "gaduprotocol.h" #include "gadueditaccount.h" #include "gaduaddcontactpage.h" #include "kopeteaccountmanager.h" #include "kopeteaccount.h" #include "kopetemetacontact.h" #include "kopeteglobal.h" #include "kopeteonlinestatusmanager.h" typedef KGenericFactory GaduProtocolFactory; K_EXPORT_COMPONENT_FACTORY( kopete_gadu, KGenericFactory( "kopete_gadu" ) ) GaduProtocol* GaduProtocol::protocolStatic_ = 0L; GaduProtocol::GaduProtocol( TQObject* parent, const char* name, const TQStringList& ) :Kopete::Protocol( GaduProtocolFactory::instance(), parent, name ), propFirstName(Kopete::Global::Properties::self()->firstName()), propLastName(Kopete::Global::Properties::self()->lastName()), propEmail(Kopete::Global::Properties::self()->emailAddress()), propAwayMessage(Kopete::Global::Properties::self()->awayMessage()), propPhoneNr(Kopete::Global::Properties::self()->privatePhone()), defaultAccount_( 0 ), gaduStatusBlocked_( Kopete::OnlineStatus::Away, GG_STATUS_BLOCKED, this, GG_STATUS_BLOCKED, "gg_ignored", i18n( "Blocked" ) ), gaduStatusOffline_( Kopete::OnlineStatus::Offline, GG_STATUS_NOT_AVAIL, this, GG_STATUS_NOT_AVAIL, "gg_offline", i18n( "Offline" ) , i18n( "O&ffline" ) , Kopete::OnlineStatusManager::Offline ), gaduStatusOfflineDescr_( Kopete::OnlineStatus::Offline, GG_STATUS_NOT_AVAIL_DESCR, this, GG_STATUS_NOT_AVAIL_DESCR, TQStringList::split( '|', "contact_away_overlay|gg_description_overlay" ), i18n( "Offline" ), i18n( "A&way" ) , Kopete::OnlineStatusManager::Offline ), gaduStatusBusy_(Kopete::OnlineStatus::Away, GG_STATUS_BUSY, this, GG_STATUS_BUSY, "contact_away_overlay", i18n( "Busy" ) , i18n( "B&usy" ) , Kopete::OnlineStatusManager::Busy ), gaduStatusBusyDescr_(Kopete::OnlineStatus::Away, GG_STATUS_BUSY_DESCR, this, GG_STATUS_BUSY_DESCR, TQStringList::split( '|', "contact_away_overlay|gg_description_overlay" ), i18n( "Busy" ) , i18n( "B&usy" ) , Kopete::OnlineStatusManager::Idle ), gaduStatusInvisible_( Kopete::OnlineStatus::Invisible, GG_STATUS_INVISIBLE, this, GG_STATUS_INVISIBLE, "contact_invisible_overlay", i18n( "Invisible" ) , i18n( "I&nvisible" ) , Kopete::OnlineStatusManager::Invisible), gaduStatusInvisibleDescr_(Kopete::OnlineStatus::Invisible, GG_STATUS_INVISIBLE_DESCR, this, GG_STATUS_INVISIBLE_DESCR, TQStringList::split( '|', "contact_invisible_overlay|gg_description_overlay" ), i18n( "Invisible" ) , i18n( "I&nvisible" )), gaduStatusAvail_(Kopete::OnlineStatus::Online, GG_STATUS_AVAIL, this, GG_STATUS_AVAIL, TQString(), i18n( "Online" ) , i18n( "&Online" ) , Kopete::OnlineStatusManager::Online ), gaduStatusAvailDescr_(Kopete::OnlineStatus::Online, GG_STATUS_AVAIL_DESCR, this, GG_STATUS_AVAIL_DESCR, "gg_description_overlay", i18n( "Online" ) , i18n( "&Online" )), gaduConnecting_(Kopete::OnlineStatus::Offline, GG_STATUS_CONNECTING, this, GG_STATUS_CONNECTING, "gg_con", i18n( "Connecting" ) ) { if ( protocolStatic_ ) { kdDebug(14100)<<"####"<<"GaduProtocol already initialized"<( account ), parent ); } void GaduProtocol::settingsChanged() { } Kopete::Contact * GaduProtocol::deserializeContact( Kopete::MetaContact* metaContact, const TQMap& serializedData, const TQMap& /* addressBookData */ ) { const TQString aid = serializedData[ "accountId" ]; const TQString cid = serializedData[ "contactId" ]; const TQString dn = serializedData[ "displayName" ]; TQDict daccounts = Kopete::AccountManager::self()->accounts( this ); Kopete::Account* account = daccounts[ aid ]; if (!account) { account = createNewAccount(aid); } GaduAccount* gaccount = static_cast( account ); GaduContact* contact = new GaduContact( cid.toUInt(), dn, account, metaContact ); contact->setParentIdentity( aid ); gaccount->addNotify( cid.toUInt() ); contact->setProperty( propEmail, serializedData["email"] ); contact->setProperty( propFirstName, serializedData["FirstName"] ); contact->setProperty( propLastName, serializedData["SecondName"] ); contact->setProperty( propPhoneNr, serializedData["telephone"] ); contact->setIgnored(serializedData["ignored"] == "true"); return contact; } uint GaduProtocol::statusToWithDescription( Kopete::OnlineStatus status ) { if ( status == gaduStatusOffline_ || status == gaduStatusOfflineDescr_ ) { return GG_STATUS_NOT_AVAIL_DESCR; } if ( status == gaduStatusBusyDescr_ || status == gaduStatusBusy_ ){ return GG_STATUS_BUSY_DESCR; } if ( status == gaduStatusInvisibleDescr_ || status == gaduStatusInvisible_ ){ return GG_STATUS_INVISIBLE_DESCR; } return GG_STATUS_AVAIL_DESCR; } uint GaduProtocol::statusToWithoutDescription( Kopete::OnlineStatus status ) { if ( status == gaduStatusOffline_ || status == gaduStatusOfflineDescr_ ) { return GG_STATUS_NOT_AVAIL; } if ( status == gaduStatusBusyDescr_ || status == gaduStatusBusy_ ){ return GG_STATUS_BUSY; } if ( status == gaduStatusInvisibleDescr_ || status == gaduStatusInvisible_ ){ return GG_STATUS_INVISIBLE; } return GG_STATUS_AVAIL; } bool GaduProtocol::statusWithDescription( uint status ) { switch( status ) { case GG_STATUS_NOT_AVAIL: case GG_STATUS_BUSY: case GG_STATUS_INVISIBLE: case GG_STATUS_AVAIL: case GG_STATUS_CONNECTING: case GG_STATUS_BLOCKED: return false; case GG_STATUS_INVISIBLE_DESCR: case GG_STATUS_NOT_AVAIL_DESCR: case GG_STATUS_BUSY_DESCR: case GG_STATUS_AVAIL_DESCR: return true; } return false; } Kopete::OnlineStatus GaduProtocol::convertStatus( uint status ) const { switch( status ) { case GG_STATUS_NOT_AVAIL: return gaduStatusOffline_; case GG_STATUS_NOT_AVAIL_DESCR: return gaduStatusOfflineDescr_; case GG_STATUS_BUSY: return gaduStatusBusy_; case GG_STATUS_BUSY_DESCR: return gaduStatusBusyDescr_; case GG_STATUS_INVISIBLE: return gaduStatusInvisible_; case GG_STATUS_INVISIBLE_DESCR: return gaduStatusInvisibleDescr_; case GG_STATUS_AVAIL: return gaduStatusAvail_; case GG_STATUS_AVAIL_DESCR: return gaduStatusAvailDescr_; case GG_STATUS_CONNECTING: return gaduConnecting_; case GG_STATUS_BLOCKED: return gaduStatusBlocked_; default: return gaduStatusOffline_; } } Kopete::Account* GaduProtocol::createNewAccount( const TQString& accountId ) { defaultAccount_ = new GaduAccount( this, accountId ); return defaultAccount_ ; } KopeteEditAccountWidget* GaduProtocol::createEditAccountWidget( Kopete::Account* account, TQWidget* parent ) { return( new GaduEditAccount( this, account, parent ) ); } #include "gaduprotocol.moc"