summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/jabber/jabbergroupchatmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/jabber/jabbergroupchatmanager.cpp')
-rw-r--r--kopete/protocols/jabber/jabbergroupchatmanager.cpp163
1 files changed, 163 insertions, 0 deletions
diff --git a/kopete/protocols/jabber/jabbergroupchatmanager.cpp b/kopete/protocols/jabber/jabbergroupchatmanager.cpp
new file mode 100644
index 00000000..7686ba8c
--- /dev/null
+++ b/kopete/protocols/jabber/jabbergroupchatmanager.cpp
@@ -0,0 +1,163 @@
+/*
+ jabbergroupchatmanager.cpp - Jabber Message Manager for group chats
+
+ Copyright (c) 2004 by Till Gerken <till@tantalo.net>
+
+ Kopete (c) 2004 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 "jabbergroupchatmanager.h"
+
+#include <qptrlist.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include "kopetechatsessionmanager.h"
+#include "kopeteview.h"
+#include "jabberprotocol.h"
+#include "jabberaccount.h"
+#include "jabberclient.h"
+#include "jabbercontact.h"
+
+JabberGroupChatManager::JabberGroupChatManager ( JabberProtocol *protocol, const JabberBaseContact *user,
+ Kopete::ContactPtrList others, XMPP::Jid roomJid, const char *name )
+ : Kopete::ChatSession ( user, others, protocol, name )
+{
+ kdDebug ( JABBER_DEBUG_GLOBAL ) << k_funcinfo << "New message manager for " << user->contactId () << endl;
+
+ mRoomJid = roomJid;
+
+ setMayInvite( true );
+
+ // make sure Kopete knows about this instance
+ Kopete::ChatSessionManager::self()->registerChatSession ( this );
+
+ connect ( this, SIGNAL ( messageSent ( Kopete::Message &, Kopete::ChatSession * ) ),
+ this, SLOT ( slotMessageSent ( Kopete::Message &, Kopete::ChatSession * ) ) );
+
+ updateDisplayName ();
+}
+
+JabberGroupChatManager::~JabberGroupChatManager()
+{
+}
+
+void JabberGroupChatManager::updateDisplayName ()
+{
+ kdDebug ( JABBER_DEBUG_GLOBAL ) << k_funcinfo << endl;
+
+ setDisplayName ( mRoomJid.full () );
+
+}
+
+const JabberBaseContact *JabberGroupChatManager::user () const
+{
+
+ return static_cast<const JabberBaseContact *>(Kopete::ChatSession::myself());
+
+}
+
+JabberAccount *JabberGroupChatManager::account () const
+{
+
+ return user()->account();
+
+}
+
+void JabberGroupChatManager::slotMessageSent ( Kopete::Message &message, Kopete::ChatSession * )
+{
+
+ if( account()->isConnected () )
+ {
+ XMPP::Message jabberMessage;
+
+ jabberMessage.setFrom ( account()->client()->jid() );
+
+
+ XMPP::Jid toJid ( mRoomJid );
+
+ jabberMessage.setTo ( toJid );
+
+ jabberMessage.setSubject ( message.subject () );
+ jabberMessage.setTimeStamp ( message.timestamp () );
+
+ if ( message.plainBody().find ( "-----BEGIN PGP MESSAGE-----" ) != -1 )
+ {
+ /*
+ * This message is encrypted, so we need to set
+ * a fake body indicating that this is an encrypted
+ * message (for clients not implementing this
+ * functionality) and then generate the encrypted
+ * payload out of the old message body.
+ */
+
+ // please don't translate the following string
+ jabberMessage.setBody ( i18n ( "This message is encrypted." ) );
+
+ QString encryptedBody = message.plainBody ();
+
+ // remove PGP header and footer from message
+ encryptedBody.truncate ( encryptedBody.length () - QString("-----END PGP MESSAGE-----").length () - 2 );
+ encryptedBody = encryptedBody.right ( encryptedBody.length () - encryptedBody.find ( "\n\n" ) - 2 );
+
+ // assign payload to message
+ jabberMessage.setXEncrypted ( encryptedBody );
+ }
+ else
+ {
+ // this message is not encrypted
+ jabberMessage.setBody ( message.plainBody () );
+ }
+
+ jabberMessage.setType ( "groupchat" );
+
+ // send the message
+ account()->client()->sendMessage ( jabberMessage );
+
+ // tell the manager that we sent successfully
+ messageSucceeded ();
+ }
+ else
+ {
+ account()->errorConnectFirst ();
+
+ // FIXME: there is no messageFailed() yet,
+ // but we need to stop the animation etc.
+ messageSucceeded ();
+ }
+}
+
+void JabberGroupChatManager::inviteContact( const QString & contactId )
+{
+ if( account()->isConnected () )
+ {
+ //NOTE: this is the obsolete, NOT RECOMMANDED protocol.
+ // iris doesn't implement groupchat yet
+ XMPP::Message jabberMessage;
+ jabberMessage.setFrom ( account()->client()->jid() );
+ jabberMessage.setTo ( contactId );
+ jabberMessage.setInvite( mRoomJid.userHost() );
+ jabberMessage.setBody( i18n("You have been invited to %1").arg( mRoomJid.userHost() ) );
+
+ // send the message
+ account()->client()->sendMessage ( jabberMessage );
+ }
+ else
+ {
+ account()->errorConnectFirst ();
+ }
+}
+
+
+#include "jabbergroupchatmanager.moc"
+
+// vim: set noet ts=4 sts=4 sw=4:
+