void HistoryGUIClient::slotViewHistory() { // Original Code, but this any segfault if anything in this pipe is NULL - Tejas Dinkar //Kopete::MetaContact *m = Kopete::ChatSessionManager::self()->activeView()->msgManager()->members().first()->metaContact(); //The same as above but with some checking KopeteView *view= Kopete::ChatSessionManager::self()->activeView(); if (!view) { kDebug()<<"Unable to Get Active View!"; return; } Kopete::ChatSession *session = view->msgManager(); if (!session) { kDebug()<<"Unable to Get Active Session!"; return; } Kopete::Contact *contact = session->members().first(); if (!contact) { kDebug()<<"Unable to get contact!"; return; } Kopete::MetaContact *m = contact->metaContact(); if(m) { HistoryDialog* dialog = new HistoryDialog(m); dialog->setObjectName( QLatin1String("HistoryDialog") ); } }
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; }