| 1 #include "internal.h" |
|
| 2 |
|
| 3 #include "debug.h" |
|
| 4 #include "log.h" |
|
| 5 #include "plugin.h" |
|
| 6 #include "util.h" |
|
| 7 #include "version.h" |
|
| 8 |
|
| 9 #include "gtkconv.h" |
|
| 10 #include "gtkplugin.h" |
|
| 11 |
|
| 12 #include <time.h> |
|
| 13 |
|
| 14 static GaimPluginPrefFrame * |
|
| 15 get_plugin_pref_frame(GaimPlugin *plugin) |
|
| 16 { |
|
| 17 GaimPluginPrefFrame *frame; |
|
| 18 GaimPluginPref *ppref; |
|
| 19 |
|
| 20 frame = gaim_plugin_pref_frame_new(); |
|
| 21 |
|
| 22 ppref = gaim_plugin_pref_new_with_label(_("Timestamp Format Options")); |
|
| 23 gaim_plugin_pref_frame_add(frame, ppref); |
|
| 24 |
|
| 25 ppref = gaim_plugin_pref_new_with_name_and_label( |
|
| 26 "/plugins/gtk/timestamp_format/force_24hr", |
|
| 27 _("_Force (traditional Gaim) 24-hour time format")); |
|
| 28 gaim_plugin_pref_frame_add(frame, ppref); |
|
| 29 |
|
| 30 ppref = gaim_plugin_pref_new_with_label(_("Show dates in...")); |
|
| 31 gaim_plugin_pref_frame_add(frame, ppref); |
|
| 32 |
|
| 33 ppref = gaim_plugin_pref_new_with_name_and_label( |
|
| 34 "/plugins/gtk/timestamp_format/use_dates/conversation", |
|
| 35 _("Co_nversations:")); |
|
| 36 gaim_plugin_pref_set_type(ppref, GAIM_PLUGIN_PREF_CHOICE); |
|
| 37 gaim_plugin_pref_add_choice(ppref, _("For delayed messages"), "automatic"); |
|
| 38 gaim_plugin_pref_add_choice(ppref, _("For delayed messages and in chats"), "chats"); |
|
| 39 gaim_plugin_pref_add_choice(ppref, _("Always"), "always"); |
|
| 40 gaim_plugin_pref_frame_add(frame, ppref); |
|
| 41 |
|
| 42 ppref = gaim_plugin_pref_new_with_name_and_label( |
|
| 43 "/plugins/gtk/timestamp_format/use_dates/log", |
|
| 44 _("_Message Logs:")); |
|
| 45 gaim_plugin_pref_set_type(ppref, GAIM_PLUGIN_PREF_CHOICE); |
|
| 46 gaim_plugin_pref_add_choice(ppref, _("For delayed messages"), "automatic"); |
|
| 47 gaim_plugin_pref_add_choice(ppref, _("For delayed messages and in chats"), "chats"); |
|
| 48 gaim_plugin_pref_add_choice(ppref, _("Always"), "always"); |
|
| 49 gaim_plugin_pref_frame_add(frame, ppref); |
|
| 50 |
|
| 51 return frame; |
|
| 52 } |
|
| 53 |
|
| 54 static char *timestamp_cb_common(GaimConversation *conv, |
|
| 55 time_t t, |
|
| 56 gboolean force, |
|
| 57 const char *dates) |
|
| 58 { |
|
| 59 struct tm *tm = localtime(&t); |
|
| 60 g_return_val_if_fail(conv != NULL, NULL); |
|
| 61 g_return_val_if_fail(dates != NULL, NULL); |
|
| 62 |
|
| 63 if (!strcmp(dates, "always") || |
|
| 64 (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT && |
|
| 65 !strcmp(dates, "chats")) || |
|
| 66 (time(NULL) > (mktime(tm) + 20*60))) |
|
| 67 { |
|
| 68 if (force) |
|
| 69 return g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", tm)); |
|
| 70 else |
|
| 71 return g_strdup(gaim_date_format_long(tm)); |
|
| 72 } |
|
| 73 |
|
| 74 if (force) |
|
| 75 return g_strdup(gaim_utf8_strftime("%H:%M:%S", tm)); |
|
| 76 |
|
| 77 return NULL; |
|
| 78 } |
|
| 79 |
|
| 80 static char *conversation_timestamp_cb(GaimConversation *conv, |
|
| 81 time_t t, gpointer data) |
|
| 82 { |
|
| 83 gboolean force = gaim_prefs_get_bool( |
|
| 84 "/plugins/gtk/timestamp_format/force_24hr"); |
|
| 85 const char *dates = gaim_prefs_get_string( |
|
| 86 "/plugins/gtk/timestamp_format/use_dates/conversation"); |
|
| 87 |
|
| 88 g_return_val_if_fail(conv != NULL, NULL); |
|
| 89 |
|
| 90 return timestamp_cb_common(conv, t, force, dates); |
|
| 91 } |
|
| 92 |
|
| 93 static char *log_timestamp_cb(GaimLog *log, time_t t, gpointer data) |
|
| 94 { |
|
| 95 gboolean force = gaim_prefs_get_bool( |
|
| 96 "/plugins/gtk/timestamp_format/force_24hr"); |
|
| 97 const char *dates = gaim_prefs_get_string( |
|
| 98 "/plugins/gtk/timestamp_format/use_dates/log"); |
|
| 99 |
|
| 100 g_return_val_if_fail(log != NULL, NULL); |
|
| 101 |
|
| 102 if (log->type == GAIM_LOG_SYSTEM) |
|
| 103 { |
|
| 104 if (force) { |
|
| 105 struct tm *tm = localtime(&t); |
|
| 106 return g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", tm)); |
|
| 107 } else { |
|
| 108 return NULL; |
|
| 109 } |
|
| 110 } |
|
| 111 |
|
| 112 return timestamp_cb_common(log->conv, t, force, dates); |
|
| 113 } |
|
| 114 |
|
| 115 static gboolean |
|
| 116 plugin_load(GaimPlugin *plugin) |
|
| 117 { |
|
| 118 gaim_signal_connect(gaim_gtk_conversations_get_handle(), "conversation-timestamp", |
|
| 119 plugin, GAIM_CALLBACK(conversation_timestamp_cb), NULL); |
|
| 120 gaim_signal_connect(gaim_log_get_handle(), "log-timestamp", |
|
| 121 plugin, GAIM_CALLBACK(log_timestamp_cb), NULL); |
|
| 122 return TRUE; |
|
| 123 } |
|
| 124 |
|
| 125 static gboolean |
|
| 126 plugin_unload(GaimPlugin *plugin) |
|
| 127 { |
|
| 128 return TRUE; |
|
| 129 } |
|
| 130 |
|
| 131 static GaimPluginUiInfo prefs_info = { |
|
| 132 get_plugin_pref_frame, |
|
| 133 0, /* page num (Reserved) */ |
|
| 134 NULL /* frame (Reserved) */ |
|
| 135 }; |
|
| 136 |
|
| 137 static GaimPluginInfo info = |
|
| 138 { |
|
| 139 GAIM_PLUGIN_MAGIC, |
|
| 140 GAIM_MAJOR_VERSION, |
|
| 141 GAIM_MINOR_VERSION, |
|
| 142 GAIM_PLUGIN_STANDARD, /**< type */ |
|
| 143 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ |
|
| 144 0, /**< flags */ |
|
| 145 NULL, /**< dependencies */ |
|
| 146 GAIM_PRIORITY_DEFAULT, /**< priority */ |
|
| 147 |
|
| 148 NULL, /**< id */ |
|
| 149 N_("Message Timestamp Formats"), /**< name */ |
|
| 150 VERSION, /**< version */ |
|
| 151 /** summary */ |
|
| 152 N_("Customizes the message timestamp formats."), |
|
| 153 /** description */ |
|
| 154 N_("This plugin allows the user to customize " |
|
| 155 "conversation and logging message timestamp " |
|
| 156 "formats."), |
|
| 157 "Richard Laager <rlaager@users.sf.net>", /**< author */ |
|
| 158 GAIM_WEBSITE, /**< homepage */ |
|
| 159 |
|
| 160 plugin_load, /**< load */ |
|
| 161 plugin_unload, /**< unload */ |
|
| 162 NULL, /**< destroy */ |
|
| 163 |
|
| 164 NULL, /**< ui_info */ |
|
| 165 NULL, /**< extra_info */ |
|
| 166 &prefs_info, /**< prefs_info */ |
|
| 167 NULL /**< actions */ |
|
| 168 }; |
|
| 169 |
|
| 170 static void |
|
| 171 init_plugin(GaimPlugin *plugin) |
|
| 172 { |
|
| 173 gaim_prefs_add_none("/plugins/gtk"); |
|
| 174 gaim_prefs_add_none("/plugins/gtk/timestamp_format"); |
|
| 175 |
|
| 176 gaim_prefs_add_bool("/plugins/gtk/timestamp_format/force_24hr", TRUE); |
|
| 177 |
|
| 178 gaim_prefs_add_none("/plugins/gtk/timestamp_format/use_dates"); |
|
| 179 gaim_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/conversation", "automatic"); |
|
| 180 gaim_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/log", "automatic"); |
|
| 181 } |
|
| 182 |
|
| 183 GAIM_INIT_PLUGIN(timestamp_format, init_plugin, info) |
|