Mercurial > pidgin.yaz
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) |