Mercurial > pidgin.yaz
annotate finch/plugins/gnthistory.c @ 18798:ed1def07d86e
Refactor the bonjour mdns implementation abstraction in preparation for the avahi implementation. Also fix alias assignment from the server to populate the server alias instead of the local alias.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Sun, 05 Aug 2007 02:44:53 +0000 |
parents | 30829e806dae |
children | 44b4e8bd759b |
rev | line source |
---|---|
15818 | 1 /** |
2 * @file gnthistory.c Show log from previous conversation | |
3 * | |
4 * Copyright (C) 2006 Sadrul Habib Chowdhury <sadrul@users.sourceforge.net> | |
5 * | |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 */ | |
20 | |
21 /* Ripped from gtk/plugins/history.c */ | |
22 | |
23 #include "internal.h" | |
24 | |
25 #include "conversation.h" | |
26 #include "debug.h" | |
27 #include "log.h" | |
28 #include "notify.h" | |
29 #include "prefs.h" | |
30 #include "signals.h" | |
31 #include "util.h" | |
32 #include "version.h" | |
33 | |
34 #include "gntplugin.h" | |
35 | |
36 #define HISTORY_PLUGIN_ID "gnt-history" | |
37 | |
38 #define HISTORY_SIZE (4 * 1024) | |
39 | |
15823 | 40 static void historize(PurpleConversation *c) |
15818 | 41 { |
15823 | 42 PurpleAccount *account = purple_conversation_get_account(c); |
43 const char *name = purple_conversation_get_name(c); | |
44 PurpleConversationType convtype; | |
15818 | 45 GList *logs = NULL; |
46 const char *alias = name; | |
15823 | 47 PurpleLogReadFlags flags; |
15818 | 48 char *history; |
49 char *header; | |
15823 | 50 PurpleMessageFlags mflag; |
15818 | 51 |
15823 | 52 convtype = purple_conversation_get_type(c); |
53 if (convtype == PURPLE_CONV_TYPE_IM) | |
15818 | 54 { |
55 GSList *buddies; | |
56 GSList *cur; | |
57 | |
58 /* If we're not logging, don't show anything. | |
59 * Otherwise, we might show a very old log. */ | |
16427
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15823
diff
changeset
|
60 if (!purple_prefs_get_bool("/purple/logging/log_ims")) |
15818 | 61 return; |
62 | |
63 /* Find buddies for this conversation. */ | |
15823 | 64 buddies = purple_find_buddies(account, name); |
15818 | 65 |
66 /* If we found at least one buddy, save the first buddy's alias. */ | |
67 if (buddies != NULL) | |
15823 | 68 alias = purple_buddy_get_contact_alias((PurpleBuddy *)buddies->data); |
15818 | 69 |
70 for (cur = buddies; cur != NULL; cur = cur->next) | |
71 { | |
15823 | 72 PurpleBlistNode *node = cur->data; |
15818 | 73 if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL))) |
74 { | |
15823 | 75 PurpleBlistNode *node2; |
15818 | 76 |
15823 | 77 alias = purple_buddy_get_contact_alias((PurpleBuddy *)node); |
15818 | 78 |
79 /* We've found a buddy that matches this conversation. It's part of a | |
15823 | 80 * PurpleContact with more than one PurpleBuddy. Loop through the PurpleBuddies |
15818 | 81 * in the contact and get all the logs. */ |
82 for (node2 = node->parent->child ; node2 != NULL ; node2 = node2->next) | |
83 { | |
84 logs = g_list_concat( | |
15823 | 85 purple_log_get_logs(PURPLE_LOG_IM, |
86 purple_buddy_get_name((PurpleBuddy *)node2), | |
87 purple_buddy_get_account((PurpleBuddy *)node2)), | |
15818 | 88 logs); |
89 } | |
90 break; | |
91 } | |
92 } | |
93 g_slist_free(buddies); | |
94 | |
95 if (logs == NULL) | |
15823 | 96 logs = purple_log_get_logs(PURPLE_LOG_IM, name, account); |
15818 | 97 else |
15823 | 98 logs = g_list_sort(logs, purple_log_compare); |
15818 | 99 } |
15823 | 100 else if (convtype == PURPLE_CONV_TYPE_CHAT) |
15818 | 101 { |
102 /* If we're not logging, don't show anything. | |
103 * Otherwise, we might show a very old log. */ | |
16427
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15823
diff
changeset
|
104 if (!purple_prefs_get_bool("/purple/logging/log_chats")) |
15818 | 105 return; |
106 | |
15823 | 107 logs = purple_log_get_logs(PURPLE_LOG_CHAT, name, account); |
15818 | 108 } |
109 | |
110 if (logs == NULL) | |
111 return; | |
112 | |
15823 | 113 mflag = PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_DELAYED; |
114 history = purple_log_read((PurpleLog*)logs->data, &flags); | |
15818 | 115 |
116 header = g_strdup_printf(_("<b>Conversation with %s on %s:</b><br>"), alias, | |
15823 | 117 purple_date_format_full(localtime(&((PurpleLog *)logs->data)->time))); |
118 purple_conversation_write(c, "", header, mflag, time(NULL)); | |
15818 | 119 g_free(header); |
120 | |
15823 | 121 if (flags & PURPLE_LOG_READ_NO_NEWLINE) |
122 purple_str_strip_char(history, '\n'); | |
123 purple_conversation_write(c, "", history, mflag, time(NULL)); | |
15818 | 124 g_free(history); |
125 | |
15823 | 126 purple_conversation_write(c, "", "<hr>", mflag, time(NULL)); |
15818 | 127 |
15823 | 128 g_list_foreach(logs, (GFunc)purple_log_free, NULL); |
15818 | 129 g_list_free(logs); |
130 } | |
131 | |
132 static void | |
15823 | 133 history_prefs_check(PurplePlugin *plugin) |
15818 | 134 { |
16427
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15823
diff
changeset
|
135 if (!purple_prefs_get_bool("/purple/logging/log_ims") && |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15823
diff
changeset
|
136 !purple_prefs_get_bool("/purple/logging/log_chats")) |
15818 | 137 { |
15823 | 138 purple_notify_warning(plugin, NULL, _("History Plugin Requires Logging"), |
15818 | 139 _("Logging can be enabled from Tools -> Preferences -> Logging.\n\n" |
140 "Enabling logs for instant messages and/or chats will activate " | |
141 "history for the same conversation type(s).")); | |
142 } | |
143 } | |
144 | |
15823 | 145 static void history_prefs_cb(const char *name, PurplePrefType type, |
15818 | 146 gconstpointer val, gpointer data) |
147 { | |
15823 | 148 history_prefs_check((PurplePlugin *)data); |
15818 | 149 } |
150 | |
151 static gboolean | |
15823 | 152 plugin_load(PurplePlugin *plugin) |
15818 | 153 { |
15823 | 154 purple_signal_connect(purple_conversations_get_handle(), |
15818 | 155 "conversation-created", |
15823 | 156 plugin, PURPLE_CALLBACK(historize), NULL); |
15818 | 157 |
16427
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15823
diff
changeset
|
158 purple_prefs_connect_callback(plugin, "/purple/logging/log_ims", |
15818 | 159 history_prefs_cb, plugin); |
16427
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15823
diff
changeset
|
160 purple_prefs_connect_callback(plugin, "/purple/logging/log_chats", |
15818 | 161 history_prefs_cb, plugin); |
162 | |
163 history_prefs_check(plugin); | |
164 | |
165 return TRUE; | |
166 } | |
167 | |
15823 | 168 static PurplePluginInfo info = |
15818 | 169 { |
15823 | 170 PURPLE_PLUGIN_MAGIC, |
171 PURPLE_MAJOR_VERSION, | |
172 PURPLE_MINOR_VERSION, | |
173 PURPLE_PLUGIN_STANDARD, | |
15818 | 174 NULL, |
175 0, | |
176 NULL, | |
15823 | 177 PURPLE_PRIORITY_DEFAULT, |
15818 | 178 HISTORY_PLUGIN_ID, |
179 N_("GntHistory"), | |
180 VERSION, | |
181 N_("Shows recently logged conversations in new conversations."), | |
182 N_("When a new conversation is opened this plugin will insert " | |
183 "the last conversation into the current conversation."), | |
184 "Sean Egan <seanegan@gmail.com>\n" | |
185 "Sadrul H Chowdhury <sadrul@users.sourceforge.net>", | |
15823 | 186 PURPLE_WEBSITE, |
15818 | 187 plugin_load, |
188 NULL, | |
189 NULL, | |
190 NULL, | |
191 NULL, | |
192 NULL, | |
16677
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16427
diff
changeset
|
193 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16427
diff
changeset
|
194 |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16427
diff
changeset
|
195 /* padding */ |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16427
diff
changeset
|
196 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16427
diff
changeset
|
197 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16427
diff
changeset
|
198 NULL, |
15818 | 199 NULL |
200 }; | |
201 | |
202 static void | |
15823 | 203 init_plugin(PurplePlugin *plugin) |
15818 | 204 { |
205 } | |
206 | |
15823 | 207 PURPLE_INIT_PLUGIN(gnthistory, init_plugin, info) |
15818 | 208 |