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/testbedaccount.cpp

177 lines
5.2 KiB

/*
testbedaccount.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 "testbedaccount.h"
#include <tdeaction.h>
#include <kdebug.h>
#include <tdelocale.h>
#include <tdepopupmenu.h>
#include "kopetemetacontact.h"
#include "kopetecontactlist.h"
#include "testbedcontact.h"
#include "testbedfakeserver.h"
#include "testbedprotocol.h"
TestbedAccount::TestbedAccount( TestbedProtocol *parent, const TQString& accountID, const char *name )
: Kopete::Account ( parent, accountID , name )
{
// Init the myself contact
setMyself( new TestbedContact( this, accountId(), TestbedContact::Null, accountId(), Kopete::ContactList::self()->myself() ) );
myself()->setOnlineStatus( TestbedProtocol::protocol()->testbedOffline );
m_server = new TestbedFakeServer();;
}
TestbedAccount::~TestbedAccount()
{
delete m_server;
}
TDEActionMenu* TestbedAccount::actionMenu()
{
TDEActionMenu *mActionMenu = Kopete::Account::actionMenu();
mActionMenu->popupMenu()->insertSeparator();
TDEAction *action;
action = new TDEAction (i18n ("Show my own video..."), "testbed_showvideo", 0, this, TQ_SLOT (slotShowVideo ()), this, "actionShowVideo");
mActionMenu->insert(action);
action->setEnabled( isConnected() );
return mActionMenu;
}
bool TestbedAccount::createContact(const TQString& contactId, Kopete::MetaContact* parentContact)
{
TestbedContact* newContact = new TestbedContact( this, contactId, TestbedContact::Echo, parentContact->displayName(), parentContact );
return newContact != 0L;
}
void TestbedAccount::setAway( bool away, const TQString & /* reason */ )
{
if ( away )
slotGoAway();
else
slotGoOnline();
}
void TestbedAccount::setOnlineStatus(const Kopete::OnlineStatus& status, const TQString &reason )
{
if ( status.status() == Kopete::OnlineStatus::Online &&
myself()->onlineStatus().status() == Kopete::OnlineStatus::Offline )
slotGoOnline();
else if (status.status() == Kopete::OnlineStatus::Online &&
myself()->onlineStatus().status() == Kopete::OnlineStatus::Away )
setAway( false, reason );
else if ( status.status() == Kopete::OnlineStatus::Offline )
slotGoOffline();
else if ( status.status() == Kopete::OnlineStatus::Away )
slotGoAway( /* reason */ );
}
void TestbedAccount::connect( const Kopete::OnlineStatus& /* initialStatus */ )
{
kdDebug ( 14210 ) << k_funcinfo << endl;
myself()->setOnlineStatus( TestbedProtocol::protocol()->testbedOnline );
TQObject::connect ( m_server, TQ_SIGNAL ( messageReceived( const TQString & ) ),
this, TQ_SLOT ( receivedMessage( const TQString & ) ) );
}
void TestbedAccount::disconnect()
{
kdDebug ( 14210 ) << k_funcinfo << endl;
myself()->setOnlineStatus( TestbedProtocol::protocol()->testbedOffline );
TQObject::disconnect ( m_server, 0, 0, 0 );
}
TestbedFakeServer * TestbedAccount::server()
{
return m_server;
}
void TestbedAccount::slotGoOnline ()
{
kdDebug ( 14210 ) << k_funcinfo << endl;
if (!isConnected ())
connect ();
else
myself()->setOnlineStatus( TestbedProtocol::protocol()->testbedOnline );
updateContactStatus();
}
void TestbedAccount::slotGoAway ()
{
kdDebug ( 14210 ) << k_funcinfo << endl;
if (!isConnected ())
connect();
myself()->setOnlineStatus( TestbedProtocol::protocol()->testbedAway );
updateContactStatus();
}
void TestbedAccount::slotGoOffline ()
{
kdDebug ( 14210 ) << k_funcinfo << endl;
if (isConnected ())
disconnect ();
updateContactStatus();
}
void TestbedAccount::slotShowVideo ()
{
kdDebug ( 14210 ) << k_funcinfo << endl;
if (isConnected ())
TestbedWebcamDialog *testbedWebcamDialog = new TestbedWebcamDialog(0, 0, "Testbed video window");
updateContactStatus();
}
void TestbedAccount::receivedMessage( const TQString &message )
{
// Look up the contact the message is from
TQString from;
TestbedContact* messageSender;
from = message.section( ':', 0, 0 );
Kopete::Contact* contact = contacts()[from];
messageSender = dynamic_cast<TestbedContact *>( contact );
kdDebug( 14210 ) << k_funcinfo << " got a message from " << from << ", " << messageSender << ", is: " << message << endl;
// Pass it on to the contact to process and display via a KMM
if ( messageSender )
messageSender->receivedMessage( message );
else
kdWarning(14210) << k_funcinfo << "unable to look up contact for delivery" << endl;
}
void TestbedAccount::updateContactStatus()
{
TQDictIterator<Kopete::Contact> itr( contacts() );
for ( ; itr.current(); ++itr )
itr.current()->setOnlineStatus( myself()->onlineStatus() );
}
#include "testbedaccount.moc"