view plugins/timestamp.c @ 4167:7002b6f16bdf

[gaim-migrate @ 4396] (00:14:20) Robot101: if anyone with CVS would like to choose between the docklet eating messages if you ask it to queue them, or an occasional crash when returning from away with queued messages, I have a patch to revert ari's 'fix' at http://people.debian.org/~robot101/silly-ari.diff (00:15:05) Robot101: Sean and I agreed that keeping the queued messages in a GSList is better, so if ari could seperate the gtk2ification and the fixing of the crash, without breaking the generic queueing stuff, that'd be peachy (00:15:22) Robot101: in the meantime, the docklet saying it has queued messages, and not letting you read them, is pretty damn obnoxious. (00:16:30) LSchiere: i'll do it committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Thu, 02 Jan 2003 05:18:16 +0000
parents 74d27aa5b686
children ebfb80bbe1ed
line wrap: on
line source

/* iChat-like timestamps by Sean Egan.
 * <INSERT GPL HERE> */

#define GAIM_PLUGINS
#include <time.h>
#include "gaim.h"
#include "gtkimhtml.h"

#define TIMESTAMP_DELAY (5 * 60 * 1000)

GModule *handle;
GSList *timestamp_timeouts;

gboolean do_timestamp (struct conversation *c)
{
	char *buf;
	char mdate[6];
	time_t tim = time(NULL);
	
	if (!g_list_find(conversations, c))
		return FALSE;

	strftime(mdate, sizeof(mdate), "%H:%M", localtime(&tim));
	buf = g_strdup_printf("            %s", mdate);
	write_to_conv(c, buf, WFLAG_NOLOG, NULL, tim, -1);
	g_free(buf);
	return TRUE;
}

void timestamp_new_convo(char *name)
{
	struct conversation *c = find_conversation(name);
	do_timestamp(c);
	
	timestamp_timeouts = g_slist_append(timestamp_timeouts,
			GINT_TO_POINTER(gtk_timeout_add(TIMESTAMP_DELAY,
				(GtkFunction)do_timestamp, c)));

}
char *gaim_plugin_init(GModule *h) {
	GList *cnvs = conversations;
	struct conversation *c;
	handle = h;

	while (cnvs) {
		c = cnvs->data;
		timestamp_new_convo(c->name);
		cnvs = cnvs->next;
	}
	gaim_signal_connect(handle, event_new_conversation, timestamp_new_convo, NULL);

	return NULL;
}

void gaim_plugin_remove() {
	GSList *to;
	to = timestamp_timeouts;
	while (to) {
		gtk_timeout_remove(GPOINTER_TO_INT(to->data));
		to = to->next;
	}
	g_slist_free(timestamp_timeouts);
}

struct gaim_plugin_description desc; 
struct gaim_plugin_description *gaim_plugin_desc() {
	desc.api_version = PLUGIN_API_VERSION;
	desc.name = g_strdup(_("Timestamp"));
	desc.version = g_strdup(VERSION);
	desc.description = g_strdup(_("Adds iChat-style timestamps to conversations every 5 minutes."));
	desc.authors = g_strdup("Sean Egan &lt;bj91704@binghamton.edu>");
	desc.url = g_strdup(WEBSITE);
	return &desc;
}