| |
1 /* |
| |
2 * Evolution integration plugin for Gaim |
| |
3 * |
| |
4 * Copyright (C) 2003 Christian Hammond. |
| |
5 * |
| |
6 * This program is free software; you can redistribute it and/or |
| |
7 * modify it under the terms of the GNU General Public License as |
| |
8 * published by the Free Software Foundation; either version 2 of the |
| |
9 * License, or (at your option) any later version. |
| |
10 * |
| |
11 * This program is distributed in the hope that it will be useful, but |
| |
12 * WITHOUT ANY WARRANTY; without even the implied warranty of |
| |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| |
14 * 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 |
| |
19 * 02111-1307, USA. |
| |
20 */ |
| |
21 #include "internal.h" |
| |
22 #include "gtkblist.h" |
| |
23 #include "gtkgaim.h" |
| |
24 #include "gtkutils.h" |
| |
25 |
| |
26 #include "gevolution.h" |
| |
27 |
| |
28 void |
| |
29 gevo_add_buddy(GaimAccount *account, const char *group_name, |
| |
30 const char *screenname, const char *alias) |
| |
31 { |
| |
32 GaimConversation *conv = NULL; |
| |
33 GaimBuddy *buddy; |
| |
34 GaimGroup *group; |
| |
35 |
| |
36 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, screenname, account); |
| |
37 |
| |
38 if ((group = gaim_find_group(group_name)) == NULL) |
| |
39 { |
| |
40 group = gaim_group_new(group_name); |
| |
41 gaim_blist_add_group(group, NULL); |
| |
42 } |
| |
43 |
| |
44 buddy = gaim_buddy_new(account, screenname, alias); |
| |
45 gaim_blist_add_buddy(buddy, NULL, group, NULL); |
| |
46 gaim_account_add_buddy(account, buddy); |
| |
47 |
| |
48 if (conv != NULL) |
| |
49 { |
| |
50 gaim_buddy_icon_update(gaim_conv_im_get_icon(GAIM_CONV_IM(conv))); |
| |
51 gaim_conversation_update(conv, GAIM_CONV_UPDATE_ADD); |
| |
52 } |
| |
53 } |
| |
54 |
| |
55 GList * |
| |
56 gevo_get_groups(void) |
| |
57 { |
| |
58 GList *list = NULL; |
| |
59 GaimGroup *g; |
| |
60 GaimBlistNode *gnode; |
| |
61 |
| |
62 if (gaim_get_blist()->root == NULL) |
| |
63 { |
| |
64 list = g_list_append(list, (gpointer)_("Buddies")); |
| |
65 } |
| |
66 else |
| |
67 { |
| |
68 for (gnode = gaim_get_blist()->root; |
| |
69 gnode != NULL; |
| |
70 gnode = gnode->next) |
| |
71 { |
| |
72 if (GAIM_BLIST_NODE_IS_GROUP(gnode)) |
| |
73 { |
| |
74 g = (GaimGroup *)gnode; |
| |
75 list = g_list_append(list, g->name); |
| |
76 } |
| |
77 } |
| |
78 } |
| |
79 |
| |
80 return list; |
| |
81 } |
| |
82 |
| |
83 EContactField |
| |
84 gevo_prpl_get_field(GaimAccount *account, GaimBuddy *buddy) |
| |
85 { |
| |
86 EContactField protocol_field = 0; |
| |
87 const char *protocol_id; |
| |
88 |
| |
89 g_return_val_if_fail(account != NULL, 0); |
| |
90 |
| |
91 protocol_id = gaim_account_get_protocol_id(account); |
| |
92 |
| |
93 if (!strcmp(protocol_id, "prpl-oscar")) |
| |
94 { |
| |
95 GaimConnection *gc; |
| |
96 GaimPluginProtocolInfo *prpl_info; |
| |
97 |
| |
98 gc = gaim_account_get_connection(account); |
| |
99 |
| |
100 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
| |
101 |
| |
102 if (!strcmp("aim", prpl_info->list_icon(account, buddy))) |
| |
103 { |
| |
104 protocol_field = E_CONTACT_IM_AIM; |
| |
105 } |
| |
106 else |
| |
107 protocol_field = E_CONTACT_IM_ICQ; |
| |
108 } |
| |
109 else if (!strcmp(protocol_id, "prpl-msn")) |
| |
110 protocol_field = E_CONTACT_IM_MSN; |
| |
111 else if (!strcmp(protocol_id, "prpl-yahoo")) |
| |
112 protocol_field = E_CONTACT_IM_YAHOO; |
| |
113 else if (!strcmp(protocol_id, "prpl-jabber")) |
| |
114 protocol_field = E_CONTACT_IM_JABBER; |
| |
115 else if (!strcmp(protocol_id, "prpl-novell")) |
| |
116 protocol_field = E_CONTACT_IM_GROUPWISE; |
| |
117 |
| |
118 return protocol_field; |
| |
119 } |
| |
120 |
| |
121 gboolean |
| |
122 gevo_prpl_is_supported(GaimAccount *account, GaimBuddy *buddy) |
| |
123 { |
| |
124 return (gevo_prpl_get_field(account, buddy) != 0); |
| |
125 } |
| |
126 |
| |
127 gboolean |
| |
128 gevo_load_addressbook(const gchar* uri, EBook **book, GError **error) |
| |
129 { |
| |
130 gboolean result = FALSE; |
| |
131 |
| |
132 g_return_val_if_fail(book != NULL, FALSE); |
| |
133 |
| |
134 if (uri == NULL) |
| |
135 *book = e_book_new_system_addressbook(NULL); |
| |
136 else |
| |
137 *book = e_book_new_from_uri(uri, error); |
| |
138 |
| |
139 result = e_book_open(*book, FALSE, NULL); |
| |
140 |
| |
141 if (!result && *book != NULL) |
| |
142 { |
| |
143 g_object_unref(*book); |
| |
144 *book = NULL; |
| |
145 } |
| |
146 |
| |
147 return result; |
| |
148 } |
| |
149 |
| |
150 char * |
| |
151 gevo_get_email_for_buddy(GaimBuddy *buddy) |
| |
152 { |
| |
153 EContact *contact; |
| |
154 char *mail = NULL; |
| |
155 |
| |
156 contact = gevo_search_buddy_in_contacts(buddy, NULL); |
| |
157 |
| |
158 if (contact != NULL) |
| |
159 { |
| |
160 mail = g_strdup(e_contact_get(contact, E_CONTACT_EMAIL_1)); |
| |
161 g_object_unref(contact); |
| |
162 } |
| |
163 |
| |
164 if (mail == NULL) |
| |
165 { |
| |
166 GaimAccount *account = gaim_buddy_get_account(buddy); |
| |
167 const char *prpl_id = gaim_account_get_protocol_id(account); |
| |
168 |
| |
169 if (!strcmp(prpl_id, "prpl-msn")) |
| |
170 { |
| |
171 mail = g_strdup(gaim_normalize(account, |
| |
172 gaim_buddy_get_name(buddy))); |
| |
173 } |
| |
174 else if (!strcmp(prpl_id, "prpl-yahoo")) |
| |
175 { |
| |
176 mail = g_strdup_printf("%s@yahoo.com", |
| |
177 gaim_normalize(account, |
| |
178 gaim_buddy_get_name(buddy))); |
| |
179 } |
| |
180 } |
| |
181 |
| |
182 return mail; |
| |
183 } |