Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/user.c @ 16390:4fc51a87ce42
Updates for the account buddy icon stuff. This doesn't yet work fully (and maybe not even partly), but it compiles.
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Wed, 25 Apr 2007 21:48:56 +0000 |
parents | 32c366eeeb99 |
children | 133932a97faa f3874ba27a27 7c0a2ef88018 |
comparison
equal
deleted
inserted
replaced
16389:493ca924c199 | 16390:4fc51a87ce42 |
---|---|
149 g_free(user->store_name); | 149 g_free(user->store_name); |
150 user->store_name = g_strdup(name); | 150 user->store_name = g_strdup(name); |
151 } | 151 } |
152 | 152 |
153 void | 153 void |
154 msn_user_set_buddy_icon(MsnUser *user, const char *filename) | 154 msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) |
155 { | 155 { |
156 struct stat st; | |
157 FILE *fp; | |
158 MsnObject *msnobj = msn_user_get_object(user); | 156 MsnObject *msnobj = msn_user_get_object(user); |
159 | 157 |
160 g_return_if_fail(user != NULL); | 158 g_return_if_fail(user != NULL); |
161 | 159 |
162 if (filename == NULL || g_stat(filename, &st) == -1) | 160 if (img == NULL) |
163 { | |
164 msn_user_set_object(user, NULL); | 161 msn_user_set_object(user, NULL); |
165 } | 162 else |
166 else if ((fp = g_fopen(filename, "rb")) != NULL) | |
167 { | 163 { |
168 PurpleCipherContext *ctx; | 164 PurpleCipherContext *ctx; |
169 char *buf; | 165 char *buf; |
170 gsize len; | 166 gconstpointer data = purple_imgstore_get_data(img); |
167 size_t size = purple_imgstore_get_size(img); | |
171 char *base64; | 168 char *base64; |
172 unsigned char digest[20]; | 169 unsigned char digest[20]; |
173 | 170 |
174 if (msnobj == NULL) | 171 if (msnobj == NULL) |
175 { | 172 { |
180 msn_object_set_creator(msnobj, msn_user_get_passport(user)); | 177 msn_object_set_creator(msnobj, msn_user_get_passport(user)); |
181 | 178 |
182 msn_user_set_object(user, msnobj); | 179 msn_user_set_object(user, msnobj); |
183 } | 180 } |
184 | 181 |
185 msn_object_set_real_location(msnobj, filename); | 182 msn_object_set_image(msnobj, img); |
186 | |
187 buf = g_malloc(st.st_size); | |
188 len = fread(buf, 1, st.st_size, fp); | |
189 | |
190 fclose(fp); | |
191 | 183 |
192 /* Compute the SHA1D field. */ | 184 /* Compute the SHA1D field. */ |
193 memset(digest, 0, sizeof(digest)); | 185 memset(digest, 0, sizeof(digest)); |
194 | 186 |
195 ctx = purple_cipher_context_new_by_name("sha1", NULL); | 187 ctx = purple_cipher_context_new_by_name("sha1", NULL); |
196 purple_cipher_context_append(ctx, (const guchar *)buf, st.st_size); | 188 purple_cipher_context_append(ctx, data, size); |
197 purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); | 189 purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); |
198 g_free(buf); | |
199 | 190 |
200 base64 = purple_base64_encode(digest, sizeof(digest)); | 191 base64 = purple_base64_encode(digest, sizeof(digest)); |
201 msn_object_set_sha1d(msnobj, base64); | 192 msn_object_set_sha1d(msnobj, base64); |
202 g_free(base64); | 193 g_free(base64); |
203 | 194 |
204 msn_object_set_size(msnobj, st.st_size); | 195 msn_object_set_size(msnobj, size); |
205 | 196 |
206 /* Compute the SHA1C field. */ | 197 /* Compute the SHA1C field. */ |
207 buf = g_strdup_printf( | 198 buf = g_strdup_printf( |
208 "Creator%sSize%dType%dLocation%sFriendly%sSHA1D%s", | 199 "Creator%sSize%dType%dLocation%sFriendly%sSHA1D%s", |
209 msn_object_get_creator(msnobj), | 200 msn_object_get_creator(msnobj), |
214 msn_object_get_sha1d(msnobj)); | 205 msn_object_get_sha1d(msnobj)); |
215 | 206 |
216 memset(digest, 0, sizeof(digest)); | 207 memset(digest, 0, sizeof(digest)); |
217 | 208 |
218 purple_cipher_context_reset(ctx, NULL); | 209 purple_cipher_context_reset(ctx, NULL); |
219 purple_cipher_context_append(ctx, (const guchar *)buf, strlen(buf)); | 210 purple_cipher_context_append(ctx, data, strlen((char *)data)); |
220 purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); | 211 purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); |
221 purple_cipher_context_destroy(ctx); | 212 purple_cipher_context_destroy(ctx); |
222 g_free(buf); | 213 g_free(buf); |
223 | 214 |
224 base64 = purple_base64_encode(digest, sizeof(digest)); | 215 base64 = purple_base64_encode(digest, sizeof(digest)); |
225 msn_object_set_sha1c(msnobj, base64); | 216 msn_object_set_sha1c(msnobj, base64); |
226 g_free(base64); | 217 g_free(base64); |
227 } | |
228 else | |
229 { | |
230 purple_debug_error("msn", "Unable to open buddy icon %s!\n", filename); | |
231 msn_user_set_object(user, NULL); | |
232 } | 218 } |
233 } | 219 } |
234 | 220 |
235 void | 221 void |
236 msn_user_add_group_id(MsnUser *user, int id) | 222 msn_user_add_group_id(MsnUser *user, int id) |