view src/protocols/msn/table.c @ 8866:c2dff943e240

[gaim-migrate @ 9634] (14:10:22) Faceprint: the timestamp plugin will now mislead users (14:10:54) Me: which way does ichat behave? (14:10:58) Me: i think the new way (14:11:05) Me: but its been some time since i've seen it (14:11:09) Faceprint: i don't know or care, the new behavior will confuse the hell out of people (14:11:22) Faceprint: lets say we have a conversation (14:11:25) Faceprint: 2:00 gets printed by the plugin (14:11:36) Faceprint: then we say nothing for 3 hours (14:11:42) Faceprint: and then one of us says something (14:12:04) Faceprint: that will be printed, and then as many as 5 minutes later, the plugin will print 5:05 (14:12:23) Me: yes yes yes, i see both sides of this one. i tend to think the new behavior is better, but i'll revert it (14:12:36) Faceprint: since "normal" timestamps are turned off, it appears as though what was just said was said around 2 (14:12:43) Faceprint: no, don't revert, fix (14:12:53) Faceprint: preferably, make the patch writer fix (14:12:57) Me: *nods* (14:13:06) Me: which requires reverting since otherwise he won't be motivated (14:13:13) Faceprint: if something is said and we've gone more than 5 min w/o printing a timestamp, print a timestamp before writing to the conv committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Mon, 03 May 2004 18:13:39 +0000
parents a7affa2e2986
children ab6636c5a136
line wrap: on
line source

/**
 * @file table.c MSN helper structure
 *
 * gaim
 *
 * Copyright (C) 2003, Christian Hammond <chipx86@gnupdate.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.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#include "msn.h"
#include "table.h"

static void
null_cmd_cb(MsnCmdProc *cmdproc, MsnCommand *cmd)
{
}

static void
null_error_cb(MsnCmdProc *cmdproc, MsnTransaction *trans, int error)
{
}

MsnTable *
msn_table_new()
{
	MsnTable *table;

	table = g_new0(MsnTable, 1);

	table->cmds = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
	table->msgs = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
	table->errors = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);

	table->async = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);

	return table;
}

void
msn_table_destroy(MsnTable *table)
{
	g_return_if_fail(table != NULL);

	g_hash_table_destroy(table->cmds);
	g_hash_table_destroy(table->msgs);
	g_hash_table_destroy(table->errors);

	g_hash_table_destroy(table->async);

	g_free(table);
}

void
msn_table_add_cmd(MsnTable *table,
				  char *command, char *answer, MsnTransCb cb)
{
	GHashTable *cbs;

	g_return_if_fail(table  != NULL);
	g_return_if_fail(answer != NULL);

	cbs = NULL;

	if (command == NULL)
	{
		cbs = table->async;
	}
	else
	{
		cbs = g_hash_table_lookup(table->cmds, command);

		if (cbs == NULL)
		{
			cbs = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
			g_hash_table_insert(table->cmds, command, cbs);
		}
	}

	if (cb == NULL)
		cb = null_cmd_cb;

	g_hash_table_insert(cbs, answer, cb);
}

void
msn_table_add_error(MsnTable *table,
					char *answer, MsnErrorCb cb)
{
	g_return_if_fail(table  != NULL);
	g_return_if_fail(answer != NULL);

	if (cb == NULL)
		cb = null_error_cb;

	g_hash_table_insert(table->errors, answer, cb);
}

void
msn_table_add_msg_type(MsnTable *table,
					   char *type, MsnMsgCb cb)
{
	g_return_if_fail(table != NULL);
	g_return_if_fail(type  != NULL);
	g_return_if_fail(cb    != NULL);

#if 0
	if (cb == NULL)
		cb = null_msg_cb;
#endif

	g_hash_table_insert(table->msgs, type, cb);
}