summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/groupwise/libgroupwise/tasks/getstatustask.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/groupwise/libgroupwise/tasks/getstatustask.cpp')
-rw-r--r--kopete/protocols/groupwise/libgroupwise/tasks/getstatustask.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/kopete/protocols/groupwise/libgroupwise/tasks/getstatustask.cpp b/kopete/protocols/groupwise/libgroupwise/tasks/getstatustask.cpp
new file mode 100644
index 00000000..dde055a6
--- /dev/null
+++ b/kopete/protocols/groupwise/libgroupwise/tasks/getstatustask.cpp
@@ -0,0 +1,72 @@
+/*
+ Kopete Groupwise Protocol
+ getstatustask.cpp - fetch a contact's details from the server
+
+ Copyright (c) 2004 SUSE Linux AG http://www.suse.com
+
+ Based on Iris, Copyright (C) 2003 Justin Karneges
+
+ Kopete (c) 2002-2004 by the Kopete developers <[email protected]>
+
+ *************************************************************************
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#include "response.h"
+
+#include "getstatustask.h"
+
+GetStatusTask::GetStatusTask(Task* parent): RequestTask(parent)
+{
+}
+
+GetStatusTask::~GetStatusTask()
+{
+}
+
+void GetStatusTask::userDN( const QString & dn )
+{
+ m_userDN = dn;
+ // set up Transfer
+ Field::FieldList lst;
+ // changed from USERID to DN as per Gaim/GWIM
+ lst.append( new Field::SingleField( NM_A_SZ_DN, 0, NMFIELD_TYPE_UTF8, m_userDN ) );
+ createTransfer( "getstatus", lst );
+}
+
+bool GetStatusTask::take( Transfer * transfer )
+{
+ if ( !forMe( transfer ) )
+ return false;
+ Response * response = dynamic_cast<Response *>( transfer );
+ if ( !response )
+ return false;
+
+ Field::FieldList responseFields = response->fields();
+ responseFields.dump( true );
+ // parse received details and signal like billio
+ Field::SingleField * sf = 0;
+ Q_UINT16 status;
+ sf = responseFields.findSingleField( NM_A_SZ_STATUS );
+ if ( sf )
+ {
+ // As of Sept 2004 the server always responds with 2 (Available) here, even if the sender is not
+ // This must be because the sender is not on our contact list but has sent us a message.
+ // TODO: Check that the change to sending DNs above has fixed this problem.
+ status = sf->value().toInt();
+ // unfortunately getstatus doesn't give us an away message so we pass QString::null here
+ emit gotStatus( m_userDN, status, QString::null );
+ setSuccess();
+ }
+ else
+ setError();
+ return true;
+}
+
+#include "getstatustask.moc"