diff -r 000000000000 -r d0f3a028347a libtelepathy/tsrc/src/telepathygabblepresencetest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtelepathy/tsrc/src/telepathygabblepresencetest.cpp Tue Feb 02 01:10:06 2010 +0200 @@ -0,0 +1,262 @@ +/* +* Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Used for Presence Test Cases +* +*/ + + + + +// INCLUDE FILES +#include "telepathygabblepresencetest.h" +#include "telepathygabbletestdata.h" + +//----------------------------------------------------------------------------- +// function_name : CTestData +// description : Constructor +// Returns : None +//----------------------------------------------------------------------------- + +CTelepathyGabblePresenceTest::CTelepathyGabblePresenceTest() + { + } + +//----------------------------------------------------------------------------- +// function_name : ConstructL +// description : Constructor +// Returns : None +//----------------------------------------------------------------------------- + +void CTelepathyGabblePresenceTest::ConstructL() + { + + } + +//----------------------------------------------------------------------------- +// function_name : NewL +// description : Constructor +// Returns : None +//----------------------------------------------------------------------------- +CTelepathyGabblePresenceTest* CTelepathyGabblePresenceTest::NewL() + { + + CTelepathyGabblePresenceTest* self = new(ELeave) CTelepathyGabblePresenceTest; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +//----------------------------------------------------------------------------- +// function_name : ~CTelepathyGabblePresenceTest +// description : destructor +// Returns : None +//----------------------------------------------------------------------------- +CTelepathyGabblePresenceTest::~CTelepathyGabblePresenceTest() +{ + +} + + +//----------------------------------------------------------------------------- +// function_name : ~CTestData +// description : destructor +// Returns : None +//----------------------------------------------------------------------------- +TelepathyPresenceState CTelepathyGabblePresenceTest::telepathy_presence_state_from_str (const gchar *str) +{ + char temp[25]; + strcpy(temp,str); + //roster_log_handler("telepathy_telepathy_presence_state_from_str"); + //roster_log_handler(temp); + + if (strcmp (str, "available") == 0) { + return TELEPATHY_PRESENCE_STATE_AVAILABLE; + } else if ((strcmp (str, "dnd") == 0) || (strcmp (str, "busy") == 0)) { + return TELEPATHY_PRESENCE_STATE_BUSY; + } else if ((strcmp (str, "away") == 0) || (strcmp (str, "brb") == 0)) { + return TELEPATHY_PRESENCE_STATE_AWAY; + } else if (strcmp (str, "xa") == 0) { + return TELEPATHY_PRESENCE_STATE_EXT_AWAY; + } else if (strcmp (str, "hidden") == 0) { + return TELEPATHY_PRESENCE_STATE_HIDDEN; + } else if (strcmp (str, "offline") == 0) { + return TELEPATHY_PRESENCE_STATE_UNAVAILABLE; + } + + return TELEPATHY_PRESENCE_STATE_AVAILABLE; +} + +//----------------------------------------------------------------------------- +// function_name : ~CTestData +// description : destructor +// Returns : None +//----------------------------------------------------------------------------- +//vinod: gossip_telepathy_contacts_send_presence +void +CTelepathyGabblePresenceTest::telepathy_contacts_send_presence (DBusGProxy *pres_iface, + TelepathyPresence *presence/*CTestData *aTestData*/) +{ + GHashTable *status_ids; + GHashTable *status_options; + const gchar *status_id; + const gchar *message; + TelepathyPresenceState presence_state; + GError *error = NULL; + GValue value_message = {0, }; + + //iTpConn = aTestData->GetTpConn(); + + //g_return_if_fail (contacts != NULL); + //g_return_if_fail (GOSSIP_IS_PRESENCE (presence)); + + if (!pres_iface) { + return; + } + + status_ids = g_hash_table_new_full (g_str_hash, + g_str_equal, + g_free, + (GDestroyNotify) g_hash_table_destroy); + status_options = g_hash_table_new_full (g_str_hash, + g_str_equal, + NULL, + (GDestroyNotify) g_value_unset); + + presence_state = telepathy_presence_get_state (presence); + status_id = telepathy_presence_state_to_str (presence_state); + message = telepathy_presence_get_status (presence); + + if (message) { + g_value_init (&value_message, G_TYPE_STRING); + g_value_set_string (&value_message, message); + g_hash_table_insert (status_options, (gpointer)"message", &value_message); + } + + g_hash_table_insert (status_ids, + g_strdup (status_id), + status_options); + + //Sync way: gossip_debug (DEBUG_DOMAIN, "sending presence..."); + if (! (DBUS_G_PROXY(pres_iface), + status_ids, + &error)) { + //gossip_debug ("Could not set presence: %s", error->message); + //roster_log_handler("Could not set presence\n"); + g_clear_error (&error); + } + //Async way +/*tp_conn_iface_presence_set_status_async(DBUS_G_PROXY(pres_iface), + status_ids, + , + NULL ); +*/ + g_hash_table_destroy (status_ids); +} + +//----------------------------------------------------------------------------- +// function_name : telepathy_presences_foreach +// description : destructor +// Returns : None +//----------------------------------------------------------------------------- +void +CTelepathyGabblePresenceTest::telepathy_presences_foreach (gpointer *key, + gpointer *value, + TelepathyPresence **presence) +{ + TelepathyPresenceState state; + const gchar *message; + char temp[100]; + + *presence = telepathy_presence_new(); + + //roster_log_handler("telepathy_presences_foreach"); +// roster_log_handler(key); + + state = telepathy_presence_state_from_str((const gchar *)key); + + telepathy_presence_set_state(*presence, state); + + message = g_value_get_string((GValue *) + g_hash_table_lookup((GHashTable *) + value, "message")); + strcpy(temp,message); + //roster_log_handler(temp); + +} + +//----------------------------------------------------------------------------- +// function_name : telepathy_presence_handle_foreach +// description : destructor +// Returns : None +//----------------------------------------------------------------------------- +void +CTelepathyGabblePresenceTest::telepathy_presence_handle_foreach (gpointer *key, + gpointer *value) +{ + gint handle_id; + GHashTable *presences_hash; + GValue *gvalue; + gboolean new_item; + GObject *contact; + GObject *presence; + gchar **handle_name; + GArray *handles; + + CTestData* atestData; + + handle_id = GPOINTER_TO_INT(key); + + handles = g_array_new (FALSE, FALSE, sizeof (gint)); + g_array_append_val (handles, handle_id); + tp_conn_inspect_handles(DBUS_G_PROXY(atestData->GetTpConn()), + TP_CONN_HANDLE_TYPE_CONTACT, handles, + &handle_name, NULL); + + gvalue = g_value_array_get_nth((GValueArray *) value, 1); + + presences_hash = (GHashTable *) g_value_get_boxed(gvalue); + + g_hash_table_foreach(presences_hash, + (GHFunc) telepathy_presences_foreach, &presence); +} + +//----------------------------------------------------------------------------- +// function_name : ~CTestData +// description : destructor +// Returns : None +//----------------------------------------------------------------------------- +void CTelepathyGabblePresenceTest::telepathy_presence_handler(DBusGProxy *proxy, + GHashTable *handle_hash) +{ + //GObject *presence; + TelepathyPresence *presence; + TelepathyPresenceState state; + GSList *data = NULL; + //vinod: setting the new presence status + presence = telepathy_presence_new(); + //here am hard coding the value, this can be taken from ximpfw + state = telepathy_presence_state_from_str("dnd"); + telepathy_presence_set_state(presence, state); + //vinod + //roster_log_handler("telepathy_presence_handler callback\n"); + g_hash_table_foreach(handle_hash, (GHFunc) telepathy_presence_handle_foreach, data); + + + //vinod: call telepathy_set_presence method here + telepathy_contacts_send_presence(proxy, presence); + +} + +// End of File