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.
tdenetwork/kopete/protocols/testbed/testbedcontact.cpp

139 lines
4.1 KiB

/*
testbedcontact.cpp - Kopete Testbed Protocol
Copyright (c) 2003 by Will Stephenson <will@stevello.free-online.co.uk>
Kopete (c) 2002-2003 by the Kopete developers <kopete-devel@kde.org>
*************************************************************************
* *
* This library 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. *
* *
*************************************************************************
*/
#include "testbedcontact.h"
#include <tdeaction.h>
#include <kdebug.h>
#include <tdelocale.h>
#include "kopeteaccount.h"
#include "kopetechatsessionmanager.h"
#include "kopetemetacontact.h"
#include "testbedaccount.h"
#include "testbedfakeserver.h"
#include "testbedprotocol.h"
TestbedContact::TestbedContact( Kopete::Account* _account, const TQString &uniqueName,
const TestbedContactType type, const TQString &displayName, Kopete::MetaContact *parent )
: Kopete::Contact( _account, uniqueName, parent )
{
kdDebug( 14210 ) << k_funcinfo << " uniqueName: " << uniqueName << ", displayName: " << displayName << endl;
m_type = type;
// FIXME: ? setDisplayName( displayName );
m_msgManager = 0L;
setOnlineStatus( TestbedProtocol::protocol()->testbedOffline );
}
TestbedContact::~TestbedContact()
{
}
bool TestbedContact::isReachable()
{
return true;
}
void TestbedContact::serialize( TQMap< TQString, TQString > &serializedData, TQMap< TQString, TQString > & /* addressBookData */ )
{
TQString value;
switch ( m_type )
{
case Null:
value = "null";
case Echo:
value = "echo";
}
serializedData[ "contactType" ] = value;
}
Kopete::ChatSession* TestbedContact::manager( CanCreateFlags )
{
kdDebug( 14210 ) << k_funcinfo << endl;
if ( m_msgManager )
{
return m_msgManager;
}
else
{
TQPtrList<Kopete::Contact> contacts;
contacts.append(this);
m_msgManager = Kopete::ChatSessionManager::self()->create(account()->myself(), contacts, protocol());
connect(m_msgManager, TQ_SIGNAL(messageSent(Kopete::Message&, Kopete::ChatSession*)),
this, TQ_SLOT( sendMessage( Kopete::Message& ) ) );
connect(m_msgManager, TQ_SIGNAL(destroyed()), this, TQ_SLOT(slotChatSessionDestroyed()));
return m_msgManager;
}
}
TQPtrList<TDEAction> *TestbedContact::customContextMenuActions() //OBSOLETE
{
//FIXME!!! this function is obsolete, we should use XMLGUI instead
/*m_actionCollection = new TDEActionCollection( this, "userColl" );
m_actionPrefs = new TDEAction(i18n( "&Contact Settings" ), 0, this,
TQ_SLOT( showContactSettings( )), m_actionCollection, "contactSettings" );
return m_actionCollection;*/
return 0L;
}
void TestbedContact::showContactSettings()
{
//TestbedContactSettings* p = new TestbedContactSettings( this );
//p->show();
}
void TestbedContact::sendMessage( Kopete::Message &message )
{
kdDebug( 14210 ) << k_funcinfo << endl;
// convert to the what the server wants
// For this 'protocol', there's nothing to do
// send it
static_cast<TestbedAccount *>( account() )->server()->sendMessage(
message.to().first()->contactId(),
message.plainBody() );
// give it back to the manager to display
manager()->appendMessage( message );
// tell the manager it was sent successfully
manager()->messageSucceeded();
}
void TestbedContact::receivedMessage( const TQString &message )
{
// Create a Kopete::Message
Kopete::Message *newMessage;
Kopete::ContactPtrList contactList;
account();
contactList.append( account()->myself() );
newMessage = new Kopete::Message( this, contactList, message, Kopete::Message::Inbound );
// Add it to the manager
manager()->appendMessage (*newMessage);
delete newMessage;
}
void TestbedContact::slotChatSessionDestroyed()
{
//FIXME: the chat window was closed? Take appropriate steps.
m_msgManager = 0L;
}
#include "testbedcontact.moc"