void Kopete::ChatSession::appendMessage( Kopete::Message &msg ) { msg.setManager( this ); if ( msg.direction() == Kopete::Message::Inbound ) { QString nick=myself()->property(Kopete::Global::Properties::self()->nickName()).value().toString(); if ( KopetePrefs::prefs()->highlightEnabled() && !nick.isEmpty() && msg.plainBody().contains( QRegExp( QString::fromLatin1( "\\b(%1)\\b" ).arg( nick ), false ) ) ) { msg.setImportance( Kopete::Message::Highlight ); } emit messageReceived( msg, this ); } // outbound messages here are ones the user has sent that are now // getting reflected back to the chatwindow. they should go down // the incoming chain. Kopete::Message::MessageDirection chainDirection = msg.direction(); if( chainDirection == Kopete::Message::Outbound ) chainDirection = Kopete::Message::Inbound; chainForDirection( chainDirection )->processMessage( msg ); // emit messageAppended( msg, this ); }
void Kopete::ChatSession::appendMessage( Kopete::Message &msg ) { msg.setManager( this ); if ( msg.direction() == Kopete::Message::Inbound ) { const QString nick = myself()->nickName(); if ( Kopete::BehaviorSettings::self()->highlightEnabled() && !nick.isEmpty() ) { const QString nickNameRegExp = QString::fromLatin1( "(^|[\\W])(%1)([\\W]|$)" ).arg( QRegExp::escape( nick ) ); if ( msg.plainBody().contains( QRegExp( nickNameRegExp, Qt::CaseInsensitive ) ) ) { msg.setImportance( Kopete::Message::Highlight ); } } emit messageReceived( msg, this ); } // outbound messages here are ones the user has sent that are now // getting reflected back to the chatwindow. they should go down // the incoming chain. Kopete::Message::MessageDirection chainDirection = msg.direction(); if( chainDirection == Kopete::Message::Outbound ) chainDirection = Kopete::Message::Inbound; chainForDirection( chainDirection )->processMessage( msg ); //looking for urls in the message urlSearch( msg ); // emit messageAppended( msg, this ); }
void JabberGroupMemberContact::handleIncomingMessage ( const XMPP::Message &message ) { // message type is always chat in a groupchat QString viewType = "kopete_chatwindow"; Kopete::Message *newMessage = 0L; kDebug (JABBER_DEBUG_GLOBAL) << "Received Message Type:" << message.type (); Kopete::ChatSession *kmm = manager( Kopete::Contact::CanCreate ); if(!kmm) return; if ( message.type () != "error" ) { if (!message.invite().isEmpty()) { /*QString room=message.invite(); QString originalBody=message.body().isEmpty() ? QString() : i18n( "The original message is : <i>\" %1 \"</i><br />" , Qt::escape(message.body())); QString mes=i18n("<qt><i>%1</i> has invited you to join the conference <b>%2</b><br />%3<br />" "If you want to accept and join, just <b>enter your nickname</b> and press OK.<br />" "If you want to decline, press Cancel.</qt>", message.from().full(), room , originalBody); bool ok=false; QString futureNewNickName = KInputDialog::getText( i18n( "Invited to a conference - Jabber Plugin" ), mes, QString() , &ok , (mManager ? dynamic_cast<QWidget*>(mManager->view(false)) : 0) ); if ( !ok || !account()->isConnected() || futureNewNickName.isEmpty() ) return; XMPP::Jid roomjid(room); account()->client()->joinGroupChat( roomjid.domain() , roomjid.node() , futureNewNickName );*/ return; } else if (message.body().isEmpty()) // Then here could be event notifications { if (message.containsEvent ( XMPP::CancelEvent ) || (message.chatState() != XMPP::StateNone && message.chatState() != XMPP::StateComposing) ) mManager->receivedTypingMsg ( this, false ); else if (message.containsEvent ( XMPP::ComposingEvent )|| message.chatState() == XMPP::StateComposing ) mManager->receivedTypingMsg ( this, true ); if (message.containsEvent ( XMPP::DisplayedEvent ) ) { //mManager->receivedEventNotification ( i18n("Message has been displayed") ); } else if (message.containsEvent ( XMPP::DeliveredEvent ) ) { //mManager->receivedEventNotification ( i18n("Message has been delivered") ); mManager->receivedMessageState( message.eventId().toUInt(), Kopete::Message::StateSent ); mSendsDeliveredEvent = true; } else if (message.containsEvent ( XMPP::OfflineEvent ) ) { //mManager->receivedEventNotification( i18n("Message stored on the server, contact offline") ); mManager->receivedMessageState( message.eventId().toUInt(), Kopete::Message::StateSent ); } else if (message.chatState() == XMPP::StateGone ) { /*if(mManager->view( Kopete::Contact::CannotCreate )) { //show an internal message if the user has not already closed his window Kopete::Message m=Kopete::Message ( this, mManager->members() ); m.setPlainBody( i18n("%1 has ended his/her participation in the chat session.", metaContact()->displayName()) ); m.setDirection( Kopete::Message::Internal ); m.setImportance(Kopete::Message::Low); mManager->appendMessage ( m, message.from().resource () ); }*/ } // XEP-0184: Message Delivery Receipts if ( message.messageReceipt() == ReceiptReceived ) { //mManager->receivedEventNotification ( i18n("Message has been delivered") ); mManager->receivedMessageState( message.messageReceiptId().toUInt(), Kopete::Message::StateSent ); mSendsDeliveredEvent = true; } } else // Then here could be event notification requests { mRequestComposingEvent = message.containsEvent ( XMPP::ComposingEvent ); mRequestOfflineEvent = message.containsEvent ( XMPP::OfflineEvent ); mRequestDeliveredEvent = message.containsEvent ( XMPP::DeliveredEvent ); mRequestDisplayedEvent = message.containsEvent ( XMPP::DisplayedEvent); // XEP-0184: Message Delivery Receipts mRequestReceiptDelivery = ( message.messageReceipt() == ReceiptRequest ); } } /** * Don't display empty messages, these were most likely just carrying * event notifications or other payload. */ if ( message.body().isEmpty () ) return; Kopete::ContactPtrList contactList = kmm->members(); // check for errors if ( message.type () == "error" ) { newMessage = new Kopete::Message( this, contactList ); newMessage->setTimestamp( message.timeStamp() ); newMessage->setPlainBody( i18n("Your message could not be delivered: \"%1\", Reason: \"%2\"", message.body (), message.error().text ) ); newMessage->setSubject( message.subject() ); newMessage->setDirection( Kopete::Message::Inbound ); newMessage->setRequestedPlugin( viewType ); } else { // store message id for outgoing notifications mLastReceivedMessageId = message.id (); // retrieve and reformat body QString body = message.body (); if( !message.xencrypted().isEmpty () ) { body = QString ("-----BEGIN PGP MESSAGE-----\n\n") + message.xencrypted () + QString ("\n-----END PGP MESSAGE-----\n"); } else if( !message.xsigned().isEmpty () ) { body = QString ("-----BEGIN PGP MESSAGE-----\n\n") + message.xsigned () + QString ("\n-----END PGP MESSAGE-----\n"); } // convert XMPP::Message into Kopete::Message newMessage = new Kopete::Message ( this, contactList ); newMessage->setTimestamp( message.timeStamp() ); newMessage->setPlainBody( body ); newMessage->setDirection( Kopete::Message::Inbound ); newMessage->setRequestedPlugin( viewType ); newMessage->setImportance( Kopete::Message::Low ); } // append message to manager kmm->appendMessage ( *newMessage ); delete newMessage; }