| 216 |
216 |
| 217 static void |
217 static void |
| 218 menu_item_send_mail_activate_cb(GaimBlistNode *node, gpointer user_data) |
218 menu_item_send_mail_activate_cb(GaimBlistNode *node, gpointer user_data) |
| 219 { |
219 { |
| 220 GaimBuddy *buddy = (GaimBuddy *)node; |
220 GaimBuddy *buddy = (GaimBuddy *)node; |
| 221 EContact *contact; |
|
| 222 char *mail = NULL; |
221 char *mail = NULL; |
| 223 |
222 |
| 224 contact = gevo_search_buddy_in_contacts(buddy, NULL); |
223 mail = gevo_get_email_for_buddy(buddy); |
| 225 |
|
| 226 if (contact != NULL) |
|
| 227 { |
|
| 228 mail = g_strdup(e_contact_get(contact, E_CONTACT_EMAIL_1)); |
|
| 229 g_object_unref(contact); |
|
| 230 } |
|
| 231 else |
|
| 232 { |
|
| 233 GaimAccount *account = gaim_buddy_get_account(buddy); |
|
| 234 const char *prpl_id = gaim_account_get_protocol_id(account); |
|
| 235 |
|
| 236 if (!strcmp(prpl_id, "prpl-msn")) |
|
| 237 { |
|
| 238 mail = g_strdup(gaim_normalize(account, |
|
| 239 gaim_buddy_get_name(buddy))); |
|
| 240 } |
|
| 241 else if (!strcmp(prpl_id, "prpl-yahoo")) |
|
| 242 { |
|
| 243 mail = g_strdup_printf("%s@yahoo.com", |
|
| 244 gaim_normalize(account, |
|
| 245 gaim_buddy_get_name(buddy))); |
|
| 246 } |
|
| 247 } |
|
| 248 |
224 |
| 249 if (mail != NULL) |
225 if (mail != NULL) |
| 250 { |
226 { |
| 251 char *app = g_find_program_in_path("evolution"); |
227 char *app = g_find_program_in_path("evolution"); |
| 252 if (app != NULL) |
228 if (app != NULL) |
| 265 } |
241 } |
| 266 } |
242 } |
| 267 else |
243 else |
| 268 { |
244 { |
| 269 gaim_notify_error(NULL, NULL, _("Unable to send e-mail"), |
245 gaim_notify_error(NULL, NULL, _("Unable to send e-mail"), |
| 270 _("The specified buddy was not found in the Evolution Contacts.")); |
246 _("An e-mail address was not found for this buddy.")); |
| 271 } |
247 } |
| 272 } |
248 } |
| 273 |
249 |
| 274 static void |
250 static void |
| 275 blist_node_extended_menu_cb(GaimBlistNode *node, GList **menu) |
251 blist_node_extended_menu_cb(GaimBlistNode *node, GList **menu) |
| 276 { |
252 { |
| 277 GaimMenuAction *act; |
253 GaimMenuAction *act; |
| 278 GaimBuddy *buddy; |
254 GaimBuddy *buddy; |
| |
255 GaimAccount *account; |
| 279 EContact *contact; |
256 EContact *contact; |
| |
257 char *mail; |
| 280 |
258 |
| 281 if (!GAIM_BLIST_NODE_IS_BUDDY(node)) |
259 if (!GAIM_BLIST_NODE_IS_BUDDY(node)) |
| 282 return; |
260 return; |
| 283 |
261 |
| 284 buddy = (GaimBuddy *)node; |
262 buddy = (GaimBuddy *)node; |
| 285 |
263 account = gaim_buddy_get_account(buddy); |
| 286 if (!gevo_prpl_is_supported(gaim_buddy_get_account(buddy), buddy)) |
264 |
| |
265 if (!gevo_prpl_is_supported(account, buddy)) |
| 287 return; |
266 return; |
| 288 |
267 |
| 289 contact = gevo_search_buddy_in_contacts(buddy, NULL); |
268 contact = gevo_search_buddy_in_contacts(buddy, NULL); |
| 290 |
269 |
| 291 if (contact == NULL) |
270 if (contact == NULL) |
| 293 act = gaim_menu_action_new(_("Add to Address Book"), |
272 act = gaim_menu_action_new(_("Add to Address Book"), |
| 294 GAIM_CALLBACK(menu_item_activate_cb), |
273 GAIM_CALLBACK(menu_item_activate_cb), |
| 295 NULL, NULL); |
274 NULL, NULL); |
| 296 *menu = g_list_append(*menu, act); |
275 *menu = g_list_append(*menu, act); |
| 297 } |
276 } |
| 298 |
277 else |
| 299 act = gaim_menu_action_new(_("Send E-Mail"), |
278 g_object_unref(contact); |
| 300 GAIM_CALLBACK(menu_item_send_mail_activate_cb), |
279 |
| 301 NULL, NULL); |
280 mail = gevo_get_email_for_buddy(buddy); |
| 302 *menu = g_list_append(*menu, act); |
281 |
| |
282 if (mail != NULL) |
| |
283 { |
| |
284 act = gaim_menu_action_new(_("Send E-Mail"), |
| |
285 GAIM_CALLBACK(menu_item_send_mail_activate_cb), NULL, NULL); |
| |
286 *menu = g_list_append(*menu, act); |
| |
287 g_free(mail); |
| |
288 } |
| 303 } |
289 } |
| 304 |
290 |
| 305 /* TODO: Something in here leaks 1 reference to a bonobo object! */ |
291 /* TODO: Something in here leaks 1 reference to a bonobo object! */ |
| 306 static gboolean |
292 static gboolean |
| 307 load_timeout(gpointer data) |
293 load_timeout(gpointer data) |