Mercurial > pidgin.yaz
view plugins/history.c @ 4344:d6f1086d52a6
[gaim-migrate @ 4609]
A few small changes...
The "orphans" groups should stop reappearing every time you sign
online. Twas a case of too much error checking.
Buddies, permits, and denies with empty names will all be deleted
automatically by the cleaning function. This should never really
happen, but somehow one of my accounts had some empty-named permit
buddies, so I threw it in here.
I also took out some BR tags before some HR tags. I really really
really think it looks better this way. Feel free to disagree.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 19 Jan 2003 07:35:18 +0000 |
parents | cba92ec56248 |
children | 5fb47ec9bfe4 |
line wrap: on
line source
/* Puts last 4k of log in new conversations a la Everybuddy (and then * stolen by Trillian "Pro") */ #include "config.h" #ifndef GAIM_PLUGINS #define GAIM_PLUGINS #endif #include "gaim.h" #include "gtkimhtml.h" #include <sys/stat.h> #include <unistd.h> #include <string.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 = 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; 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; gtk_imhtml_append_text(GTK_IMHTML(c->text), tmp, strlen(tmp), options); 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 <bj91704@binghamton.edu>"); desc.url = g_strdup(WEBSITE); return &desc; }