Mercurial > pidgin.yaz
comparison libpurple/protocols/bonjour/buddy.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 | 1faa319ab4c3 |
children | 83719d57a8ee |
comparison
equal
deleted
inserted
replaced
18796:95fe5195bf98 | 18798:ed1def07d86e |
---|---|
20 #include "internal.h" | 20 #include "internal.h" |
21 #include "buddy.h" | 21 #include "buddy.h" |
22 #include "account.h" | 22 #include "account.h" |
23 #include "blist.h" | 23 #include "blist.h" |
24 #include "bonjour.h" | 24 #include "bonjour.h" |
25 #include "mdns_interface.h" | |
25 #include "debug.h" | 26 #include "debug.h" |
26 | 27 |
27 /** | 28 /** |
28 * Creates a new buddy. | 29 * Creates a new buddy. |
29 */ | 30 */ |
32 { | 33 { |
33 BonjourBuddy *buddy = g_new0(BonjourBuddy, 1); | 34 BonjourBuddy *buddy = g_new0(BonjourBuddy, 1); |
34 | 35 |
35 buddy->account = account; | 36 buddy->account = account; |
36 buddy->name = g_strdup(name); | 37 buddy->name = g_strdup(name); |
38 | |
39 _mdns_init_buddy(buddy); | |
37 | 40 |
38 return buddy; | 41 return buddy; |
39 } | 42 } |
40 | 43 |
41 void | 44 void |
100 void | 103 void |
101 bonjour_buddy_add_to_purple(BonjourBuddy *bonjour_buddy) | 104 bonjour_buddy_add_to_purple(BonjourBuddy *bonjour_buddy) |
102 { | 105 { |
103 PurpleBuddy *buddy; | 106 PurpleBuddy *buddy; |
104 PurpleGroup *group; | 107 PurpleGroup *group; |
105 const char *status_id, *first, *last; | 108 PurpleAccount *account = bonjour_buddy->account; |
106 gchar *alias; | 109 const char *status_id, *first, *last, *old_hash, *new_hash; |
110 gchar *alias = NULL; | |
107 | 111 |
108 /* Translate between the Bonjour status and the Purple status */ | 112 /* Translate between the Bonjour status and the Purple status */ |
109 if (g_ascii_strcasecmp("dnd", bonjour_buddy->status) == 0) | 113 if (g_ascii_strcasecmp("dnd", bonjour_buddy->status) == 0) |
110 status_id = BONJOUR_STATUS_ID_AWAY; | 114 status_id = BONJOUR_STATUS_ID_AWAY; |
111 else | 115 else |
114 /* | 118 /* |
115 * TODO: Figure out the idle time by getting the "away" | 119 * TODO: Figure out the idle time by getting the "away" |
116 * field from the DNS SD. | 120 * field from the DNS SD. |
117 */ | 121 */ |
118 | 122 |
119 /* Create the alias for the buddy using the first and the last name */ | |
120 first = bonjour_buddy->first; | |
121 last = bonjour_buddy->last; | |
122 alias = g_strdup_printf("%s%s%s", | |
123 (first && *first ? first : ""), | |
124 (first && *first && last && *last ? " " : ""), | |
125 (last && *last ? last : "")); | |
126 | |
127 /* Make sure the Bonjour group exists in our buddy list */ | 123 /* Make sure the Bonjour group exists in our buddy list */ |
128 group = purple_find_group(BONJOUR_GROUP_NAME); /* Use the buddy's domain, instead? */ | 124 group = purple_find_group(BONJOUR_GROUP_NAME); /* Use the buddy's domain, instead? */ |
129 if (group == NULL) | 125 if (group == NULL) { |
130 { | |
131 group = purple_group_new(BONJOUR_GROUP_NAME); | 126 group = purple_group_new(BONJOUR_GROUP_NAME); |
132 purple_blist_add_group(group, NULL); | 127 purple_blist_add_group(group, NULL); |
133 } | 128 } |
134 | 129 |
135 /* Make sure the buddy exists in our buddy list */ | 130 /* Make sure the buddy exists in our buddy list */ |
136 buddy = purple_find_buddy(bonjour_buddy->account, bonjour_buddy->name); | 131 buddy = purple_find_buddy(account, bonjour_buddy->name); |
137 | 132 |
138 if (buddy == NULL) | 133 if (buddy == NULL) { |
139 { | 134 buddy = purple_buddy_new(account, bonjour_buddy->name, NULL); |
140 buddy = purple_buddy_new(bonjour_buddy->account, bonjour_buddy->name, alias); | |
141 buddy->proto_data = bonjour_buddy; | 135 buddy->proto_data = bonjour_buddy; |
142 purple_blist_node_set_flags((PurpleBlistNode *)buddy, PURPLE_BLIST_NODE_FLAG_NO_SAVE); | 136 purple_blist_node_set_flags((PurpleBlistNode *)buddy, PURPLE_BLIST_NODE_FLAG_NO_SAVE); |
143 purple_blist_add_buddy(buddy, NULL, group, NULL); | 137 purple_blist_add_buddy(buddy, NULL, group, NULL); |
144 } | 138 } |
145 | 139 |
140 /* Create the alias for the buddy using the first and the last name */ | |
141 first = bonjour_buddy->first; | |
142 last = bonjour_buddy->last; | |
143 if ((first && *first) || (last && *last)) | |
144 alias = g_strdup_printf("%s%s%s", | |
145 (first && *first ? first : ""), | |
146 (first && *first && last && *last ? " " : ""), | |
147 (last && *last ? last : "")); | |
148 serv_got_alias(purple_account_get_connection(account), buddy->name, alias); | |
149 g_free(alias); | |
150 | |
146 /* Set the user's status */ | 151 /* Set the user's status */ |
147 if (bonjour_buddy->msg != NULL) | 152 if (bonjour_buddy->msg != NULL) |
148 purple_prpl_got_user_status(bonjour_buddy->account, buddy->name, status_id, | 153 purple_prpl_got_user_status(account, buddy->name, status_id, |
149 "message", bonjour_buddy->msg, | 154 "message", bonjour_buddy->msg, NULL); |
150 NULL); | |
151 else | 155 else |
152 purple_prpl_got_user_status(bonjour_buddy->account, buddy->name, status_id, | 156 purple_prpl_got_user_status(account, buddy->name, status_id, NULL); |
153 NULL); | |
154 purple_prpl_got_user_idle(bonjour_buddy->account, buddy->name, FALSE, 0); | |
155 | 157 |
156 g_free(alias); | 158 purple_prpl_got_user_idle(account, buddy->name, FALSE, 0); |
157 } | 159 } |
158 | 160 |
159 /** | 161 /** |
160 * Deletes a buddy from memory. | 162 * Deletes a buddy from memory. |
161 */ | 163 */ |
180 g_free(buddy->ver); | 182 g_free(buddy->ver); |
181 | 183 |
182 bonjour_jabber_close_conversation(buddy->conversation); | 184 bonjour_jabber_close_conversation(buddy->conversation); |
183 buddy->conversation = NULL; | 185 buddy->conversation = NULL; |
184 | 186 |
185 #ifdef USE_BONJOUR_APPLE | 187 /* Clean up any mdns implementation data */ |
186 if (buddy->txt_query != NULL) | 188 _mdns_delete_buddy(buddy); |
187 { | |
188 purple_input_remove(buddy->txt_query_fd); | |
189 DNSServiceRefDeallocate(buddy->txt_query); | |
190 } | |
191 #endif | |
192 | 189 |
193 g_free(buddy); | 190 g_free(buddy); |
194 } | 191 } |