adium: 95bd0b4d: Updated to pidgin-facebook 1.50

evands at pidgin.im evands at pidgin.im
Mon Apr 13 16:05:28 EDT 2009


-----------------------------------------------------------------
Revision: 95bd0b4d7e803a22977e286a89ce7b328e028692
Ancestor: a6a091141aad2980ccbdc12b51ac6e9544ef8d79
Author: evands at pidgin.im
Date: 2009-04-13T20:02:19
Branch: im.pidgin.adium
URL: http://d.pidgin.im/viewmtn/revision/info/95bd0b4d7e803a22977e286a89ce7b328e028692

Modified files:
        libpurple/protocols/facebook/facebook.nsi
        libpurple/protocols/facebook/fb_blist.c
        libpurple/protocols/facebook/fb_connection.c
        libpurple/protocols/facebook/fb_messages.c
        libpurple/protocols/facebook/fb_messages.h
        libpurple/protocols/facebook/libfacebook.c
        libpurple/protocols/facebook/libfacebook.h

ChangeLog: 

Updated to pidgin-facebook 1.50

-------------- next part --------------
============================================================
--- libpurple/protocols/facebook/facebook.nsi	9c3e03e1b45493d9c9b6ae54cd588ad173a9ad09
+++ libpurple/protocols/facebook/facebook.nsi	3fcdc6328140c152a720ace476cd1a7922e7f1e4
@@ -6,7 +6,7 @@ SetCompress off
 ; todo: SetBrandingImage
 ; HM NIS Edit Wizard helper defines
 !define PRODUCT_NAME "pidgin-facebookchat"
-!define PRODUCT_VERSION "1.47"
+!define PRODUCT_VERSION "1.50"
 !define PRODUCT_PUBLISHER "Eion Robb"
 !define PRODUCT_WEB_SITE "http://pidgin-facebookchat.googlecode.com/"
 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
