diff plugins/history.c @ 3598:c6f92ece3097

[gaim-migrate @ 3700] This will make it easier to try it out. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Sun, 06 Oct 2002 07:56:43 +0000
parents
children a9cf9903bd74
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/history.c	Sun Oct 06 07:56:43 2002 +0000
@@ -0,0 +1,69 @@
+/* Puts last 4k of log in new conversations a la Everybuddy (and then
+ * stolen by Trillian "Pro") */
+
+#define GAIM_PLUGINS
+#include "gaim.h"
+#include "gtkimhtml.h"
+#include <sys/stat.h>
+#include <unistd.h>
+
+#define HISTORY_SIZE (4 * 1024)
+
+GModule *handle;
+
+void historize (char *name, void *data)
+{
+	struct conversation *c = find_conversation(name);
+	struct stat st;
+	FILE *fd;
+	char *userdir = 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;
+	int size;
+	
+	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 : st.st_size, 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++;
+	
+	gtk_imhtml_append_text(GTK_IMHTML(c->text), tmp, strlen(tmp), GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_NEWLINE);
+
+	g_free(userdir);
+	g_free(logfile);
+	g_free(path);
+}
+
+char *gaim_plugin_init(GModule *h) {
+	handle = h;
+
+	gaim_signal_connect(handle, event_new_conversation, historize, NULL);
+
+	return NULL;
+}
+
+struct gaim_plugin_description desc; 
+struct gaim_plugin_description *gaim_plugin_desc() {
+	desc.api_version = PLUGIN_API_VERSION;
+	desc.name = g_strdup("History");
+	desc.version = g_strdup(VERSION);
+	desc.description = g_strdup("Shows recently logged conversations in new conversations ");
+	desc.authors = g_strdup("Sean Egan &lt;bj91704@binghamton.edu>");
+	desc.url = g_strdup(WEBSITE);
+	return &desc;
+}