libtelepathy/tsrc/src/telepathygabblepresencetest.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:10:06 +0200
changeset 0 d0f3a028347a
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* 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