summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/msn/msnchatsession.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/msn/msnchatsession.cpp')
-rw-r--r--kopete/protocols/msn/msnchatsession.cpp775
1 files changed, 0 insertions, 775 deletions
diff --git a/kopete/protocols/msn/msnchatsession.cpp b/kopete/protocols/msn/msnchatsession.cpp
deleted file mode 100644
index fabd62ab..00000000
--- a/kopete/protocols/msn/msnchatsession.cpp
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- msnchatsession.cpp - MSN Message Manager
-
- Copyright (c) 2002-2005 by Olivier Goffart <ogoffart at kde.org>
-
- Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
-
- *************************************************************************
- * *
- * 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. *
- * *
- *************************************************************************
-*/
-
-#include "msnchatsession.h"
-
-#include <tqlabel.h>
-#include <tqimage.h>
-#include <tqtooltip.h>
-#include <tqfile.h>
-#include <tqiconset.h>
-
-
-#include <tdeconfig.h>
-#include <kdebug.h>
-#include <kinputdialog.h>
-#include <tdelocale.h>
-#include <tdemessagebox.h>
-#include <tdepopupmenu.h>
-#include <tdetempfile.h>
-#include <tdemainwindow.h>
-#include <tdetoolbar.h>
-#include <krun.h>
-
-#include "kopetecontactaction.h"
-#include "kopetemetacontact.h"
-#include "kopetecontactlist.h"
-#include "kopetechatsessionmanager.h"
-#include "kopeteuiglobal.h"
-#include "kopeteglobal.h"
-#include "kopeteview.h"
-
-#include "msncontact.h"
-#include "msnfiletransfersocket.h"
-#include "msnaccount.h"
-#include "msnswitchboardsocket.h"
-
-#include "config.h"
-
-#if !defined NDEBUG
-#include "msndebugrawcmddlg.h"
-#endif
-
-MSNChatSession::MSNChatSession( Kopete::Protocol *protocol, const Kopete::Contact *user,
- Kopete::ContactPtrList others, const char *name )
-: Kopete::ChatSession( user, others, protocol, name )
-{
- Kopete::ChatSessionManager::self()->registerChatSession( this );
- m_chatService = 0l;
- m_timeoutTimer =0L;
- m_newSession = true;
- m_connectionTry=0;
-
- setInstance(protocol->instance());
-
- connect( this, TQT_SIGNAL( messageSent( Kopete::Message&,
- Kopete::ChatSession* ) ),
- this, TQT_SLOT( slotMessageSent( Kopete::Message&,
- Kopete::ChatSession* ) ) );
-
- connect( this, TQT_SIGNAL( invitation(MSNInvitation*& , const TQString & , long unsigned int , MSNChatSession* , MSNContact* ) ) ,
- protocol, TQT_SIGNAL( invitation(MSNInvitation*& , const TQString & , long unsigned int , MSNChatSession* , MSNContact* ) ) );
-
-
- m_actionInvite = new TDEActionMenu( i18n( "&Invite" ), "kontact_contacts", actionCollection(), "msnInvite" );
- connect ( m_actionInvite->popupMenu() , TQT_SIGNAL( aboutToShow() ) , this , TQT_SLOT(slotActionInviteAboutToShow() ) ) ;
-
- #if !defined NDEBUG
- new TDEAction( i18n( "Send Raw C&ommand..." ), 0, this, TQT_SLOT( slotDebugRawCommand() ), actionCollection(), "msnDebugRawCommand" ) ;
- #endif
-
-
- m_actionNudge=new TDEAction( i18n( "Send Nudge" ), "bell", 0, this, TQT_SLOT(slotSendNudge() ), actionCollection(), "msnSendNudge" ) ;
-#if MSN_WEBCAM
- // Invite to receive webcam action
- m_actionWebcamReceive=new TDEAction( i18n( "View Contact's Webcam" ), "webcamreceive", 0, this, TQT_SLOT(slotWebcamReceive()), actionCollection(), "msnWebcamReceive" ) ;
-
- //Send webcam action
- m_actionWebcamSend=new TDEAction( i18n( "Send Webcam" ), "webcamsend", 0, this, TQT_SLOT(slotWebcamSend()), actionCollection(), "msnWebcamSend" ) ;
-#endif
-
- new TDEAction( i18n( "Send File" ),"attach", 0, this, TQT_SLOT( slotSendFile() ), actionCollection(), "msnSendFile" );
-
- MSNContact *c = static_cast<MSNContact*>( others.first() );
- (new TDEAction( i18n( "Request Display Picture" ), "image", 0, this, TQT_SLOT( slotRequestPicture() ), actionCollection(), "msnRequestDisplayPicture" ))->setEnabled(!c->object().isEmpty());
-
- if ( !c->object().isEmpty() )
- {
-
- connect( c, TQT_SIGNAL( displayPictureChanged() ), this, TQT_SLOT( slotDisplayPictureChanged() ) );
- m_image = new TQLabel( 0L, "kde toolbar widget" );
- new KWidgetAction( m_image, i18n( "MSN Display Picture" ), 0, this, TQT_SLOT( slotRequestPicture() ), actionCollection(), "msnDisplayPicture" );
- if(c->hasProperty(Kopete::Global::Properties::self()->photo().key()) )
- {
- //if the view doesn't exist yet, we will be unable to get the size of the toolbar
- // so when the view will exist, we will show the displaypicture.
- //How to know when a our view is created? We can't.
- // but chances are the next created view will be for this KMM
- // And if it is not? never mind. the icon will just be sized 22x22
- connect( Kopete::ChatSessionManager::self() , TQT_SIGNAL(viewActivated(KopeteView* )) , this, TQT_SLOT(slotDisplayPictureChanged()) );
- //it's viewActivated and not viewCreated because the view get his mainwindow only when it is shown.
- }
- }
- else
- {
- m_image = 0L;
- }
-
- setXMLFile("msnchatui.rc");
-
- setMayInvite( true );
-}
-
-MSNChatSession::~MSNChatSession()
-{
- delete m_image;
- //force to disconnect the switchboard
- //not needed since the m_chatService has us as parent
- // if(m_chatService)
- // delete m_chatService;
-
- TQMap<unsigned long int, MSNInvitation*>::Iterator it;
- for( it = m_invitations.begin(); it != m_invitations.end() ; it = m_invitations.begin())
- {
- delete *it;
- m_invitations.remove( it );
- }
-}
-
-void MSNChatSession::createChat( const TQString &handle,
- const TQString &address, const TQString &auth, const TQString &ID )
-{
- /* disabled because i don't want to reopen a chatwindow if we just closed it
- * and the contact take much time to type his message
- m_newSession= !(ID.isEmpty());
- */
-
- if( m_chatService )
- {
- kdDebug(14140) << k_funcinfo << "Service already exists, disconnect them." << endl;
- delete m_chatService;
- }
-
-// uncomment this line if you don't want to the peer know when you close the window
-// setCanBeDeleted( false );
-
- m_chatService = new MSNSwitchBoardSocket( static_cast<MSNAccount*>( myself()->account() ) , this);
- m_chatService->setUseHttpMethod( static_cast<MSNAccount*>( myself()->account() )->useHttpMethod() );
- m_chatService->setHandle( myself()->account()->accountId() );
- m_chatService->setMsgHandle( handle );
- m_chatService->connectToSwitchBoard( ID, address, auth );
-
- connect( m_chatService, TQT_SIGNAL( userJoined(const TQString&,const TQString&,bool)),
- this, TQT_SLOT( slotUserJoined(const TQString&,const TQString&,bool) ) );
- connect( m_chatService, TQT_SIGNAL( userLeft(const TQString&,const TQString&)),
- this, TQT_SLOT( slotUserLeft(const TQString&,const TQString&) ) );
- connect( m_chatService, TQT_SIGNAL( msgReceived( Kopete::Message & ) ),
- this, TQT_SLOT( slotMessageReceived( Kopete::Message & ) ) );
- connect( m_chatService, TQT_SIGNAL( switchBoardClosed() ),
- this, TQT_SLOT( slotSwitchBoardClosed() ) );
- connect( m_chatService, TQT_SIGNAL( receivedTypingMsg( const TQString &, bool ) ),
- this, TQT_SLOT( receivedTypingMsg( const TQString &, bool ) ) );
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "MSN" );
- if(config->readBoolEntry( "SendTypingNotification" , true) )
- {
- connect( this, TQT_SIGNAL( myselfTyping( bool ) ),
- m_chatService, TQT_SLOT( sendTypingMsg( bool ) ) );
- }
- connect( m_chatService, TQT_SIGNAL( msgAcknowledgement(unsigned int, bool) ),
- this, TQT_SLOT( slotAcknowledgement(unsigned int, bool) ) );
- connect( m_chatService, TQT_SIGNAL( invitation( const TQString&, const TQString& ) ),
- this, TQT_SLOT( slotInvitation( const TQString&, const TQString& ) ) );
- connect( m_chatService, TQT_SIGNAL( nudgeReceived(const TQString&) ),
- this, TQT_SLOT( slotNudgeReceived(const TQString&) ) );
- connect( m_chatService, TQT_SIGNAL( errorMessage(int, const TQString& ) ), static_cast<MSNAccount *>(myself()->account()), TQT_SLOT( slotErrorMessageReceived(int, const TQString& ) ) );
-
- if(!m_timeoutTimer)
- {
- m_timeoutTimer=new TQTimer(this);
- connect( m_timeoutTimer , TQT_SIGNAL(timeout()), this , TQT_SLOT(slotConnectionTimeout() ) );
- }
- m_timeoutTimer->start(20000,true);
-}
-
-void MSNChatSession::slotUserJoined( const TQString &handle, const TQString &publicName, bool IRO )
-{
- delete m_timeoutTimer;
- m_timeoutTimer=0L;
-
- if( !account()->contacts()[ handle ] )
- account()->addContact( handle, TQString(), 0L, Kopete::Account::Temporary);
-
- MSNContact *c = static_cast<MSNContact*>( account()->contacts()[ handle ] );
-
- c->setProperty( Kopete::Global::Properties::self()->nickName() , publicName);
-
- if(c->clientFlags() & MSNProtocol::MSNC4 )
- {
- m_actionNudge->setEnabled(true);
- }
-#if MSN_WEBCAM
- if(c->clientFlags() & MSNProtocol::SupportWebcam )
- {
- m_actionWebcamReceive->setEnabled(true);
- }
-#endif
-
- addContact(c , IRO); // don't show notificaions when we join wesalef
- if(!m_messagesQueue.empty() || !m_invitations.isEmpty())
- sendMessageQueue();
-
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "MSN" );
- if ( members().count()==1 && config->readNumEntry( "DownloadPicture", 1 ) >= 1 && !c->object().isEmpty() && !c->hasProperty(Kopete::Global::Properties::self()->photo().key()))
- slotRequestPicture();
-}
-
-void MSNChatSession::slotUserLeft( const TQString &handle, const TQString& reason )
-{
- MSNContact *c = static_cast<MSNContact*>( myself()->account()->contacts()[ handle ] );
- if(c)
- removeContact(c, reason );
-}
-
-
-
-void MSNChatSession::slotSwitchBoardClosed()
-{
- //kdDebug(14140) << "MSNChatSession::slotSwitchBoardClosed" << endl;
- m_chatService->deleteLater();
- m_chatService=0l;
-
- cleanMessageQueue( i18n("Connection closed") );
-
- if(m_invitations.isEmpty())
- setCanBeDeleted( true );
-}
-
-void MSNChatSession::slotMessageSent(Kopete::Message &message,Kopete::ChatSession *)
-{
- m_newSession=false;
- if(m_chatService)
- {
- int id = m_chatService->sendMsg(message);
- if(id == -1)
- {
- m_messagesQueue.append(message);
- kdDebug(14140) << k_funcinfo << "Message added to the queue" <<endl;
- }
- else if( id== -2 ) //the message has not been sent
- {
- //FIXME: tell the what window the message has been processed. but we havent't sent it
- messageSucceeded(); //that should stop the blonking icon.
- }
- else if( id == -3) //the message has been sent as an immge
- {
- appendMessage(message);
- messageSucceeded();
- }
- else
- {
- m_messagesSent.insert( id, message );
- message.setBg(TQColor()); // clear the bgColor
- message.setBody(message.plainBody() , Kopete::Message::PlainText ); //clear every custom tag which are not sent
- appendMessage(message); // send the own msg to chat window
- }
- }
- else // There's no switchboard available, so we must create a new one!
- {
- startChatSession();
- m_messagesQueue.append(message);
-// sendMessageQueue();
- //m_msgQueued=new Kopete::Message(message);
- }
-}
-
-void MSNChatSession::slotMessageReceived( Kopete::Message &msg )
-{
- m_newSession=false;
- if( msg.plainBody().startsWith( "AutoMessage: " ) )
- {
- //FIXME: HardCodded color are not so good
- msg.setFg( TQColor( "SlateGray3" ) );
- TQFont f;
- f.setItalic( true );
- msg.setFont( f );
- }
- appendMessage( msg );
-}
-
-void MSNChatSession::slotActionInviteAboutToShow()
-{
- // We can't simply insert TDEAction in this menu bebause we don't know when to delete them.
- // items inserted with insert items are automatically deleted when we call clear
-
- m_inviteactions.setAutoDelete(true);
- m_inviteactions.clear();
-
- m_actionInvite->popupMenu()->clear();
-
-
- TQDictIterator<Kopete::Contact> it( account()->contacts() );
- for( ; it.current(); ++it )
- {
- if( !members().contains( it.current() ) && it.current()->isOnline() && it.current() != myself() )
- {
- TDEAction *a=new KopeteContactAction( it.current(), this,
- TQT_SLOT( slotInviteContact( Kopete::Contact * ) ), m_actionInvite );
- m_actionInvite->insert( a );
- m_inviteactions.append( a ) ;
- }
- }
- TDEAction *b=new TDEAction( i18n ("Other..."), 0, this, TQT_SLOT( slotInviteOtherContact() ), m_actionInvite, "actionOther" );
- m_actionInvite->insert( b );
- m_inviteactions.append( b ) ;
-}
-
-void MSNChatSession::slotCloseSession()
-{
- kdDebug(14140) << k_funcinfo << m_chatService <<endl;
- if(m_chatService)
- m_chatService->slotCloseSession();
-}
-
-void MSNChatSession::slotInviteContact( Kopete::Contact *contact )
-{
- if(contact)
- inviteContact( contact->contactId() );
-}
-
-void MSNChatSession::inviteContact(const TQString &contactId)
-{
- if( m_chatService )
- m_chatService->slotInviteContact( contactId );
- else
- startChatSession();
-}
-
-void MSNChatSession::slotInviteOtherContact()
-{
- bool ok;
- TQString handle = KInputDialog::getText(i18n( "MSN Plugin" ),
- i18n( "Please enter the email address of the person you want to invite:" ),
- TQString(), &ok );
- if( !ok )
- return;
-
- if( handle.contains('@') != 1 || handle.contains('.') <1)
- {
- KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry,
- i18n("<qt>You must enter a valid email address.</qt>"), i18n("MSN Plugin"));
- return;
- }
-
- inviteContact(handle);
-}
-
-
-void MSNChatSession::sendMessageQueue()
-{
- if(!m_chatService)
- {
- kdDebug(14140) <<k_funcinfo << "Service doesn't exist" <<endl;
- return;
- }
-// kdDebug(14140) << "MSNChatSession::sendMessageQueue: " << m_messagesQueue.count() <<endl;
- for ( TQValueList<Kopete::Message>::iterator it = m_messagesQueue.begin(); it!=m_messagesQueue.end(); it = m_messagesQueue.begin() )
- {
- //m_chatService->sendMsg( *it) ;
- slotMessageSent(*it , this);
- m_messagesQueue.remove(it);
- }
-
-
- TQMap<unsigned long int, MSNInvitation*>::Iterator it;
- for( it = m_invitations.begin(); it != m_invitations.end() ; ++it)
- {
- if(! (*it)->incoming() && (*it)->state()<MSNInvitation::Invited)
- {
- m_chatService->sendCommand( "MSG" , "N", true, (*it)->invitationHead().utf8() );
- (*it)->setState(MSNInvitation::Invited);
- }
- }
-}
-
-void MSNChatSession::slotAcknowledgement(unsigned int id, bool ack)
-{
- if ( !m_messagesSent.contains( id ) )
- {
- // This is maybe a ACK/NAK for a non-messaging message
- return;
- }
-
- if ( !ack )
- {
- Kopete::Message m = m_messagesSent[ id ];
- TQString body = i18n( "The following message has not been sent correctly:\n%1" ).arg( m.plainBody() );
- Kopete::Message msg = Kopete::Message( m.to().first(), members(), body, Kopete::Message::Internal, Kopete::Message::PlainText );
- appendMessage( msg );
- //stop the stupid animation
- messageSucceeded();
- }
- else
- {
- messageSucceeded();
- }
-
- m_messagesSent.remove( id );
-}
-
-void MSNChatSession::slotInvitation(const TQString &handle, const TQString &msg)
-{
- //FIXME! a contact from another account can send a file
- MSNContact *c = static_cast<MSNContact*>( myself()->account()->contacts()[ handle ] );
- if(!c)
- return;
-
- TQRegExp rx("Invitation-Cookie: ([0-9]*)");
- rx.search(msg);
- long unsigned int cookie=rx.cap(1).toUInt();
-
- if(m_invitations.contains(cookie))
- {
- MSNInvitation *msnI=m_invitations[cookie];
- msnI->parseInvitation(msg);
- }
- else if( msg.contains("Invitation-Command: INVITE") )
- {
- if( msg.contains(MSNFileTransferSocket::applicationID()) )
- {
- MSNFileTransferSocket *MFTS=new MSNFileTransferSocket(myself()->account()->accountId(),c,true,this);
- connect(MFTS, TQT_SIGNAL( done(MSNInvitation*) ) , this , TQT_SLOT( invitationDone(MSNInvitation*) ));
- m_invitations.insert( cookie , MFTS);
- MFTS->parseInvitation(msg);
- setCanBeDeleted(false);
- }
- else
- {
- MSNInvitation *i=0l;
- emit invitation( i , msg, cookie, this, c );
- if(i)
- {
- m_invitations.insert( cookie , i );
- //don't delete this if all invitation are not done
- setCanBeDeleted(false);
- }
- else
- {
- rx=TQRegExp("Application-Name: ([^\\r\\n]*)");
- rx.search(msg);
- TQString inviteName = rx.cap( 1 );
-
- TQString body = i18n(
- "%1 has sent an unimplemented invitation, the invitation was rejected.\n"
- "The invitation was: %2" )
- .arg( c->property( Kopete::Global::Properties::self()->nickName()).value().toString(), inviteName );
- Kopete::Message tmpMsg = Kopete::Message( c , members() , body , Kopete::Message::Internal, Kopete::Message::PlainText);
- appendMessage(tmpMsg);
-
- m_chatService->sendCommand( "MSG" , "N", true, MSNInvitation::unimplemented(cookie) );
- }
- }
- }
-}
-
-void MSNChatSession::invitationDone(MSNInvitation* MFTS)
-{
- kdDebug(14140) << k_funcinfo <<endl;
- m_invitations.remove(MFTS->cookie());
-// MFTS->deleteLater();
- delete MFTS;
- if(!m_chatService && m_invitations.isEmpty())
- setCanBeDeleted(true);
-}
-
-void MSNChatSession::sendFile(const TQString &fileLocation, const TQString &/*fileName*/,
- long unsigned int fileSize)
-{
- // TODO create a switchboard to send the file is one is not available.
- if(m_chatService && members().getFirst())
- {
- m_chatService->PeerDispatcher()->sendFile(fileLocation, (TQ_INT64)fileSize, members().getFirst()->contactId());
- }
-}
-
-void MSNChatSession::initInvitation(MSNInvitation* invitation)
-{
- connect(invitation->object(), TQT_SIGNAL( done(MSNInvitation*) ) , this , TQT_SLOT( invitationDone(MSNInvitation*) ));
- m_invitations.insert( invitation->cookie() , invitation);
-
- if(m_chatService)
- {
- m_chatService->sendCommand( "MSG" , "N", true, invitation->invitationHead().utf8() );
- invitation->setState(MSNInvitation::Invited);
- }
- else
- {
- startChatSession();
- }
-}
-
-void MSNChatSession::slotRequestPicture()
-{
- TQPtrList<Kopete::Contact> mb=members();
- MSNContact *c = static_cast<MSNContact*>( mb.first() );
- if(!c)
- return;
-
- if( !c->hasProperty(Kopete::Global::Properties::self()->photo().key()))
- {
- if(m_chatService)
- {
- if( !c->object().isEmpty() )
- m_chatService->requestDisplayPicture();
- }
- else if(myself()->onlineStatus().isDefinitelyOnline() && myself()->onlineStatus().status() != Kopete::OnlineStatus::Invisible )
- startChatSession();
- }
- else
- { //we already have the picture, just show it.
- KRun::runURL( KURL::fromPathOrURL( c->property(Kopete::Global::Properties::self()->photo()).value().toString() ), "image/png" );
- }
-
-}
-
-void MSNChatSession::slotDisplayPictureChanged()
-{
- TQPtrList<Kopete::Contact> mb=members();
- MSNContact *c = static_cast<MSNContact *>( mb.first() );
- if ( c && m_image )
- {
- if(c->hasProperty(Kopete::Global::Properties::self()->photo().key()))
- {
- int sz=22;
- // get the size of the toolbar were the aciton is plugged.
- // if you know a better way to get the toolbar, let me know
- TDEMainWindow *w= view(false) ? dynamic_cast<TDEMainWindow*>( view(false)->mainWidget()->topLevelWidget() ) : 0L;
- if(w)
- {
- //We connected that in the constructor. we don't need to keep this slot active.
- disconnect( Kopete::ChatSessionManager::self() , TQT_SIGNAL(viewActivated(KopeteView* )) , this, TQT_SLOT(slotDisplayPictureChanged()) );
-
- TQPtrListIterator<TDEToolBar> it=w->toolBarIterator() ;
- TDEAction *imgAction=actionCollection()->action("msnDisplayPicture");
- if(imgAction) while(it)
- {
- TDEToolBar *tb=*it;
- if(imgAction->isPlugged(tb))
- {
- sz=tb->iconSize();
- //ipdate if the size of the toolbar change.
- disconnect(tb, TQT_SIGNAL(modechange()), this, TQT_SLOT(slotDisplayPictureChanged()));
- connect(tb, TQT_SIGNAL(modechange()), this, TQT_SLOT(slotDisplayPictureChanged()));
- break;
- }
- ++it;
- }
- }
- TQString imgURL=c->property(Kopete::Global::Properties::self()->photo()).value().toString();
- TQImage scaledImg = TQPixmap( imgURL ).convertToImage().smoothScale( sz, sz );
- if(!scaledImg.isNull())
- m_image->setPixmap( scaledImg );
- else
- { //the image has maybe not been transfered correctly.. force to download again
- c->removeProperty(Kopete::Global::Properties::self()->photo());
- //slotDisplayPictureChanged(); //don't do that or we might end in a infinite loop
- }
- TQToolTip::add( m_image, "<qt><img src=\"" + imgURL + "\"></qt>" );
-
- }
- else
- {
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "MSN" );
- if ( config->readNumEntry( "DownloadPicture", 1 ) >= 1 && !c->object().isEmpty() )
- slotRequestPicture();
- }
- }
-}
-
-void MSNChatSession::slotDebugRawCommand()
-{
-#if !defined NDEBUG
- if ( !m_chatService )
- return;
-
- MSNDebugRawCmdDlg *dlg = new MSNDebugRawCmdDlg( 0L );
- int result = dlg->exec();
- if( result == TQDialog::Accepted && m_chatService )
- {
- m_chatService->sendCommand( dlg->command(), dlg->params(),
- dlg->addId(), dlg->msg().replace("\n","\r\n").utf8() );
- }
- delete dlg;
-#endif
-}
-
-
-void MSNChatSession::receivedTypingMsg( const TQString &contactId, bool b )
-{
- MSNContact *c = dynamic_cast<MSNContact *>( account()->contacts()[ contactId ] );
- if(c && m_newSession && !view(false))
- {
- //this was originaly in MSNAccount::slotCreateChat
- TDEGlobal::config()->setGroup( "MSN" );
- bool notifyNewChat = TDEGlobal::config()->readBoolEntry( "NotifyNewChat", false );
- if ( notifyNewChat )
- {
- // this internal message should open the window if they not exist
- TQString body = i18n( "%1 has started a chat with you" ).arg( c->metaContact()->displayName() );
- Kopete::Message tmpMsg = Kopete::Message( c, members(), body, Kopete::Message::Internal, Kopete::Message::PlainText );
- appendMessage( tmpMsg );
- }
- }
- m_newSession=false;
- if(c)
- Kopete::ChatSession::receivedTypingMsg(c,b);
-}
-
-void MSNChatSession::slotSendNudge()
-{
- if(m_chatService)
- {
- m_chatService->sendNudge();
- Kopete::Message msg = Kopete::Message( myself(), members() , i18n ( "has sent a nudge" ), Kopete::Message::Outbound,
- Kopete::Message::PlainText, TQString(), Kopete::Message::TypeAction );
- appendMessage( msg );
-
- }
-}
-
-
-void MSNChatSession::slotNudgeReceived(const TQString& handle)
-{
- Kopete::Contact *c = account()->contacts()[ handle ] ;
- if(!c)
- c=members().getFirst();
- Kopete::Message msg = Kopete::Message(c, myself(), i18n ( "has sent you a nudge" ), Kopete::Message::Inbound,
- Kopete::Message::PlainText, TQString(), Kopete::Message::TypeAction );
- appendMessage( msg );
- // Emit the nudge/buzz notification (configured by user).
- emitNudgeNotification();
-}
-
-
-void MSNChatSession::slotWebcamReceive()
-{
-#if MSN_WEBCAM
- if(m_chatService && members().getFirst())
- {
- m_chatService->PeerDispatcher()->startWebcam(myself()->contactId() , members().getFirst()->contactId() , true);
- }
-#endif
-}
-
-void MSNChatSession::slotWebcamSend()
-{
-#if MSN_WEBCAM
- kdDebug(14140) << k_funcinfo << endl;
- if(m_chatService && members().getFirst())
- {
- m_chatService->PeerDispatcher()->startWebcam(myself()->contactId() , members().getFirst()->contactId() , false);
- }
-#endif
-}
-
-
-void MSNChatSession::slotSendFile()
- {
- TQPtrList<Kopete::Contact>contacts = members();
- static_cast<MSNContact *>(contacts.first())->sendFile();
- }
-
-void MSNChatSession::startChatSession()
-{
- TQPtrList<Kopete::Contact> mb=members();
- static_cast<MSNAccount*>( account() )->slotStartChatSession( mb.first()->contactId() );
-
- if(!m_timeoutTimer)
- {
- m_timeoutTimer=new TQTimer(this);
- connect( m_timeoutTimer , TQT_SIGNAL(timeout()), this , TQT_SLOT(slotConnectionTimeout() ) );
- }
- m_timeoutTimer->start(20000, true);
-}
-
-
-void MSNChatSession::cleanMessageQueue( const TQString & reason )
-{
- delete m_timeoutTimer;
- m_timeoutTimer=0L;
-
- uint nb=m_messagesQueue.count()+m_messagesSent.count();
- if(nb==0)
- return;
- else if(nb==1)
- {
- Kopete::Message m;
- if(m_messagesQueue.count() == 1)
- m=m_messagesQueue.first();
- else
- m=m_messagesSent.begin().data();
-
- TQString body=i18n("The following message has not been sent correctly (%1): \n%2").arg(reason, m.plainBody());
- Kopete::Message msg = Kopete::Message(m.to().first() , members() , body , Kopete::Message::Internal, Kopete::Message::PlainText);
- appendMessage(msg);
- }
- else
- {
- Kopete::Message m;
- TQString body=i18n("These messages have not been sent correctly (%1): <br /><ul>").arg(reason);
- for ( TQMap<unsigned int , Kopete::Message>::iterator it = m_messagesSent.begin(); it!=m_messagesSent.end(); it = m_messagesSent.begin() )
- {
- m=it.data();
- body+= "<li>"+m.escapedBody()+"</li>";
- m_messagesSent.remove(it);
- }
- for ( TQValueList<Kopete::Message>::iterator it = m_messagesQueue.begin(); it!=m_messagesQueue.end(); it = m_messagesQueue.begin() )
- {
- m=(*it);
- body+= "<li>"+m.escapedBody()+"</li>";
- m_messagesQueue.remove(it);
- }
- body+="</ul>";
- Kopete::Message msg = Kopete::Message(m.to().first() , members() , body , Kopete::Message::Internal, Kopete::Message::RichText);
- appendMessage(msg);
-
- }
- m_messagesQueue.clear();
- m_messagesSent.clear();
- messageSucceeded(); //stop stupid animation
-}
-
-void MSNChatSession::slotConnectionTimeout()
-{
- m_connectionTry++;
- if(m_chatService)
- {
- disconnect(m_chatService , 0 , this , 0 );
- m_chatService->deleteLater();
- m_chatService=0L;
- }
-
- if( m_connectionTry > 3 )
- {
- cleanMessageQueue( i18n("Impossible to establish the connection") );
- delete m_timeoutTimer;
- m_timeoutTimer=0L;
- return;
- }
- startChatSession();
-
-}
-
-
-
-
-#include "msnchatsession.moc"
-
-// vim: set noet ts=4 sts=4 sw=4:
-