changeset 27126:0901c3662286

Make XMPP Disco plugin show better errors when getting a 404-like return.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 06 Jun 2009 02:12:32 +0000
parents e6ba07a72fd8
children 79c9695f7a8b
files pidgin/plugins/disco/xmppdisco.c
diffstat 1 files changed, 20 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/pidgin/plugins/disco/xmppdisco.c	Sat Jun 06 01:42:15 2009 +0000
+++ b/pidgin/plugins/disco/xmppdisco.c	Sat Jun 06 02:12:32 2009 +0000
@@ -473,6 +473,7 @@
 	struct item_data *cb_data = data;
 	PidginDiscoList *list = cb_data->list;
 	xmlnode *query;
+	xmlnode *error;
 	gboolean items = FALSE;
 
 	--list->fetch_count;
@@ -489,16 +490,26 @@
 				break;
 			}
 		}
+
+		if (items) {
+			xmpp_disco_items_do(pc, cb_data, from, NULL /* node */, server_items_cb);
+			++list->fetch_count;
+			pidgin_disco_list_ref(list);
+		}
 	}
-
-	if (items) {
-		xmpp_disco_items_do(pc, cb_data, from, NULL /* node */, server_items_cb);
-		++list->fetch_count;
-		pidgin_disco_list_ref(list);
-	} else {
-		purple_notify_error(my_plugin, _("Error"),
-		                    _("Server does not support service discovery"),
-		                   NULL);
+	else {
+		error = xmlnode_get_child(iq, "error");
+		if (xmlnode_get_child(error, "remote-server-not-found")
+		 || xmlnode_get_child(error, "jid-malformed")) {
+			purple_notify_error(my_plugin, _("Error"),
+			                    _("Server does not exist"),
+ 			                    NULL);
+		}
+		else {
+			purple_notify_error(my_plugin, _("Error"),
+			                    _("Server does not support service discovery"),
+			                    NULL);
+		}
 		pidgin_disco_list_set_in_progress(list, FALSE);
 		g_free(cb_data);
 	}