Mercurial > pidgin.yaz
comparison pidgin/plugins/timestamp_format.c @ 30191:446f208e5765
timestamp formats: Allow forcing 12-hour time formats. Closes #11667.
Patch from Jonathan "jemaltz" Maltz. I modified it a bit and changed
the preference from an int-enum to a string.
committer: Paul Aurich <paul@darkrain42.org>
author | jemaltz@gmail.com |
---|---|
date | Sat, 24 Apr 2010 23:06:17 +0000 |
parents | 4e7a9940627e |
children | 43c58f23c4b0 |
comparison
equal
deleted
inserted
replaced
30189:53dd827e6bb2 | 30191:446f208e5765 |
---|---|
10 #include "gtkplugin.h" | 10 #include "gtkplugin.h" |
11 #include "gtkimhtml.h" | 11 #include "gtkimhtml.h" |
12 | 12 |
13 #include <time.h> | 13 #include <time.h> |
14 | 14 |
15 static const char *format_12hour_hour(const struct tm *tm) | |
16 { | |
17 static char hr[3]; | |
18 int hour = tm->tm_hour % 12; | |
19 if (hour == 0) | |
20 hour = 12; | |
21 | |
22 g_snprintf(hr, sizeof(hr), "%d", hour); | |
23 return hr; | |
24 } | |
25 | |
15 static PurplePluginPrefFrame * | 26 static PurplePluginPrefFrame * |
16 get_plugin_pref_frame(PurplePlugin *plugin) | 27 get_plugin_pref_frame(PurplePlugin *plugin) |
17 { | 28 { |
18 PurplePluginPrefFrame *frame; | 29 PurplePluginPrefFrame *frame; |
19 PurplePluginPref *ppref; | 30 PurplePluginPref *ppref; |
22 frame = purple_plugin_pref_frame_new(); | 33 frame = purple_plugin_pref_frame_new(); |
23 | 34 |
24 ppref = purple_plugin_pref_new_with_label(_("Timestamp Format Options")); | 35 ppref = purple_plugin_pref_new_with_label(_("Timestamp Format Options")); |
25 purple_plugin_pref_frame_add(frame, ppref); | 36 purple_plugin_pref_frame_add(frame, ppref); |
26 | 37 |
27 tmp = g_strdup_printf(_("_Force 24-hour time format")); | 38 tmp = g_strdup_printf(_("_Force timestamp format:")); |
28 ppref = purple_plugin_pref_new_with_name_and_label( | 39 ppref = purple_plugin_pref_new_with_name_and_label( |
29 "/plugins/gtk/timestamp_format/force_24hr", | 40 "/plugins/gtk/timestamp_format/force", |
30 tmp); | 41 tmp); |
42 purple_plugin_pref_set_type(ppref, PURPLE_PLUGIN_PREF_CHOICE); | |
43 purple_plugin_pref_add_choice(ppref, _("Use system default"), "default"); | |
44 purple_plugin_pref_add_choice(ppref, _("12 hour time format"), "force12"); | |
45 purple_plugin_pref_add_choice(ppref, _("24 hour time format"), "force24"); | |
31 purple_plugin_pref_frame_add(frame, ppref); | 46 purple_plugin_pref_frame_add(frame, ppref); |
32 g_free(tmp); | 47 g_free(tmp); |
33 | 48 |
34 ppref = purple_plugin_pref_new_with_label(_("Show dates in...")); | 49 ppref = purple_plugin_pref_new_with_label(_("Show dates in...")); |
35 purple_plugin_pref_frame_add(frame, ppref); | 50 purple_plugin_pref_frame_add(frame, ppref); |
56 } | 71 } |
57 | 72 |
58 static char *timestamp_cb_common(PurpleConversation *conv, | 73 static char *timestamp_cb_common(PurpleConversation *conv, |
59 time_t t, | 74 time_t t, |
60 gboolean show_date, | 75 gboolean show_date, |
61 gboolean force, | 76 const char *force, |
62 const char *dates, | 77 const char *dates, |
63 gboolean parens) | 78 gboolean parens) |
64 { | 79 { |
80 struct tm *tm; | |
81 | |
65 g_return_val_if_fail(dates != NULL, NULL); | 82 g_return_val_if_fail(dates != NULL, NULL); |
83 | |
84 tm = localtime(&t); | |
66 | 85 |
67 if (show_date || | 86 if (show_date || |
68 !strcmp(dates, "always") || | 87 !strcmp(dates, "always") || |
69 (conv != NULL && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT && !strcmp(dates, "chats"))) | 88 (conv != NULL && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT && !strcmp(dates, "chats"))) |
70 { | 89 { |
71 struct tm *tm = localtime(&t); | 90 if (g_str_equal(force, "force24")) |
72 if (force) | |
73 return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_utf8_strftime("%Y-%m-%d %H:%M:%S", tm), parens ? ")" : ""); | 91 return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_utf8_strftime("%Y-%m-%d %H:%M:%S", tm), parens ? ")" : ""); |
74 else | 92 else if (g_str_equal(force, "force12")) { |
93 char *date = g_strdup_printf("%s", purple_utf8_strftime("%Y-%m-%d ", tm)); | |
94 char *remtime = g_strdup_printf("%s", purple_utf8_strftime(":%M:%S %p", tm)); | |
95 const char *hour = format_12hour_hour(tm); | |
96 char *output; | |
97 | |
98 output = g_strdup_printf("%s%s%s%s%s", | |
99 parens ? "(" : "", date, | |
100 hour, remtime, parens ? ")" : ""); | |
101 | |
102 g_free(date); | |
103 g_free(remtime); | |
104 | |
105 return output; | |
106 } else | |
75 return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_date_format_long(tm), parens ? ")" : ""); | 107 return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_date_format_long(tm), parens ? ")" : ""); |
76 } | 108 } |
77 | 109 |
78 if (force) | 110 if (g_str_equal(force, "force24")) |
79 { | |
80 struct tm *tm = localtime(&t); | |
81 return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_utf8_strftime("%H:%M:%S", tm), parens ? ")" : ""); | 111 return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_utf8_strftime("%H:%M:%S", tm), parens ? ")" : ""); |
112 else if (g_str_equal(force, "force12")) { | |
113 const char *hour = format_12hour_hour(tm); | |
114 char *remtime = g_strdup_printf("%s", purple_utf8_strftime(":%M:%S %p", tm)); | |
115 char *output = g_strdup_printf("%s%s%s%s", parens ? "(" : "", hour, remtime, parens ? ")" : ""); | |
116 | |
117 g_free(remtime); | |
118 | |
119 return output; | |
82 } | 120 } |
83 | 121 |
84 return NULL; | 122 return NULL; |
85 } | 123 } |
86 | 124 |
87 static char *conversation_timestamp_cb(PurpleConversation *conv, | 125 static char *conversation_timestamp_cb(PurpleConversation *conv, |
88 time_t t, gboolean show_date, gpointer data) | 126 time_t t, gboolean show_date, gpointer data) |
89 { | 127 { |
90 gboolean force = purple_prefs_get_bool( | 128 const char *force = purple_prefs_get_string( |
91 "/plugins/gtk/timestamp_format/force_24hr"); | 129 "/plugins/gtk/timestamp_format/force"); |
92 const char *dates = purple_prefs_get_string( | 130 const char *dates = purple_prefs_get_string( |
93 "/plugins/gtk/timestamp_format/use_dates/conversation"); | 131 "/plugins/gtk/timestamp_format/use_dates/conversation"); |
94 | 132 |
95 g_return_val_if_fail(conv != NULL, NULL); | 133 g_return_val_if_fail(conv != NULL, NULL); |
96 | 134 |
97 return timestamp_cb_common(conv, t, show_date, force, dates, TRUE); | 135 return timestamp_cb_common(conv, t, show_date, force, dates, TRUE); |
98 } | 136 } |
99 | 137 |
100 static char *log_timestamp_cb(PurpleLog *log, time_t t, gboolean show_date, gpointer data) | 138 static char *log_timestamp_cb(PurpleLog *log, time_t t, gboolean show_date, gpointer data) |
101 { | 139 { |
102 gboolean force = purple_prefs_get_bool( | 140 const char *force = purple_prefs_get_string( |
103 "/plugins/gtk/timestamp_format/force_24hr"); | 141 "/plugins/gtk/timestamp_format/force"); |
104 const char *dates = purple_prefs_get_string( | 142 const char *dates = purple_prefs_get_string( |
105 "/plugins/gtk/timestamp_format/use_dates/log"); | 143 "/plugins/gtk/timestamp_format/use_dates/log"); |
106 | 144 |
107 g_return_val_if_fail(log != NULL, NULL); | 145 g_return_val_if_fail(log != NULL, NULL); |
108 | 146 |
262 init_plugin(PurplePlugin *plugin) | 300 init_plugin(PurplePlugin *plugin) |
263 { | 301 { |
264 purple_prefs_add_none("/plugins/gtk"); | 302 purple_prefs_add_none("/plugins/gtk"); |
265 purple_prefs_add_none("/plugins/gtk/timestamp_format"); | 303 purple_prefs_add_none("/plugins/gtk/timestamp_format"); |
266 | 304 |
267 purple_prefs_add_bool("/plugins/gtk/timestamp_format/force_24hr", TRUE); | 305 if (!purple_prefs_exists("/plugins/gtk/timestamp_format/force") && |
306 purple_prefs_exists("/plugins/gtk/timestamp_format/force_24hr")) | |
307 { | |
308 if (purple_prefs_get_bool( | |
309 "/plugins/gtk/timestamp_format/force_24hr")) | |
310 purple_prefs_add_string("/plugins/gtk/timestamp_format/force", "force24"); | |
311 else | |
312 purple_prefs_add_string("/plugins/gtk/timestamp_format/force", "force12"); | |
313 } | |
314 else | |
315 purple_prefs_add_string("/plugins/gtk/timestamp_format/force", "default"); | |
268 | 316 |
269 purple_prefs_add_none("/plugins/gtk/timestamp_format/use_dates"); | 317 purple_prefs_add_none("/plugins/gtk/timestamp_format/use_dates"); |
270 purple_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/conversation", "automatic"); | 318 purple_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/conversation", "automatic"); |
271 purple_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/log", "automatic"); | 319 purple_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/log", "automatic"); |
272 } | 320 } |