plugins/history.c

changeset 14253
b63ebf84c42b
parent 14252
d10dda2777a9
child 14254
77edc7a6191a
--- a/plugins/history.c	Sat Aug 19 00:24:14 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,209 +0,0 @@
-/* Puts last 4k of log in new conversations a la Everybuddy (and then
- * stolen by Trillian "Pro") */
-
-#include "internal.h"
-#include "gtkgaim.h"
-
-#include "conversation.h"
-#include "debug.h"
-#include "log.h"
-#include "notify.h"
-#include "prefs.h"
-#include "signals.h"
-#include "util.h"
-#include "version.h"
-
-#include "gtkconv.h"
-#include "gtkimhtml.h"
-#include "gtkplugin.h"
-
-#define HISTORY_PLUGIN_ID "gtk-history"
-
-#define HISTORY_SIZE (4 * 1024)
-
-static gboolean _scroll_imhtml_to_end(gpointer data)
-{
-	GtkIMHtml *imhtml = data;
-	gtk_imhtml_scroll_to_end(GTK_IMHTML(imhtml), FALSE);
-	g_object_unref(G_OBJECT(imhtml));
-	return FALSE;
-}
-
-static void historize(GaimConversation *c)
-{
-	GaimAccount *account = gaim_conversation_get_account(c);
-	const char *name = gaim_conversation_get_name(c);
-	GaimConversationType convtype;
-	GList *logs = NULL;
-	const char *alias = name;
-	guint flags;
-	char *history;
-	GaimGtkConversation *gtkconv;
-	GtkIMHtmlOptions options = GTK_IMHTML_NO_COLOURS;
-	char *header;
-	char *protocol;
-
-	convtype = gaim_conversation_get_type(c);
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-	if (convtype == GAIM_CONV_TYPE_IM && g_list_length(gtkconv->convs) < 2)
-	{
-		GSList *buddies;
-		GSList *cur;
-
-		/* If we're not logging, don't show anything.
-		 * Otherwise, we might show a very old log. */
-		if (!gaim_prefs_get_bool("/core/logging/log_ims"))
-			return;
-
-		/* Find buddies for this conversation. */
-	        buddies = gaim_find_buddies(account, name);
-
-		/* If we found at least one buddy, save the first buddy's alias. */
-		if (buddies != NULL)
-			alias = gaim_buddy_get_contact_alias((GaimBuddy *)buddies->data);
-
-	        for (cur = buddies; cur != NULL; cur = cur->next)
-	        {
-	                GaimBlistNode *node = cur->data;
-	                if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL)))
-	                {
-				GaimBlistNode *node2;
-
-				alias = gaim_buddy_get_contact_alias((GaimBuddy *)node);
-
-				/* We've found a buddy that matches this conversation.  It's part of a
-				 * GaimContact with more than one GaimBuddy.  Loop through the GaimBuddies
-				 * in the contact and get all the logs. */
-				for (node2 = node->parent->child ; node2 != NULL ; node2 = node2->next)
-				{
-					logs = g_list_concat(
-						gaim_log_get_logs(GAIM_LOG_IM,
-							gaim_buddy_get_name((GaimBuddy *)node2),
-							gaim_buddy_get_account((GaimBuddy *)node2)),
-						logs);
-				}
-				break;
-	                }
-	        }
-	        g_slist_free(buddies);
-
-		if (logs == NULL)
-			logs = gaim_log_get_logs(GAIM_LOG_IM, name, account);
-		else
-			logs = g_list_sort(logs, gaim_log_compare);
-	}
-	else if (convtype == GAIM_CONV_TYPE_CHAT)
-	{
-		/* If we're not logging, don't show anything.
-		 * Otherwise, we might show a very old log. */
-		if (!gaim_prefs_get_bool("/core/logging/log_chats"))
-			return;
-
-		logs = gaim_log_get_logs(GAIM_LOG_CHAT, name, account);
-	}
-
-	if (logs == NULL)
-		return;
-
-	history = gaim_log_read((GaimLog*)logs->data, &flags);
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-	if (flags & GAIM_LOG_READ_NO_NEWLINE)
-		options |= GTK_IMHTML_NO_NEWLINE;
-
-	protocol = g_strdup(gtk_imhtml_get_protocol_name(GTK_IMHTML(gtkconv->imhtml)));
-	gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml),
-							      gaim_account_get_protocol_name(((GaimLog*)logs->data)->account));
-
-	if (gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->imhtml))))
-		gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", options);
-
-	header = g_strdup_printf(_("<b>Conversation with %s on %s:</b><br>"), alias,
-							 gaim_date_format_full(localtime(&((GaimLog *)logs->data)->time)));
-	gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), header, options);
-	g_free(header);
-
-	g_strchomp(history);
-	gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), history, options);
-	g_free(history);
-
-	gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<hr>", options);
-
-	gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), protocol);
-	g_free(protocol);
-
-	g_object_ref(G_OBJECT(gtkconv->imhtml));
-	g_idle_add(_scroll_imhtml_to_end, gtkconv->imhtml);
-
-	g_list_foreach(logs, (GFunc)gaim_log_free, NULL);
-	g_list_free(logs);
-}
-
-static void
-history_prefs_check(GaimPlugin *plugin)
-{
-	if (!gaim_prefs_get_bool("/core/logging/log_ims") &&
-	    !gaim_prefs_get_bool("/core/logging/log_chats"))
-	{
-		gaim_notify_warning(plugin, NULL, _("History Plugin Requires Logging"),
-							_("Logging can be enabled from Tools -> Preferences -> Logging.\n\n"
-							  "Enabling logs for instant messages and/or chats will activate "
-							  "history for the same conversation type(s)."));
-	}
-}
-
-static void history_prefs_cb(const char *name, GaimPrefType type,
-							 gconstpointer val, gpointer data)
-{
-	history_prefs_check((GaimPlugin *)data);
-}
-
-static gboolean
-plugin_load(GaimPlugin *plugin)
-{
-	gaim_signal_connect(gaim_conversations_get_handle(),
-						"conversation-created",
-						plugin, GAIM_CALLBACK(historize), NULL);
-
-	gaim_prefs_connect_callback(plugin, "/core/logging/log_ims",
-								history_prefs_cb, plugin);
-	gaim_prefs_connect_callback(plugin, "/core/logging/log_chats",
-								history_prefs_cb, plugin);
-
-	history_prefs_check(plugin);
-
-	return TRUE;
-}
-
-static GaimPluginInfo info =
-{
-	GAIM_PLUGIN_MAGIC,
-	GAIM_MAJOR_VERSION,
-	GAIM_MINOR_VERSION,
-	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 conversation into the current conversation."),
-	"Sean Egan <seanegan@gmail.com>",
-	GAIM_WEBSITE,
-	plugin_load,
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-	NULL
-};
-
-static void
-init_plugin(GaimPlugin *plugin)
-{
-}
-
-GAIM_INIT_PLUGIN(history, init_plugin, info)

mercurial