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)