view plugins/history.c @ 6463:eafaf58b61b6

[gaim-migrate @ 6972] (23:03:49) Robot101: LSchiere: GAIM_{ERROR,WARNING,INFO,...} and EDIT_{GC,GROUP,BUDDY} in ui.h are unused and can be garbage collected (23:04:10) Robot101: HEH (23:04:16) Robot101: I never knew core.h had trogdor in it =) (23:04:26) LSchiere: those are semi-namespaced, does ChipX86|Gone have plans for them? (23:04:41) Robot101: they're deprecated. (23:04:46) Robot101: not used anywhere in code (23:05:01) Robot101: left over garbage from a subsystem rewritten years ago... =) (23:05:26) LSchiere: icq.c uses GAIM_ERROR (23:06:05) Robot101: icq.c hasn't had a rat's chance in hell of compiling since about 0.64 =) (23:06:16) LSchiere: lol, yeah that's probly true (23:06:30) Robot101: it still uses do_error_dialog (23:06:35) Robot101: which is, er, gone. =) (23:06:56) LSchiere: GAIM_LOGO is that used? (23:07:04) Robot101: no (23:07:18) Robot101: those 4 were for selecting the icons in the error dialog (23:07:23) Robot101: which is long gone (23:07:34) Robot101: and I have NFI what EDIT_* were, but they're not used either (23:08:06) Robot101: some day soon ui.h will be totally gone (23:08:07) ***Robot101 drools committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Thu, 14 Aug 2003 03:08:25 +0000
parents 8f94cce8faa5
children 70d5122bc3ff
line wrap: on
line source

/* Puts last 4k of log in new conversations a la Everybuddy (and then
 * stolen by Trillian "Pro") */

#include "gtkinternal.h"

#include "conversation.h"
#include "debug.h"
#include "prefs.h"
#include "util.h"

#include "gtkconv.h"
#include "gtkimhtml.h"
#include "gtkplugin.h"

#define HISTORY_PLUGIN_ID "gtk-history"

#define HISTORY_SIZE (4 * 1024)

void historize (char *name, void *data)
{
	GaimConversation *c = gaim_find_conversation(name);
	GaimGtkConversation *gtkconv;
	struct stat st;
	FILE *fd;
	char *userdir = g_strdup(gaim_user_dir());
	char *logfile = g_strdup_printf("%s.log", normalize(name));
	char *path = g_build_filename(userdir, "logs", logfile, NULL);
	char buf[HISTORY_SIZE+1];
	char *tmp, *tmp2;
	int size;
	GtkIMHtmlOptions options = GTK_IMHTML_NO_COLOURS;

	if (stat(path, &st) || S_ISDIR(st.st_mode) || st.st_size == 0 || 
	    !(fd = fopen(path, "r"))) {
		g_free(userdir);
		g_free(logfile);
		g_free(path);
		return;
	}

	fseek(fd, st.st_size > HISTORY_SIZE ? st.st_size - HISTORY_SIZE : 0, SEEK_SET);
	size = fread(buf, 1, HISTORY_SIZE, fd);
	tmp = buf;
	tmp[size] = 0;

	/* start the history at a newline */
	while (*tmp && *tmp != '\n')
		tmp++;

	if (*tmp) tmp++;

	if(*tmp == '<')
		options |= GTK_IMHTML_NO_NEWLINE;

	if (gaim_prefs_get_bool("/gaim/gtk/conversations/show_urls_as_links"))
		tmp2 = linkify_text(tmp);
	else
		tmp2 = g_strdup(tmp);

	gtkconv = GAIM_GTK_CONVERSATION(c);

	gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), tmp2, strlen(tmp2), options);

	g_free(tmp2);
	g_free(userdir);
	g_free(logfile);
	g_free(path);
}

static gboolean
plugin_load(GaimPlugin *plugin)
{
	gaim_signal_connect(plugin, event_new_conversation, historize, NULL);

	return TRUE;
}

static GaimPluginInfo info =
{
	2,
	GAIM_PLUGIN_STANDARD,
	GAIM_GTK_PLUGIN_TYPE,
	0,
	NULL,
	GAIM_PRIORITY_DEFAULT,
	HISTORY_PLUGIN_ID,
	N_("History"),
	VERSION,
	N_("Shows recently logged conversations in new conversations."),
	N_("When a new conversation is opened this plugin will insert the last XXX of the last conversation into the current conversation."),
	"Sean Egan <bj91704@binghamton.edu>",
	GAIM_WEBSITE,
	plugin_load,
	NULL,
	NULL,
	NULL,
	NULL
};

static void
init_plugin(GaimPlugin *plugin)
{
}

GAIM_INIT_PLUGIN(history, init_plugin, info)