============================================================
--- libpurple/protocols/facebook/fb_blist.c	243c33eccaca15743e5259770e56c278a2883520
+++ libpurple/protocols/facebook/fb_blist.c	c8ae76955f130eb0d93fbea79efe34bf98007be3
@@ -373,7 +373,7 @@ gboolean fb_get_buddy_list(gpointer data
 	fba = data;
 
 	postdata = g_strdup_printf(
-			"user=%d&popped_out=false&force_render=true&buddy_list=1",
+			"user=%d&popped_out=true&force_render=true&buddy_list=1",
 			fba->uid);
 	fb_post_or_get(fba, FB_METHOD_POST, NULL, "/ajax/presence/update.php",
 			postdata, got_buddy_list_cb, NULL, FALSE);
============================================================
--- libpurple/protocols/facebook/fb_connection.c	003c7d50824f5dc7e64f7a8a914c3cd7411befb0
+++ libpurple/protocols/facebook/fb_connection.c	404289452b1ede585959c8ae9561b9e730af6af9
@@ -425,6 +425,8 @@ void fb_post_or_get(FacebookAccount *fba
 	gchar *real_url;
 	gboolean is_proxy = FALSE;
 	const gchar *user_agent;
+	const gchar* const *languages;
+	gchar *language_names;
 
 	/* TODO: Fix keepalive and use it as much as possible */
 	keepalive = FALSE;
@@ -470,6 +472,12 @@ void fb_post_or_get(FacebookAccount *fba
 		g_string_append_printf(request, "Accept-Encoding: gzip\r\n");
 #endif
 
+	/* Tell the server what language we accept, so that we get error messages in our language (rather than our IP's) */
+	languages = g_get_language_names();
+	language_names = g_strjoinv(", ", (gchar **)languages);
+	purple_util_chrreplace(language_names, '_', '-');
+	g_string_append_printf(request, "Accept-Language: %s\r\n", language_names);
+	g_free(language_names);
 
 	purple_debug_misc("facebook", "sending request headers:\n%s\n",
 			request->str);
============================================================
--- libpurple/protocols/facebook/fb_messages.c	63dd1c9053fb8cae9d8edd3f1f17d3292b8a47d2
+++ libpurple/protocols/facebook/fb_messages.c	6831ce6a6068eedeba1fe863b4610515b3394807
@@ -30,42 +30,11 @@ struct _FacebookOutgoingMessage {
 	gchar *message;
 	gint msg_id;
 	guint retry_count;
-	guint resend_timer;
 };
 
 static gboolean fb_send_im_fom(FacebookOutgoingMessage *msg);
-static gboolean fb_resend_im_fom(FacebookOutgoingMessage *msg);
 static gboolean fb_get_new_messages(FacebookAccount *fba);
 
-static FacebookOutgoingMessage *fb_msg_create(FacebookAccount *fba)
-{
-	FacebookOutgoingMessage *msg;
-	
-	msg = g_new0(FacebookOutgoingMessage, 1);
-	msg->fba = fba;
-	
-	return msg;
-}
-
-static void fb_msg_destroy(FacebookOutgoingMessage *msg)
-{
-	if (msg->resend_timer) {
-		purple_timeout_remove(msg->resend_timer);
-	}
-	g_free(msg->who);
-	g_free(msg->message);
-	g_free(msg);	
-}
-
-void fb_cancel_resending_messages(FacebookAccount *fba)
-{
-	while (fba->resending_messages != NULL) {
-		FacebookOutgoingMessage *msg = fba->resending_messages->data;
-		fba->resending_messages = g_slist_remove(fba->resending_messages, msg);
-		fb_msg_destroy(msg);
-	}	
-}
-								  
 static void got_new_messages(FacebookAccount *fba, gchar *data,
 		gsize data_len, gpointer userdata)
 {
@@ -136,16 +105,15 @@ static void got_new_messages(FacebookAcc
 		/* Continue looping, waiting for more messages */
 		purple_debug_error("facebook",
 				"got data back, but it's not even json\n");
-
-		fb_get_new_messages(fba);
+				
+		purple_timeout_add_seconds(1, (GSourceFunc)fb_get_new_messages, fba);
 		return;
 	}
 
 	/* refresh means that the session or post_form_id is invalid */
 	if (g_str_equal(data, "for (;;);{\"t\":\"refresh\"}"))
 	{
-		if (fba->post_form_id_refresh_timer == 0)
-			fba->post_form_id_refresh_timer = purple_timeout_add_seconds(1, (GSourceFunc)fb_get_post_form_id, fba);
+		purple_timeout_add_seconds(1, (GSourceFunc)fb_get_post_form_id, fba);
 		return;
 	}
 
@@ -153,7 +121,7 @@ static void got_new_messages(FacebookAcc
 	if (g_str_equal(data, "for (;;);{\"t\":\"continue\"}"))
 	{
 		/* Continue looping, waiting for more messages */
-		fb_get_new_messages(fba);
+		purple_timeout_add_seconds(1, (GSourceFunc)fb_get_new_messages, fba);
 		return;
 	}
 
@@ -239,8 +207,6 @@ static void got_new_messages(FacebookAcc
 					purple_debug_info("facebook", "i: %d\n", i);
 					if (i == FB_LAST_MESSAGE_MAX)
 					{
-						gchar *postdata;
-
 						/* if we're here, it must be a new message */
 						fba->last_messages[fba->next_message_pointer++] = msgID;
 						if (fba->next_message_pointer >= FB_LAST_MESSAGE_MAX)
@@ -277,6 +243,7 @@ static void got_new_messages(FacebookAcc
 
 						serv_got_im(pc, from, message_text, PURPLE_MESSAGE_RECV, atoi(message_time));
 
+						
 						/*
 						 * Acknowledge receipt of the message by simulating
 						 * focusing the window.  Not sure what the window_id
@@ -284,13 +251,18 @@ static void got_new_messages(FacebookAcc
 						 * something internal to the Facebook javascript that
 						 * is used for maintaining UI state across page loads?
 						 */
-						postdata = g_strdup_printf(
-								"focus_chat=%s&window_id=12345&post_form_id=%s",
-								from, fba->post_form_id);
-						fb_post_or_get(fba, FB_METHOD_POST, NULL,
-								"/ajax/chat/settings.php?_ecdc=false",
-								postdata, NULL, NULL, FALSE);
-						g_free(postdata);
+						if (!fba->is_idle)
+						{
+							gchar *postdata;
+	
+							postdata = g_strdup_printf(
+									"focus_chat=%s&window_id=12345&post_form_id=%s",
+									from, fba->post_form_id);
+							fb_post_or_get(fba, FB_METHOD_POST, NULL,
+									"/ajax/chat/settings.php?_ecdc=false",
+									postdata, NULL, NULL, FALSE);
+							g_free(postdata);
+						}
 
 						g_free(message_text);
 						g_free(message_time);
@@ -433,8 +405,7 @@ static void fb_send_im_cb(FacebookAccoun
 				/* there was an error, either report it or retry */
 				if (msg->retry_count++ < FB_MAX_MSG_RETRY)
 				{
-					msg->resend_timer = purple_timeout_add_seconds(1, (GSourceFunc)fb_resend_im_fom, msg);
-					fba->resending_messages = g_slist_prepend(fba->resending_messages, msg);
+					purple_timeout_add_seconds(1, (GSourceFunc)fb_send_im_fom, msg);
 					g_free(error_summary);
 					return;
 				}
@@ -451,7 +422,9 @@ static void fb_send_im_cb(FacebookAccoun
 	}
 
 	g_free(error_summary);
-	fb_msg_destroy(msg);
+	g_free(msg->who);
+	g_free(msg->message);
+	g_free(msg);
 }
 
 static gboolean fb_send_im_fom(FacebookOutgoingMessage *msg)
@@ -472,24 +445,19 @@ static gboolean fb_send_im_fom(FacebookO
 	return FALSE;
 }
 
-static gboolean fb_resend_im_fom(FacebookOutgoingMessage *msg)
-{
-	msg->fba->resending_messages = g_slist_remove(msg->fba->resending_messages, msg);
-
-	return fb_send_im_fom(msg);
-}
-
 int fb_send_im(PurpleConnection *pc, const gchar *who, const gchar *message, PurpleMessageFlags flags)
 {
 	FacebookOutgoingMessage *msg;
 
-	msg = fb_msg_create(pc->proto_data);
+	msg = g_new0(FacebookOutgoingMessage, 1);
+	msg->fba = pc->proto_data;
 
 	/* convert html to plaintext, removing trailing spaces */
 	msg->message = purple_markup_strip_html(message);
 	if (strlen(msg->message) > 999)
 	{
-		fb_msg_destroy(msg);
+		g_free(msg->message);
+		g_free(msg);
 		return -E2BIG;
 	}
 
@@ -583,7 +551,6 @@ gboolean fb_get_post_form_id(FacebookAcc
 
 gboolean fb_get_post_form_id(FacebookAccount *fba)
 {
-	fba->post_form_id_refresh_timer = 0;
-	fb_post_or_get(fba, FB_METHOD_GET, NULL, "/home.php", NULL, got_form_id_page, NULL, FALSE);
+	fb_post_or_get(fba, FB_METHOD_GET, NULL, "/presence/popout.php", NULL, got_form_id_page, NULL, FALSE);
 	return FALSE;
 }
============================================================
--- libpurple/protocols/facebook/fb_messages.h	79be7f4f904b524f43c1c45564065564b4cc1e96
+++ libpurple/protocols/facebook/fb_messages.h	44345656bb5ce15bc8a1a50d66aaa6ed88426dff
@@ -27,6 +27,4 @@ int fb_send_im(PurpleConnection *pc, con
 int fb_send_im(PurpleConnection *pc, const gchar *who, const gchar *message,
 		PurpleMessageFlags flags);
 
-void fb_cancel_resending_messages(FacebookAccount *fba);
-
 #endif /* FACEBOOK_MESSAGES_H */
============================================================
--- libpurple/protocols/facebook/libfacebook.c	f92cb984ed2d987621f48d5753f224ec7411097e
+++ libpurple/protocols/facebook/libfacebook.c	845e5f8dd761ecab24105b9ccd26ea8b052cdc58
@@ -175,6 +175,10 @@ static GList *fb_statuses(PurpleAccount 
 		"message_date", _("Message changed"),
 		purple_value_new(PURPLE_TYPE_STRING), NULL);
 	types = g_list_append(types, status);
+	
+	/* Cave into feature requests and allow people to set themselves to be idle */
+	status = purple_status_type_new_full(PURPLE_STATUS_AWAY, NULL, _("Idle"), FALSE, TRUE, FALSE);
+	types = g_list_append(types, status);
 
 	/* Offline people dont have messages */
 	status = purple_status_type_new_full(PURPLE_STATUS_OFFLINE, NULL, _("Offline"), FALSE, TRUE, FALSE);
@@ -312,6 +316,9 @@ static void fb_close(PurpleConnection *p
 
 	purple_debug_info("facebook", "disconnecting account\n");
 
+	g_return_if_fail(pc != NULL);
+	g_return_if_fail(pc->proto_data != NULL);
+	
 	fba = pc->proto_data;
 
 	/* Tell Facebook that we've logged out. */
@@ -360,9 +367,6 @@ static void fb_close(PurpleConnection *p
 	if (fba->perpetual_messages_timer) {
 		purple_timeout_remove(fba->perpetual_messages_timer);
 	}
-	if (fba->post_form_id_refresh_timer) {
-		purple_timeout_remove(fba->post_form_id_refresh_timer);
-	}
 
 	purple_debug_info("facebook", "destroying %d incomplete connections\n",
 			g_slist_length(fba->conns));
@@ -377,10 +381,6 @@ static void fb_close(PurpleConnection *p
 		fba->dns_queries = g_slist_remove(fba->dns_queries, dns_query);
 		purple_dnsquery_destroy(dns_query);
 	}
-	
-	if (fba->resending_messages != NULL) {
-		fb_cancel_resending_messages(fba);
-	}
 
 	g_hash_table_destroy(fba->cookie_table);
 	g_hash_table_destroy(fba->hostname_ip_cache);
@@ -466,7 +466,14 @@ static void fb_set_status_p(PurpleAccoun
 {
 	const gchar *message;
 	gchar *stripped;
+	FacebookAccount *fba = account->gc->proto_data;
 
+	/* if "away" set idle */
+	if (fba && purple_status_type_get_primitive(purple_status_get_type(status)) == PURPLE_STATUS_AWAY)
+	{
+		fba->is_idle = TRUE;	
+	}
+
 	/* first check that we actually want to set this through Pidgin */
 	if (!purple_account_get_bool(account,
 				"facebook_set_status_through_pidgin", FALSE))
============================================================
--- libpurple/protocols/facebook/libfacebook.h	e3cc22c0e4235b0ccd35bd750d5023af6a0ce0ef
+++ libpurple/protocols/facebook/libfacebook.h	bb3ffbaac4c4edba105d1b79dd840c5744838ebf
@@ -21,7 +21,7 @@
 #ifndef LIBFACEBOOK_H
 #define LIBFACEBOOK_H
 
-#define FACEBOOK_PLUGIN_VERSION "1.47"
+#define FACEBOOK_PLUGIN_VERSION "1.50"
 
 #include <glib.h>
 
@@ -90,7 +90,6 @@ struct _FacebookAccount {
 	GSList *dns_queries;
 	GHashTable *cookie_table;
 	gchar *post_form_id;
-	guint post_form_id_refresh_timer;
 	gint32 uid;
 	guint buddy_list_timer;
 	guint friend_request_timer;
@@ -98,7 +97,6 @@ struct _FacebookAccount {
 	guint message_fetch_sequence;
 	gint64 last_messages[FB_LAST_MESSAGE_MAX];
 	guint16 next_message_pointer;
-	GSList *resending_messages;
 	GSList *auth_buddies;
 	GHashTable *hostname_ip_cache;
 	guint notifications_timer;


More information about the Commits mailing list