diff pidgin/plugins/timestamp_format.c @ 15373:5fe8042783c1

Rename gtk/ and libgaim/ to pidgin/ and libpurple/
author Sean Egan <seanegan@gmail.com>
date Sat, 20 Jan 2007 02:32:10 +0000
parents
children d54794a47c56
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/plugins/timestamp_format.c	Sat Jan 20 02:32:10 2007 +0000
@@ -0,0 +1,183 @@
+#include "internal.h"
+
+#include "debug.h"
+#include "log.h"
+#include "plugin.h"
+#include "util.h"
+#include "version.h"
+
+#include "gtkconv.h"
+#include "gtkplugin.h"
+
+#include <time.h>
+
+static GaimPluginPrefFrame *
+get_plugin_pref_frame(GaimPlugin *plugin)
+{
+	GaimPluginPrefFrame *frame;
+	GaimPluginPref *ppref;
+
+	frame = gaim_plugin_pref_frame_new();
+
+	ppref = gaim_plugin_pref_new_with_label(_("Timestamp Format Options"));
+	gaim_plugin_pref_frame_add(frame, ppref);
+
+	ppref = gaim_plugin_pref_new_with_name_and_label(
+			"/plugins/gtk/timestamp_format/force_24hr",
+			_("_Force (traditional Gaim) 24-hour time format"));
+	gaim_plugin_pref_frame_add(frame, ppref);
+
+	ppref = gaim_plugin_pref_new_with_label(_("Show dates in..."));
+	gaim_plugin_pref_frame_add(frame, ppref);
+
+	ppref = gaim_plugin_pref_new_with_name_and_label(
+			"/plugins/gtk/timestamp_format/use_dates/conversation",
+			_("Co_nversations:"));
+        gaim_plugin_pref_set_type(ppref, GAIM_PLUGIN_PREF_CHOICE);
+        gaim_plugin_pref_add_choice(ppref, _("For delayed messages"), "automatic");
+        gaim_plugin_pref_add_choice(ppref, _("For delayed messages and in chats"), "chats");
+        gaim_plugin_pref_add_choice(ppref, _("Always"), "always");
+	gaim_plugin_pref_frame_add(frame, ppref);
+
+	ppref = gaim_plugin_pref_new_with_name_and_label(
+			"/plugins/gtk/timestamp_format/use_dates/log",
+			_("_Message Logs:"));
+        gaim_plugin_pref_set_type(ppref, GAIM_PLUGIN_PREF_CHOICE);
+        gaim_plugin_pref_add_choice(ppref, _("For delayed messages"), "automatic");
+        gaim_plugin_pref_add_choice(ppref, _("For delayed messages and in chats"), "chats");
+        gaim_plugin_pref_add_choice(ppref, _("Always"), "always");
+	gaim_plugin_pref_frame_add(frame, ppref);
+
+	return frame;
+}
+
+static char *timestamp_cb_common(GaimConversation *conv,
+                                 time_t t,
+                                 gboolean force,
+                                 const char *dates)
+{
+	struct tm *tm = localtime(&t);
+	g_return_val_if_fail(conv != NULL, NULL);
+	g_return_val_if_fail(dates != NULL, NULL);
+
+	if (!strcmp(dates, "always") ||
+	    (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT &&
+	     !strcmp(dates, "chats")) ||
+	    (time(NULL) > (mktime(tm) + 20*60)))
+	{
+		if (force)
+			return g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", tm));
+		else
+			return g_strdup(gaim_date_format_long(tm));
+	}
+
+	if (force)
+		return g_strdup(gaim_utf8_strftime("%H:%M:%S", tm));
+
+	return NULL;
+}
+
+static char *conversation_timestamp_cb(GaimConversation *conv,
+                                       time_t t, gpointer data)
+{
+	gboolean force = gaim_prefs_get_bool(
+				"/plugins/gtk/timestamp_format/force_24hr");
+	const char *dates = gaim_prefs_get_string(
+				"/plugins/gtk/timestamp_format/use_dates/conversation");
+
+	g_return_val_if_fail(conv != NULL, NULL);
+
+	return timestamp_cb_common(conv, t, force, dates);
+}
+
+static char *log_timestamp_cb(GaimLog *log, time_t t, gpointer data)
+{
+	gboolean force = gaim_prefs_get_bool(
+				"/plugins/gtk/timestamp_format/force_24hr");
+	const char *dates = gaim_prefs_get_string(
+				"/plugins/gtk/timestamp_format/use_dates/log");
+
+	g_return_val_if_fail(log != NULL, NULL);
+
+	if (log->type == GAIM_LOG_SYSTEM)
+	{
+		if (force) {
+			struct tm *tm = localtime(&t);
+			return g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", tm));
+		} else {
+			return NULL;
+		}
+	}
+
+	return timestamp_cb_common(log->conv, t, force, dates);
+}
+
+static gboolean
+plugin_load(GaimPlugin *plugin)
+{
+	gaim_signal_connect(gaim_gtk_conversations_get_handle(), "conversation-timestamp",
+	                    plugin, GAIM_CALLBACK(conversation_timestamp_cb), NULL);
+	gaim_signal_connect(gaim_log_get_handle(), "log-timestamp",
+	                    plugin, GAIM_CALLBACK(log_timestamp_cb), NULL);
+	return TRUE;
+}
+
+static gboolean
+plugin_unload(GaimPlugin *plugin)
+{
+	return TRUE;
+}
+
+static GaimPluginUiInfo prefs_info = {
+        get_plugin_pref_frame,
+	0,   /* page num (Reserved) */
+	NULL /* frame (Reserved) */
+};
+
+static GaimPluginInfo info =
+{
+	GAIM_PLUGIN_MAGIC,
+	GAIM_MAJOR_VERSION,
+	GAIM_MINOR_VERSION,
+	GAIM_PLUGIN_STANDARD,                             /**< type           */
+	GAIM_GTK_PLUGIN_TYPE,                             /**< ui_requirement */
+	0,                                                /**< flags          */
+	NULL,                                             /**< dependencies   */
+	GAIM_PRIORITY_DEFAULT,                            /**< priority       */
+
+	NULL,                                             /**< id             */
+	N_("Message Timestamp Formats"),                  /**< name           */
+	VERSION,                                          /**< version        */
+	                                                  /**  summary        */
+	N_("Customizes the message timestamp formats."),
+	                                                  /**  description    */
+	N_("This plugin allows the user to customize "
+	   "conversation and logging message timestamp "
+	   "formats."),
+	"Richard Laager <rlaager@users.sf.net>",          /**< author         */
+	GAIM_WEBSITE,                                     /**< homepage       */
+
+	plugin_load,                                      /**< load           */
+	plugin_unload,                                    /**< unload         */
+	NULL,                                             /**< destroy        */
+
+	NULL,                                             /**< ui_info        */
+	NULL,                                             /**< extra_info     */
+	&prefs_info,                                      /**< prefs_info     */
+	NULL                                              /**< actions        */
+};
+
+static void
+init_plugin(GaimPlugin *plugin)
+{
+	gaim_prefs_add_none("/plugins/gtk");
+	gaim_prefs_add_none("/plugins/gtk/timestamp_format");
+
+	gaim_prefs_add_bool("/plugins/gtk/timestamp_format/force_24hr", TRUE);
+
+	gaim_prefs_add_none("/plugins/gtk/timestamp_format/use_dates");
+	gaim_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/conversation", "automatic");
+	gaim_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/log", "automatic");
+}
+
+GAIM_INIT_PLUGIN(timestamp_format, init_plugin, info)