comparison libpurple/protocols/jabber/disco.c @ 26678:1de01f9594c8

Use per-PurpleDiscoList ops for canceling a disco and registering.
author Paul Aurich <paul@darkrain42.org>
date Sat, 11 Apr 2009 21:46:12 +0000
parents 30221bc3da0e
children 1df3579a974b
comparison
equal deleted inserted replaced
26677:30221bc3da0e 26678:1de01f9594c8
955 955
956 ++list_data->fetch_count; 956 ++list_data->fetch_count;
957 jabber_disco_info_do(js, list_data->server, jabber_disco_server_info_cb, list_data); 957 jabber_disco_info_do(js, list_data->server, jabber_disco_server_info_cb, list_data);
958 } 958 }
959 959
960 PurpleDiscoList * 960 static void
961 jabber_disco_get_list(PurpleConnection *gc)
962 {
963 PurpleAccount *account;
964 PurpleDiscoList *list;
965 JabberStream *js;
966 struct jabber_disco_list_data *disco_list_data;
967
968 account = purple_connection_get_account(gc);
969 js = purple_connection_get_protocol_data(gc);
970
971 /* We start with a ref */
972 list = purple_disco_list_new(account);
973
974 disco_list_data = g_new0(struct jabber_disco_list_data, 1);
975 disco_list_data->list = list;
976 disco_list_data->js = js;
977 purple_disco_list_set_protocol_data(list, disco_list_data, disco_proto_data_destroy_cb);
978
979 purple_request_input(gc, _("Server name request"), _("Enter an XMPP Server"),
980 _("Select an XMPP server to query"),
981 js->last_disco_server ? js->last_disco_server : js->user->domain,
982 FALSE, FALSE, NULL,
983 _("Find Services"), PURPLE_CALLBACK(discolist_ok_cb),
984 _("Cancel"), PURPLE_CALLBACK(discolist_cancel_cb),
985 account, NULL, NULL, disco_list_data);
986
987 return list;
988 }
989
990 void
991 jabber_disco_cancel(PurpleDiscoList *list) 961 jabber_disco_cancel(PurpleDiscoList *list)
992 { 962 {
993 struct jabber_disco_list_data *list_data = purple_disco_list_get_protocol_data(list); 963 struct jabber_disco_list_data *list_data = purple_disco_list_get_protocol_data(list);
994 purple_disco_list_set_protocol_data(list, NULL, NULL); 964 purple_disco_list_set_protocol_data(list, NULL, NULL);
995 965
1006 /* We'll free list_data when fetch_count is down to 0 */ 976 /* We'll free list_data when fetch_count is down to 0 */
1007 list_data->list = NULL; 977 list_data->list = NULL;
1008 } 978 }
1009 } 979 }
1010 980
1011 int 981 static void
1012 jabber_disco_service_register(PurpleConnection *gc, PurpleDiscoService *service) 982 jabber_disco_service_register(PurpleConnection *gc, PurpleDiscoService *service)
1013 { 983 {
1014 JabberStream *js = purple_connection_get_protocol_data(gc); 984 JabberStream *js = purple_connection_get_protocol_data(gc);
1015 985
1016 jabber_register_gateway(js, purple_disco_service_get_name(service)); 986 jabber_register_gateway(js, purple_disco_service_get_name(service));
1017 987 }
1018 return 0; 988
989
990 PurpleDiscoList *
991 jabber_disco_get_list(PurpleConnection *gc)
992 {
993 PurpleAccount *account;
994 PurpleDiscoList *list;
995 JabberStream *js;
996 struct jabber_disco_list_data *disco_list_data;
997
998 account = purple_connection_get_account(gc);
999 js = purple_connection_get_protocol_data(gc);
1000
1001 /* We start with a ref */
1002 list = purple_disco_list_new(account);
1003
1004 disco_list_data = g_new0(struct jabber_disco_list_data, 1);
1005 disco_list_data->list = list;
1006 disco_list_data->js = js;
1007 purple_disco_list_set_protocol_data(list, disco_list_data, disco_proto_data_destroy_cb);
1008 purple_disco_list_set_cancel_func(list, jabber_disco_cancel);
1009 purple_disco_list_set_register_func(list, jabber_disco_service_register);
1010
1011 purple_request_input(gc, _("Server name request"), _("Enter an XMPP Server"),
1012 _("Select an XMPP server to query"),
1013 js->last_disco_server ? js->last_disco_server : js->user->domain,
1014 FALSE, FALSE, NULL,
1015 _("Find Services"), PURPLE_CALLBACK(discolist_ok_cb),
1016 _("Cancel"), PURPLE_CALLBACK(discolist_cancel_cb),
1017 account, NULL, NULL, disco_list_data);
1018
1019 return list;
1019 } 1020 }
1020 1021
1021 static void 1022 static void
1022 jabber_disco_items_cb(JabberStream *js, const char *from, JabberIqType type, 1023 jabber_disco_items_cb(JabberStream *js, const char *from, JabberIqType type,
1023 const char *id, xmlnode *packet, gpointer data) 1024 const char *id, xmlnode *packet, gpointer data)