comparison plugins/timestamp_format.c @ 12737:a1e241dd50b6

[gaim-migrate @ 15082] Conversation and Logging Message Timestamp Formatting... The idea here is that we should honor the user's locale for message timestamps in the conversation window and in the logs. I've added a signal and created a plugin that allows one to override this. The plugin is named "Message Timestamp Formats". Enabling that will by default change the timestamps back to the format we had before this commit. (That is to say, it forces the old format and ignores the locale.) The plugin also has options to show dates in the timestamps "Always", "In Chats", or "For Delayed Messages" (the default behavior). This addresses all requests for 12 hour timestamps, allows people to continue with the 24 hour timestamps we have, even if their locale says differently, enables plugin authors to override the message timestamp formats in any way they choose, and addresses requests for complete dates in logs. To recap, if you don't like the format string your locale has, enabled the "Message Timestamp Formats" plugin. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Thu, 05 Jan 2006 20:17:36 +0000
parents
children d26e3314c650
comparison
equal deleted inserted replaced
12736:f49d49444c68 12737:a1e241dd50b6
1 #include "internal.h"
2
3 #include "debug.h"
4 #include "log.h"
5 #include "plugin.h"
6 #include "version.h"
7
8 #include "gtkconv.h"
9 #include "gtkplugin.h"
10
11 static GaimPluginPrefFrame *
12 get_plugin_pref_frame(GaimPlugin *plugin)
13 {
14 GaimPluginPrefFrame *frame;
15 GaimPluginPref *ppref;
16
17 frame = gaim_plugin_pref_frame_new();
18
19 ppref = gaim_plugin_pref_new_with_label(_("Timestamp Format Options"));
20 gaim_plugin_pref_frame_add(frame, ppref);
21
22 ppref = gaim_plugin_pref_new_with_name_and_label(
23 "/plugins/gtk/timestamp_format/force_24hr",
24 _("_Force (traditional Gaim) 24-hour time format"));
25 gaim_plugin_pref_frame_add(frame, ppref);
26
27 ppref = gaim_plugin_pref_new_with_label(_("Show dates in..."));
28 gaim_plugin_pref_frame_add(frame, ppref);
29
30 ppref = gaim_plugin_pref_new_with_name_and_label(
31 "/plugins/gtk/timestamp_format/use_dates/conversation",
32 _("Co_nversations:"));
33 gaim_plugin_pref_set_type(ppref, GAIM_PLUGIN_PREF_CHOICE);
34 gaim_plugin_pref_add_choice(ppref, "For Delayed Messages", "automatic");
35 gaim_plugin_pref_add_choice(ppref, "In Chats", "chats");
36 gaim_plugin_pref_add_choice(ppref, "Always", "always");
37 gaim_plugin_pref_frame_add(frame, ppref);
38
39 ppref = gaim_plugin_pref_new_with_name_and_label(
40 "/plugins/gtk/timestamp_format/use_dates/log",
41 _("_Logs:"));
42 gaim_plugin_pref_set_type(ppref, GAIM_PLUGIN_PREF_CHOICE);
43 gaim_plugin_pref_add_choice(ppref, "For Delayed Messages", "automatic");
44 gaim_plugin_pref_add_choice(ppref, "In Chats", "chats");
45 gaim_plugin_pref_add_choice(ppref, "Always", "always");
46 gaim_plugin_pref_frame_add(frame, ppref);
47
48 return frame;
49 }
50
51 static char *timestamp_cb_common(GaimConversation *conv,
52 const struct tm *tm,
53 gboolean force,
54 const char *dates)
55 {
56 char buf[64];
57
58 g_return_val_if_fail(conv != NULL, NULL);
59 g_return_val_if_fail(tm != NULL, NULL);
60 g_return_val_if_fail(dates != NULL, NULL);
61
62 if (!strcmp(dates, "always") ||
63 (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT &&
64 !strcmp(dates, "chats")))
65 {
66 if (force)
67 strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm);
68 else
69 strftime(buf, sizeof(buf), "%x %X", tm);
70
71 return g_strdup(buf);
72 }
73
74 if (force)
75 {
76 strftime(buf, sizeof(buf), "%H:%M:%S", tm);
77 return g_strdup(buf);
78 }
79
80 return NULL;
81 }
82
83 static char *conversation_timestamp_cb(GaimConversation *conv,
84 const struct tm *tm, gpointer data)
85 {
86 gboolean force = gaim_prefs_get_bool(
87 "/plugins/gtk/timestamp_format/force_24hr");
88 const char *dates = gaim_prefs_get_string(
89 "/plugins/gtk/timestamp_format/use_dates/conversation");
90 return timestamp_cb_common(conv, tm, force, dates);
91 }
92
93 static char *log_timestamp_cb(GaimLog *log,
94 const struct tm *tm, gpointer data)
95 {
96 gboolean force = gaim_prefs_get_bool(
97 "/plugins/gtk/timestamp_format/force_24hr");
98 const char *dates = gaim_prefs_get_string(
99 "/plugins/gtk/timestamp_format/use_dates/log");
100
101 if (log->type == GAIM_LOG_SYSTEM)
102 {
103 if (force)
104 {
105 char buf[64];
106 strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm);
107 return g_strdup(buf);
108 }
109 else
110 return NULL;
111 }
112
113 return timestamp_cb_common(log->conv, tm, force, dates);
114 }
115
116 static gboolean
117 plugin_load(GaimPlugin *plugin)
118 {
119 gaim_signal_connect(gaim_gtk_conversations_get_handle(), "conversation-timestamp",
120 plugin, GAIM_CALLBACK(conversation_timestamp_cb), NULL);
121 gaim_signal_connect(gaim_log_get_handle(), "log-timestamp",
122 plugin, GAIM_CALLBACK(log_timestamp_cb), NULL);
123 return TRUE;
124 }
125
126 static gboolean
127 plugin_unload(GaimPlugin *plugin)
128 {
129 return TRUE;
130 }
131
132 static GaimPluginUiInfo prefs_info = {
133 get_plugin_pref_frame,
134 0, /* page num (Reserved) */
135 NULL /* frame (Reserved) */
136 };
137
138 static GaimPluginInfo info =
139 {
140 GAIM_PLUGIN_MAGIC,
141 GAIM_MAJOR_VERSION,
142 GAIM_MINOR_VERSION,
143 GAIM_PLUGIN_STANDARD, /**< type */
144 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */
145 0, /**< flags */
146 NULL, /**< dependencies */
147 GAIM_PRIORITY_DEFAULT, /**< priority */
148
149 NULL, /**< id */
150 N_("Message Timestamp Formats"), /**< name */
151 VERSION, /**< version */
152 /** summary */
153 N_("Customizes the message timestamp formats."),
154 /** description */
155 N_("This plugin allows the user to customize "
156 "conversation and logging message timestamp "
157 "formats."),
158 "Richard Laager <rlaager@users.sf.net>", /**< author */
159 GAIM_WEBSITE, /**< homepage */
160
161 plugin_load, /**< load */
162 plugin_unload, /**< unload */
163 NULL, /**< destroy */
164
165 NULL, /**< ui_info */
166 NULL, /**< extra_info */
167 &prefs_info, /**< prefs_info */
168 NULL /**< actions */
169 };
170
171 static void
172 init_plugin(GaimPlugin *plugin)
173 {
174 gaim_prefs_add_none("/plugins/gtk");
175 gaim_prefs_add_none("/plugins/gtk/timestamp_format");
176
177 gaim_prefs_add_bool("/plugins/gtk/timestamp_format/force_24hr", TRUE);
178
179 gaim_prefs_add_none("/plugins/gtk/timestamp_format/use_dates");
180 gaim_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/conversation", "automatic");
181 gaim_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/log", "automatic");
182 }
183
184 GAIM_INIT_PLUGIN(timestamp_format, init_plugin, info)