summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/winpopup/wpcontact.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/winpopup/wpcontact.cpp')
-rw-r--r--kopete/protocols/winpopup/wpcontact.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/kopete/protocols/winpopup/wpcontact.cpp b/kopete/protocols/winpopup/wpcontact.cpp
new file mode 100644
index 00000000..7cf2529c
--- /dev/null
+++ b/kopete/protocols/winpopup/wpcontact.cpp
@@ -0,0 +1,189 @@
+/***************************************************************************
+ wpcontact.cpp - description
+ -------------------
+ begin : Fri Apr 12 2002
+ copyright : (C) 2002 by Gav Wood
+ email : gav@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. *
+ * *
+ ***************************************************************************/
+
+// Qt Includes
+#include <qregexp.h>
+
+// KDE Includes
+#include <kdebug.h>
+
+// Kopete Includes
+
+// Local Includes
+#include "wpcontact.h"
+#include "wpaccount.h"
+
+WPContact::WPContact(Kopete::Account *account, const QString &newHostName, const QString &nickName, Kopete::MetaContact *metaContact)
+ : Kopete::Contact(account, newHostName, metaContact)
+{
+// kdDebug(14170) << "WPContact::WPContact(<account>, " << newHostName << ", " << nickName << ", <parent>)" << endl;
+ kdDebug(14170) << "WPContact::WPContact: " << this << endl;
+
+ QString theNickName = nickName;
+
+ if (theNickName.isEmpty()) {
+ // Construct nickname from hostname with first letter to upper. GF
+ theNickName = newHostName.lower();
+ theNickName = theNickName.replace(0, 1, theNickName[0].upper());
+ }
+
+ setNickName(theNickName);
+ myWasConnected = false;
+
+
+ m_manager = 0;
+ m_infoDialog = 0;
+
+ // Initialise and start the periodical checking for contact's status
+ setOnlineStatus(static_cast<WPProtocol *>(protocol())->WPOffline);
+
+ connect(&checkStatus, SIGNAL(timeout()), this, SLOT(slotCheckStatus()));
+ checkStatus.start(1000, false);
+}
+
+QPtrList<KAction> * WPContact::customContextMenuActions()
+{
+ //myActionCollection = new KActionCollection(parent);
+ return 0;
+}
+
+void WPContact::serialize(QMap<QString, QString> &serializedData, QMap<QString, QString> &addressBookData)
+{
+// kdDebug(14170) << "WP::serialize(...)" << endl;
+
+ Kopete::Contact::serialize(serializedData, addressBookData);
+}
+
+Kopete::ChatSession* WPContact::manager( Kopete::Contact::CanCreateFlags /*canCreate*/ ) // TODO: use the parameter as canCreate
+{
+ if (m_manager == 0) {
+ // Set up the message managers
+ QPtrList<Kopete::Contact> singleContact;
+ singleContact.append(this);
+
+ m_manager = Kopete::ChatSessionManager::self()->create( account()->myself(), singleContact, protocol() );
+
+ connect(m_manager, SIGNAL(messageSent(Kopete::Message &, Kopete::ChatSession *)), this, SLOT(slotSendMessage(Kopete::Message &)));
+ connect(m_manager, SIGNAL(messageSent(Kopete::Message &, Kopete::ChatSession *)), m_manager, SLOT(appendMessage(Kopete::Message &)));
+ connect(m_manager, SIGNAL(destroyed()), this, SLOT(slotChatSessionDestroyed()));
+ }
+
+ return m_manager;
+}
+
+/*
+bool WPContact::isOnline() const
+{
+ kdDebug(14170) << "[WPContact::isOnline()]" << endl;
+ return onlineStatus().status() != Kopete::OnlineStatus::Offline && onlineStatus().status() != Kopete::OnlineStatus::Unknown;
+}
+*/
+
+bool WPContact::isReachable()
+{
+// kdDebug(14170) << "[WPContact::isReachable()]" << endl;
+ return onlineStatus().status() != Kopete::OnlineStatus::Offline && onlineStatus().status() != Kopete::OnlineStatus::Unknown;
+}
+
+void WPContact::slotChatSessionDestroyed()
+{
+ m_manager = 0;
+}
+
+void WPContact::slotUserInfo()
+{
+ kdDebug( 14170 ) << k_funcinfo << endl;
+
+ if (!m_infoDialog) {
+ m_infoDialog = new WPUserInfo( this, static_cast<WPAccount*>( account() ) );
+ if (!m_infoDialog) return;
+ connect( m_infoDialog, SIGNAL( closing() ), this, SLOT( slotCloseUserInfoDialog() ) );
+ m_infoDialog->show();
+ } else {
+ m_infoDialog->raise();
+ }
+}
+
+void WPContact::slotCloseUserInfoDialog()
+{
+ m_infoDialog->delayedDestruct();
+ m_infoDialog = 0;
+}
+
+/*
+void deleteContact()
+{
+// deleteLater();
+}
+*/
+
+void WPContact::slotCheckStatus()
+{
+ bool oldWasConnected = myWasConnected;
+ bool newIsOnline = false;
+
+ myWasConnected = protocol() != 0 && account() != 0;
+ WPAccount *acct = dynamic_cast<WPAccount *>(account());
+ if (acct) newIsOnline = acct->checkHost(contactId());
+
+ if(newIsOnline != isOnline() || myWasConnected != oldWasConnected) {
+ Kopete::OnlineStatus tmpStatus = WPProtocol::protocol()->WPOffline;
+ if (myWasConnected && newIsOnline) {
+ tmpStatus = WPProtocol::protocol()->WPOnline;
+ }
+ setOnlineStatus(tmpStatus);
+ }
+}
+
+void WPContact::slotNewMessage(const QString &Body, const QDateTime &Arrival)
+{
+ kdDebug(14170) << "WPContact::slotNewMessage(" << Body << ", " << Arrival.toString() << ")" << endl;
+
+ QPtrList<Kopete::Contact> contactList;
+ contactList.append(account()->myself());
+
+ QRegExp subj("^Subject: ([^\n]*)\n(.*)$");
+ Kopete::Message msg;
+
+ if(subj.search(Body) == -1) {
+ msg = Kopete::Message(this, contactList, Body, Kopete::Message::Inbound);
+ } else {
+ msg = Kopete::Message(this, contactList, subj.cap(2), subj.cap(1), Kopete::Message::Inbound);
+ }
+
+ manager(Kopete::Contact::CannotCreate)->appendMessage(msg);
+}
+
+void WPContact::slotSendMessage( Kopete::Message& message )
+{
+// kdDebug(14170) << "WPContact::slotSendMessage(<message>)" << endl;
+ // Warning: this could crash
+ kdDebug(14170) << message.to().first() << " is " << dynamic_cast<WPContact *>( message.to().first() )->contactId() << endl;
+
+ QString Message = (!message.subject().isEmpty() ? "Subject: " + message.subject() + "\n" : QString("")) + message.plainBody();
+ WPAccount *acct = dynamic_cast<WPAccount *>(account());
+ WPContact *contact = dynamic_cast<WPContact *>( message.to().first() );
+ if (acct && contact) {
+ acct->slotSendMessage( Message, contact->contactId() );
+ m_manager->messageSucceeded();
+ }
+}
+
+#include "wpcontact.moc"
+
+// vim: set noet ts=4 sts=4 sw=4:
+// kate: tab-width 4; indent-width 4; replace-trailing-space-save on;