libpurple/protocols/jabber/facebook.c

branch
soc.2013.gobjectification.plugins
changeset 37144
8b63b9948107
parent 36020
47474e8b92dd
parent 37038
8832d14d7d0c
child 37148
50f361d39a1e
--- a/libpurple/protocols/jabber/facebook.c	Sun May 04 06:28:56 2014 +0530
+++ b/libpurple/protocols/jabber/facebook.c	Sat May 10 03:56:36 2014 +0530
@@ -34,22 +34,47 @@
 }
 
 static void
+facebook_login(PurpleAccount *account)
+{
+	PurpleConnection *gc;
+	JabberStream *js;
+
+	jabber_login(account);
+
+	gc = purple_account_get_connection(account);
+	if (!gc)
+		return;
+
+	purple_connection_set_flags(gc, 0);
+
+	js = purple_connection_get_protocol_data(gc);
+	if (!js)
+		return;
+
+	js->server_caps |= JABBER_CAP_FACEBOOK;
+}
+
+static void
 facebook_protocol_init(PurpleProtocol *protocol)
 {
 	PurpleAccountUserSplit *split;
 	PurpleAccountOption *option;
 	GList *encryption_values = NULL;
 
-	protocol->id   = "prpl-facebook-xmpp";
-	protocol->name = "Facebook (XMPP)";
+	protocol->id      = "prpl-facebook-xmpp";
+	protocol->name    = "Facebook (XMPP)";
+	protocol->options = 0;
+	purple_protocol_override(protocol, PURPLE_PROTOCOL_OVERRIDE_ICON_SPEC);
 
 	/* Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im */
 	split = purple_account_user_split_new(_("Domain"), "chat.facebook.com", '@');
 	purple_account_user_split_set_reverse(split, FALSE);
+	purple_account_user_split_set_constant(split, TRUE);
 	protocol->user_splits = g_list_append(protocol->user_splits, split);
 
 	split = purple_account_user_split_new(_("Resource"), "", '/');
 	purple_account_user_split_set_reverse(split, FALSE);
+	purple_account_user_split_set_constant(split, TRUE);
 	protocol->user_splits = g_list_append(protocol->user_splits, split);
 
 #define ADD_VALUE(list, desc, v) { \
@@ -73,44 +98,26 @@
 	protocol->account_options = g_list_append(protocol->account_options,
 						   option);
 
-	option = purple_account_option_bool_new(
-						_("Allow plaintext auth over unencrypted streams"),
-						"auth_plain_in_clear", FALSE);
-	protocol->account_options = g_list_append(protocol->account_options,
-						   option);
-
-	option = purple_account_option_int_new(_("Connect port"), "port", 5222);
-	protocol->account_options = g_list_append(protocol->account_options,
-						   option);
-
-	option = purple_account_option_string_new(_("Connect server"),
-						  "connect_server", NULL);
-	protocol->account_options = g_list_append(protocol->account_options,
-						  option);
-
 	option = purple_account_option_string_new(_("BOSH URL"),
 						  "bosh_url", NULL);
 	protocol->account_options = g_list_append(protocol->account_options,
 						  option);
-
-	/* this should probably be part of global smiley theme settings later on,
-	  shared with MSN */
-	option = purple_account_option_bool_new(_("Show Custom Smileys"),
-		"custom_smileys", TRUE);
-	protocol->account_options = g_list_append(protocol->account_options,
-		option);
 }
 
 static void
 facebook_protocol_class_init(PurpleProtocolClass *klass)
 {
+	klass->login     = facebook_login;
 	klass->list_icon = facebook_list_icon;
 }
 
 static void
 facebook_protocol_client_iface_init(PurpleProtocolClientIface *client_iface)
 {
-	client_iface->get_moods = NULL;
+	client_iface->get_actions     = NULL;
+	client_iface->find_blist_chat = NULL;
+	client_iface->blist_node_menu = NULL;
+	client_iface->get_moods       = NULL;
 }
 
 static void
@@ -118,11 +125,27 @@
 {
 	server_iface->register_user   = NULL;
 	server_iface->unregister_user = NULL;
+	server_iface->set_info        = NULL;
 	server_iface->add_buddy       = NULL;
 	server_iface->remove_buddy    = NULL;
 	server_iface->alias_buddy     = NULL;
 	server_iface->group_buddy     = NULL;
 	server_iface->rename_group    = NULL;
+	server_iface->set_buddy_icon  = NULL;
+}
+
+static void
+facebook_protocol_chat_iface_init(PurpleProtocolChatIface *chat_iface)
+{
+	chat_iface->info               = NULL;
+	chat_iface->info_defaults      = NULL;
+	chat_iface->join               = NULL;
+	chat_iface->get_name           = NULL;
+	chat_iface->invite             = NULL;
+	chat_iface->leave              = NULL;
+	chat_iface->send               = NULL;
+	chat_iface->get_user_real_name = NULL;
+	chat_iface->set_topic          = NULL;
 }
 
 static void
@@ -133,6 +156,13 @@
 }
 
 static void
+facebook_protocol_roomlist_iface_init(PurpleProtocolRoomlistIface *roomlist_iface)
+{
+	roomlist_iface->get_list = NULL;
+	roomlist_iface->cancel   = NULL;
+}
+
+static void
 facebook_protocol_attention_iface_init(PurpleProtocolAttentionIface *attention_iface)
 {
 	attention_iface->send      = NULL;
@@ -163,9 +193,15 @@
 	PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER_IFACE,
 	                                  facebook_protocol_server_iface_init)
 
+	PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT_IFACE,
+	                                  facebook_protocol_chat_iface_init)
+
 	PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY_IFACE,
 	                                  facebook_protocol_privacy_iface_init)
 
+	PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST_IFACE,
+	                                  facebook_protocol_roomlist_iface_init)
+
 	PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ATTENTION_IFACE,
 	                                  facebook_protocol_attention_iface_init)
 

mercurial