/* testbedaccount.cpp - Kopete Testbed Protocol Copyright (c) 2003 by Will Stephenson Kopete (c) 2002-2003 by the Kopete developers ************************************************************************* * * * 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 #include #include #include #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; } KActionMenu* TestbedAccount::actionMenu() { KActionMenu *mActionMenu = Kopete::Account::actionMenu(); mActionMenu->popupMenu()->insertSeparator(); KAction *action; action = new KAction (i18n ("Show my own video..."), "testbed_showvideo", 0, this, TQT_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, TQT_SIGNAL ( messageReceived( const TQString & ) ), this, TQT_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( 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 itr( contacts() ); for ( ; itr.current(); ++itr ) itr.current()->setOnlineStatus( myself()->onlineStatus() ); } #include "testbedaccount.moc"