# HG changeset patch # User Will Thompson # Date 1191936347 0 # Node ID 66e7b104b4eac4fba2a42fca27f79ebf2eef9698 # Parent 88aa557b997fb2f71ce1fa819d1f9fe75eea4bb0 rlaager pointed out that purple_connection_error_reason should be setting wants_to_die appropriately to the reason, rather than leaving it up to the prpl, so let's make it so! diff -r 88aa557b997f -r 66e7b104b4ea libpurple/connection.c --- a/libpurple/connection.c Sun Oct 07 10:28:32 2007 +0000 +++ b/libpurple/connection.c Tue Oct 09 13:25:47 2007 +0000 @@ -488,7 +488,10 @@ void purple_connection_error(PurpleConnection *gc, const char *text) { - purple_connection_error_reason (gc, PURPLE_REASON_OTHER_ERROR, text); + PurpleDisconnectReason reason = gc->wants_to_die + ? PURPLE_REASON_OTHER_ERROR + : PURPLE_REASON_NETWORK_ERROR; + purple_connection_error_reason (gc, reason, text); } void @@ -497,28 +500,21 @@ const char *description) { PurpleConnectionUiOps *ops; - gboolean fatal; g_return_if_fail(gc != NULL); + g_assert (reason < PURPLE_NUM_REASONS); if (description == NULL) { purple_debug_error("connection", "purple_connection_error_reason: check `description != NULL' failed\n"); description = _("Unknown error"); } - g_assert (reason < PURPLE_NUM_REASONS); - - /* This should probably be removed at some point */ - fatal = purple_connection_reason_is_fatal (reason); - if (fatal != gc->wants_to_die) - purple_debug_warning ("connection", - "reason %u is %sfatal but wants_to_die is %u", - reason, (fatal ? "" : "not "), gc->wants_to_die); - /* If we've already got one error, we don't need any more */ if (gc->disconnect_timeout) return; + gc->wants_to_die = purple_connection_reason_is_fatal (reason); + ops = purple_connections_get_ui_ops(); if (ops != NULL) diff -r 88aa557b997f -r 66e7b104b4ea libpurple/connection.h --- a/libpurple/connection.h Sun Oct 07 10:28:32 2007 +0000 +++ b/libpurple/connection.h Tue Oct 09 13:25:47 2007 +0000 @@ -215,19 +215,23 @@ char *password; /**< The password used. */ int inpa; /**< The input watcher. */ - GSList *buddy_chats; /**< A list of active chats. */ + GSList *buddy_chats; /**< A list of active chats + (#PurpleConversation structs of type + #PURPLE_CONV_TYPE_CHAT). */ void *proto_data; /**< Protocol-specific data. */ char *display_name; /**< How you appear to other people. */ guint keepalive; /**< Keep-alive. */ + /** Wants to Die state. This is set when the user chooses to log out, or + * when the protocol is disconnected and should not be automatically + * reconnected (incorrect password, etc.). prpls should rely on + * purple_connection_error_reason() to set this for them rather than + * setting it themselves. + * @see purple_connection_reason_is_fatal + */ + gboolean wants_to_die; - gboolean wants_to_die; /**< Wants to Die state. This is set - when the user chooses to log out, - or when the protocol is - disconnected and should not be - automatically reconnected - (incorrect password, etc.) */ guint disconnect_timeout; /**< Timer used for nasty stack tricks */ }; @@ -285,7 +289,7 @@ /** * Sets the connection state. PRPLs should call this and pass in - * the state "PURPLE_CONNECTED" when the account is completely + * the state #PURPLE_CONNECTED when the account is completely * signed on. What does it mean to be completely signed on? If * the core can call prpl->set_status, and it successfully changes * your status, then the account is online. @@ -381,13 +385,17 @@ * @param reason The error text. * @deprecated in favour of #purple_connection_error_reason. Calling * @c purple_connection_error(gc, text) is equivalent to calling - * @c purple_connection_error_reason(gc, PURPLE_REASON_OTHER_ERROR, text). + * @c purple_connection_error_reason(gc, reason, text) where @c reason is + * #PURPLE_REASON_OTHER_ERROR if @c gc->wants_to_die is @c TRUE, and + * #PURPLE_REASON_NETWORK_ERROR if not. (This is to keep auto-reconnection + * behaviour the same when using old prpls which don't use reasons yet.) */ void purple_connection_error(PurpleConnection *gc, const char *reason); /** * Closes a connection with an error and an optional description of the - * error. + * error. It also sets @c gc->wants_to_die to the value of + * #purple_connection_reason_is_fatal(@a reason). * * @param reason why the connection is closing. * @param description a localized description of the error. @@ -409,19 +417,19 @@ /** * Reports whether a disconnection reason is fatal (in which case the account * should probably not be automatically reconnected) or transient (so - * auto-reconnection is a good idea. + * auto-reconnection is a good idea). * For instance, #PURPLE_REASON_NETWORK_ERROR is a temporary * error, which might be caused by losing the network connection, so * @a purple_connection_reason_is_fatal(PURPLE_REASON_NETWORK_ERROR) is - * @a FALSE. On the other hand, #PURPLE_REASON_AUTHENTICATION_FAILED probably + * @c FALSE. On the other hand, #PURPLE_REASON_AUTHENTICATION_FAILED probably * indicates a misconfiguration of the account which needs the user to go fix * it up, so @a * purple_connection_reason_is_fatal(PURPLE_REASON_AUTHENTICATION_FAILED) - * is @a TRUE. + * is @c TRUE. * * (This function is meant to replace checking PurpleConnection.wants_to_die.) * - * @return @a TRUE iff automatic reconnection is a bad idea. + * @return @c TRUE iff automatic reconnection is a bad idea. */ gboolean purple_connection_reason_is_fatal (PurpleDisconnectReason reason);