libpurple/protocols/facebook/facebook.c

branch
facebook
changeset 37276
853fadf2e250
parent 37275
9e295f087bf6
child 37281
2b60f30897d9
equal deleted inserted replaced
37275:9e295f087bf6 37276:853fadf2e250
62 fb_data_save(fata); 62 fb_data_save(fata);
63 purple_connection_set_state(gc, PURPLE_CONNECTION_CONNECTED); 63 purple_connection_set_state(gc, PURPLE_CONNECTION_CONNECTED);
64 } 64 }
65 65
66 static void 66 static void
67 fb_cb_icon_fetch(PurpleHttpConnection *con, PurpleHttpResponse *res, 67 fb_cb_data_icon(PurpleHttpConnection *con, PurpleHttpResponse *res,
68 gpointer data) 68 gpointer data)
69 { 69 {
70 const gchar *csum; 70 const gchar *csum;
71 const gchar *name; 71 const gchar *name;
72 const gchar *str; 72 const gchar *str;
73 FbApi *api; 73 FbApi *api;
74 FbData *fata; 74 FbDataIcon *icon = data;
75 FbHttpParams *params; 75 FbHttpParams *params;
76 GError *err = NULL; 76 GError *err = NULL;
77 gsize size; 77 gsize size;
78 guchar *idata; 78 guchar *idata;
79 PurpleAccount *acct; 79 PurpleAccount *acct;
80 PurpleBuddy *bdy = data;
81 PurpleConnection *gc;
82 PurpleHttpRequest *req; 80 PurpleHttpRequest *req;
83 81
84 acct = purple_buddy_get_account(bdy); 82 acct = purple_buddy_get_account(icon->buddy);
85 gc = purple_account_get_connection(acct); 83 api = fb_data_get_api(icon->fata);
86 fata = purple_connection_get_protocol_data(gc);
87 api = fb_data_get_api(fata);
88 84
89 if (!fb_http_error_chk(res, &err)) { 85 if (!fb_http_error_chk(res, &err)) {
90 fb_cb_api_error(api, err, fata); 86 fb_cb_api_error(api, err, icon->fata);
91 g_error_free(err); 87 g_error_free(err);
92 return; 88 return;
93 } 89 }
94 90
95 req = purple_http_conn_get_request(con); 91 req = purple_http_conn_get_request(con);
96 str = purple_http_request_get_url(req); 92 str = purple_http_request_get_url(req);
97 params = fb_http_params_new_parse(str, TRUE); 93 params = fb_http_params_new_parse(str, TRUE);
98 csum = fb_http_params_get_str(params, "oh", &err); 94 csum = fb_http_params_get_str(params, "oh", &err);
99 95
100 name = purple_buddy_get_name(bdy); 96 name = purple_buddy_get_name(icon->buddy);
101 str = purple_http_response_get_data(res, &size); 97 str = purple_http_response_get_data(res, &size);
102 idata = g_memdup(str, size); 98 idata = g_memdup(str, size);
103 99
104 purple_buddy_icons_set_for_user(acct, name, idata, size, csum); 100 purple_buddy_icons_set_for_user(acct, name, idata, size, csum);
105 fb_http_params_free(params); 101 fb_http_params_free(params);
147 bdy = purple_blist_find_buddy(acct, uid); 143 bdy = purple_blist_find_buddy(acct, uid);
148 144
149 if (bdy == NULL) { 145 if (bdy == NULL) {
150 bdy = purple_buddy_new(acct, uid, user->name); 146 bdy = purple_buddy_new(acct, uid, user->name);
151 purple_blist_add_buddy(bdy, NULL, grp, NULL); 147 purple_blist_add_buddy(bdy, NULL, grp, NULL);
152 purple_http_get(gc, fb_cb_icon_fetch, bdy, user->icon); 148 fb_data_icon_add(fata, bdy, user->icon,
149 fb_cb_data_icon);
153 continue; 150 continue;
154 } 151 }
155 152
156 csum = purple_buddy_icons_get_checksum_for_user(bdy); 153 csum = purple_buddy_icons_get_checksum_for_user(bdy);
157 154
158 if (!purple_strequal(csum, user->csum)) { 155 if (!purple_strequal(csum, user->csum)) {
159 purple_http_get(gc, fb_cb_icon_fetch, bdy, user->icon); 156 fb_data_icon_add(fata, bdy, user->icon,
157 fb_cb_data_icon);
160 } 158 }
161 } 159 }
162 160
161 fb_data_icon_queue(fata);
163 purple_connection_update_progress(gc, _("Connecting"), 3, 4); 162 purple_connection_update_progress(gc, _("Connecting"), 3, 4);
164 fb_api_connect(api); 163 fb_api_connect(api);
165 } 164 }
166 165
167 static void 166 static void

mercurial